parky/control

The fleet, the sources, the pointer. Sign in.

parky/control
auto-approval · which enrolments skip the Approve press

A device that enrols with the baked key is judged by what it reports about itself — first matching rule wins, approve approves it, deny holds it, no match holds it — or, with approve everyone, no match approves any device that has reported its model (the bare shell is still held until the app enrols). A held device keeps its Approve button. Approval is not the proxy: a phone becomes a node only once it is still checking in 15 minutes after it joined; a TV is a node at once. The proxy shell provisions first with no facts and the app follows seconds later with the model and form, so a rule usually lands on that second call; the tunnel then comes up on the shell's next check-in (≤15 min).

advanced · add a bare proxy device by hand

      

providers.json

download
sourcelabelidrankdl rank qualityembedtypemovie / seriesreach
Rows are in fallback order — drag the handle, or edit rank; the app walks them top to bottom. A note block travels with the row below it.

scraper modules

A module is pinned by sha256 and the pin fails closed: re-uploading scrapers/*.js without recomputing the digest disables it on every install at once. drifted here is that.

backups

—

Every save copies the previous file here first. Restoring goes through the same path, so the current file is backed up too.

sports

The sports block of providers.json: streamed.pk's links and how its streams are resolved, plus the second source's domain. Every field is optional — a field left out keeps the app's built-in value, a field the app can't use is ignored (and refused here), and removing the block reverts every install to the built-in values. Fields: api, badges, origin, maxTries (1–6), embed { referer, match (the playlist request, as a regex), streamReferer, streamHeaders, timeoutMs }, and sportzx { enabled, api (its domain — it rotates, so this is the field that matters), mirrors }. Installs pick it up with the rest of the manifest. A changed mechanism is the embed module instead (pointer-publish --sports). docs/plan-sports.md, docs/plan-sportzx.md.

stream probe

probe log

pointer.json

addresses

anchors — where a device looks for THIS file

The APK bakes in the first; every install that has ever fetched a pointer learns the rest. This is where a fallback server goes: add its pointer URL here and installs keep working when the primary is gone.

update

no update block

Set from the releases tab — the digest is read from the APK, never typed.

module — the proxy dex the shell may load

no module pin

An approved device downloads the dex and loads it only if its sha256 is this one. Replace the dex on the server, press this, publish. Between the two, devices refuse and retry — deploy the dex first, then the pin.

live vs draft

Draft differs from the live pointer. The signing key is not on this server, so publishing is one local command:
bun scripts/pointer-publish.ts
It logs in, pulls this draft, signs, uploads, verifies the served copy, and clears the draft.

releases

Version and applicationId are read from the APK itself; a build that is not is refused. parky-http.apk (the stable name) is never overwritten here.

versionbuilt assha256sizeuploadedstatus

playback

traffic

parky.mov, read from Caddy's access log — no script on the page, no cookies. A visitor is one IP per day; a download is one IP per day on /parky.apk.

posts

Drafts for @parkymov, timed in Eastern. For each: copy → x.com → paste → the calendar icon (Schedule post) → pick the time shown → tick scheduled. Sport lists only games streamed.pk marks popular, a few days ahead — do a session twice a week. Nothing here posts by itself.

change password

Every other session is signed out. You will be asked to sign in again with the new password.

this panel

host
admin.parky.mov
device api
api.parky.mov
control
…
session
…

The device-facing host path-allowlists only what the APK needs; everything on this page is refused there.