Getting media into the anarchive from our own devices — a Telegram bot, a form, a POST. This is the upload counterpart of the capture channels in Media Plan: instead of pulling from YouTube or the BBC, we push our own audio and video — voice notes, video notes, screencasts, field recordings — and each upload becomes a wiki page with an `# Assets` section.
## The Pattern
An upload is a **file plus an intent**. The file is the media; the intent is a short prompt riding alongside it — a Telegram caption, a form field, a JSON property. The intent says what to do: transcribe, summarise, clip, and where the page lands.
Every door feeds the same pipeline: file and prompt arrive in an inbox, the Outpost does the heavy work — probe, transcode, whisper, summarise — and out comes a wiki page with the media in its assets folder. Public pages join the anarchive and get pinned per Anarchive Pinning; private pages land on the Pi5 wiki and go nowhere else. One pipeline, many doors.
## Four Doors
**Max's hosted bot.** The door that already exists. Max — one of the Mice — has built a Telegram bot the usual way: BotFather registration, webhook delivery, hosted in the cloud. It forwards what it receives — file plus caption — as a POST to a public API on the Pi5. What it needs from us is the receiving end: an HTTPS endpoint and a shared token. The POST contract — URL shape, payload fields, how the secret travels — is agreed on Bot Contract — the page Max implements against.
**The local long-poll bot.** The Pi5's own door, kept and built as well. Long polling makes only outbound connections — no open port, no webhook, no DNS — and everything it leans on (whisper, qwen3, the ntfy push) is already resident on the Pi, so it adds nothing to the memory budget beyond the bot process itself. Graham's dictation pipeline proved the shape; this is its homecoming. It also keeps uploads flowing when the hosted bot or its cloud is down.
**The form.** A plain upload form — choose a file, type instructions, submit. Served by the Outpost job API on the local farm, where it needs no authentication story at all. The ghost-page pattern returns the freshly built page straight into the lineup.
**The public POST API.** The same endpoint Max's bot posts to, opened wider: other bots, other machines, and eventually other households — multipart posts of file plus instructions, one bearer token per client.
## Ingress Options
Max's bot needs a public door on the Pi5 from day one. Ranked, local-first:
1. **Tailscale Funnel on the Pi5.** Public HTTPS terminating on the Pi without touching the router — no port forwarding, certificates handled, revocable. Joins the Hitchhiker Tailnet work already underway. The Embassy-shaped answer, and the recommended door for Max's bot. 2. **The station front.** The studio already has a public name — `finsburypark.tv`, on Dynadot dynamic DNS, Caddy on the MacMini answering 80/443. A `drop` path reverse-proxied across the LAN to the Pi5 reuses working ingress. (The domain memory serves: it is finsburypark.tv that carries the DDNS experiment, not hitchhiker.tv — hitchhiker.fm waits as the long-term name.) 3. **None — for the local bot.** Long polling needs no ingress at all. Its ceiling is the cloud Bot API's 20 MB bot-download limit — comfortable for voice notes and video notes alike. 4. **A rented tunnel** — Cloudflare and kin. Works, but puts a corporate front door on a local-first archive. Not the direction.
## Authentication
A ladder, matching the doors:
- **Now:** Max's bot authenticates to the Pi5 with a **shared bearer token** — minted by us, held by the bot, kept in the Keychain locally and as a mode-600 token file on the Pi — never in a repo or a wiki page. On the Telegram side both bots hold a **chat-id allowlist**: strangers are ignored. - **Next:** a token per Embassy rather than per person — a capability that a household holds and can lose. - **Later:** the p2p trust graph replaces static tokens — publish-to-prove identity from the wiki-chat work, where an Embassy vouches for its members and the upload door honours the graph. That is the Hitchhiker Embassy direction: every HomeLab both a client and a door.
## Routing
The intent decides where the page lands. Say nothing and the upload goes **private** — a page on the Pi5 wiki, media on the X9 drive. Say `public` (or name a site) and the page joins the anarchive, assets pinned, CIDs recorded per the Filename Convention. Private is the default; publication is a choice.
## Use Cases
Three uses drive the build, each with its page on its home site and a twin forked here: - Spoken Deeds — energy accounting by the Mice: a voice note names a deed, the transcript becomes pledge evidence. Home: `plan.ide.earth`. - Sound of Law — the sound of the constitution growing, gathered for Hitchhiker FM, with Contributing Sound as the how-to. Home: `fm.ide.earth`. - Weekly Transmission — visual and audio elements for the weekly finsburypark.tv video podcast. Home: `tv.fab.fish`.
## Roadmap
- **Phase A — the receiving end.** The Pi5 POST endpoint behind a Tailscale Funnel — answering instantly, stub-first — a bearer token minted for Max's bot, and the Bot Contract agreed. The local long-poll bot lands alongside — same inbox, same pipeline. - **Phase B — the pipeline.** whisper, qwen3 summaries, page building and routing behind both doors; voice notes and video notes flowing end to end. Details: Uploading Audio and Uploading Video. - **Phase C — the form.** The same pipeline behind an upload form on the local farm. - **Phase D — the trust graph.** Tokens give way to vouching; pinning and the Media Plugin pick up the published pages.
## Open Questions
- Do Max's bot and the local bot share one Telegram identity or run as two bots? Allowlists make either work. - Who summarises: qwen3 on the Pi5 (free, slow, private) or Claude on the Mac (better, metered)? Likely: qwen3 for triage, Claude on request. - Where the inbox lives — the X9 at `/mnt/wikimedia` is the obvious spool.
## Links
- Voice to Wiki using Telegram
— Graham's vision page: talk for two minutes, wiki equals proof of work
- Telegram Dictation to Wiki
— the vibecoded Telegram → iCloud → MacWhisper pipeline this builds on
- Hitchhiker Tailnet
— the Tailscale mesh the Funnel option joins
- Chat as Trust Graph
— the publish-to-prove identity work behind the auth ladder
- Telegram Bot API
— long polling, file limits, local Bot API servers
## See - Bot Contract — what Max's bot sends and what comes back - Uploading Audio and Uploading Video — the two channels - Media Plan — the download channels this mirrors - Anarchive Media Plan — the Outpost, plugin and pinning layers the pipeline rides - Homebase and Anarchive Pinning — where public uploads survive - Downloading Audio — the pull twin of Uploading Audio
# Assets
upload-media