Files
app-catalog-felhom.eu/onboarding/metube.md
T

77 lines
15 KiB
Markdown

# Onboarding record — metube
app: metube
opened: 2026-10-02
template_at: uncommitted working tree 2026-10-02 (ghcr.io/alexta69/metube:2026.09.29, family_gate, no exceptions)
<!--
MeTube was STOPPED on 2026-10-01 for one reason: it has no login at all, by design, and the box had no permanent
household-only door (felhom.eu/documentation/audits/new-apps-2026-10-01/FIT.md, R-767). Controller 0.287.0 has one: the family gate (`09` §3 decisions 63/64). Evidence
root: felhom.eu/documentation/audits/family-gate-2026-10-02/ — A/ (the gate on 9202: strangers, family members, the websocket, the controller down), B/box/ (MeTube on 9202,
drill catalog, controller 0.287.0: a fresh install at 2026.09.28, checks, the product's Update to 2026.09.29, backup,
restore, remove), C-metube-bench/ (bench LXC 9401, swap 0, rebuilt and destroyed: birth, the step, the burst, gates),
B/metube-reads/ (the entrypoint and every setting, read at the tag).
-->
0.1 | done | felhom.eu/documentation/audits/licences-2026-10-02/read-2.md — AGPL-3.0 at 2026.09.29; upstream's own image, pulled, never redistributed
0.2 | done | felhom.eu/documentation/audits/new-apps-2026-10-01/A/A1-github-facts.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/C-metube-bench/C1b-tag-shape.txt — 80 releases in 2026, the last 2026.09.29; 9 open issues; pushed 2026-09-29
0.3 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/C-metube-bench/C1-previous-tag.txt — dated version tags; 2026.09.28 and 2026.09.29 resolve, amd64 + arm64
0.4 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/metube-reads/reads-2026.09.29.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/metube-fresh.txt — no telemetry, no version check in the source; yt-dlp self-update runs ONLY if YTDL_NIGHTLY_UPDATE_TIME is set (the template does not set it, so the pinned yt-dlp stays); no outbound connection held at rest; the first-start log names no host but the seeded download
0.5 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/metube-reads/reads-2026.09.29.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/metube-fresh.txt — downloading from the internet is the app's whole job, from the household's address (the page says so); nothing is fetched at the first start; a local YouTube token helper (bgutil-pot) starts with it and talks to YouTube only for a YouTube download
0.6 | n/a | MeTube serves HTTP on port 8081 only, through traefik
0.7 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/metube-reads/reads-2026.09.29.txt ; felhom.eu/documentation/audits/new-apps-2026-10-01/FIT.md — web only on Felhom: upstream's "send to MeTube" browser extensions, bookmarklets and phone apps call /add from another site (CORS_ALLOWED_ORIGINS, empty here) and carry no family login, so behind the gate they do not work — the household pastes the link in the page (first_steps say so); no exception by design, MeTube has no login to fall back on
0.8 | done | app-catalog-felhom.eu/templates/metube/.felhom.yml — tagline + use_cases (hu, en)
0.9 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/metube-reads/reads-2026.09.29.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/C-metube-bench/birth/evidence/BIRTH/birth.log — no public-URL setting is set (PUBLIC_HOST_URL is a relative path); it starts and downloads on the bench under no public name
1.1 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/C-metube-bench/C3-catalog-gates-metube.txt — image-pins and image-resolvable OK on the bench
1.2 | n/a | MeTube has no database engine; its queue and history are files in /state
1.3 | n/a | no MariaDB or PostgreSQL sidecar in this template
1.4 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/C-metube-bench/move/MV-metube.log ; felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/metube-step.txt — no database to migrate; 2026.09.28 seeded (a download), stepped INTO 2026.09.29 on both venues, the history and the file read back
1.5 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/metube-fresh.txt — `python3 app/main.py` (aiohttp, MeTube's production server) under tini; no development server
1.6 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/metube-reads/reads-2026.09.29.txt — every setting the app reads is listed (Config._DEFAULTS); none is a key, a secret or a password (MeTube has no login); the template sets DOWNLOAD_DIR, STATE_DIR, PUID/PGID, MAX_CONCURRENT_DOWNLOADS=2, ALLOW_PRIVATE_ADDRESSES=false
1.7 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/metube-reads/reads-2026.09.29.txt — the entrypoint chowns the download and state folders to PUID:PGID, upgrades yt-dlp ONLY when YTDL_NIGHTLY_UPDATE_TIME is set (off), starts bgutil-pot and runs the app supervised; nothing else to decide
1.8 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/metube-fresh.txt — an unknown page answers 404 with no trace; LOGLEVEL INFO by default
1.9 | n/a | MeTube has no secret at all, so nothing can lock the household out
2.1 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/volume-persistence-after-R801.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/B/catalog-gates-metube.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/life.txt — CLEAN once the gate really exercised MeTube (a POST /add, APP_EXERCISE; before the R-801 port fix the gate sent no request at all and answered UNDETERMINED, felhom.eu/documentation/audits/family-gate-2026-10-02/B/catalog-gates-metube-run2.txt); also the history in /state read back after a recreate and after remove + restore
2.2 | done | app-catalog-felhom.eu/templates/metube/docker-compose.yml — the downloads in ${USERDATA_PATH}/media/metube (the household sees them in the file browser and the media player); the queue and history in the named volume metube_state (NVMe)
2.3 | done | app-catalog-felhom.eu/templates/metube/.felhom.yml — the downloads are class optional (they can be downloaded again; large); tier 1 holds metube_state
2.4 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/metube-fresh.txt — the downloaded file is 1000:1000 0644 on the household's drive (PUID/PGID 1000)
2.5 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/life.txt — the night chain's backup, remove keeping data, the household's restore button (38.5 s), the history and the file read back by a family member; the family-gate file and the stranger's refusal come back after the restore
2.6 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/life.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/final.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/B4/metube-demo.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/B4/teardown.txt — "remove, keep data" (9202): the app, its volume and gate file go, the drive data stays and the restore uses it; "remove with data" on 9202 is refused (R-442, no host agent — fail-closed); on demo-hp (live catalog) it removed the app, its volume, its appdata and its backups, and KEPT the downloaded video in the household's userdata folder — the box treats userdata as the household's files and the dialog does not say so (R-800)
2.7 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/metube-fresh.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/C-metube-bench/move/evidence/MV-metube/burst-metube.log — 12 KB of state + the files; the downloads ARE the size (563 MB for 96 short test clips on the bench); a household's videos are optional in the backup for that reason
2.8 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/metube-fresh.txt — the downloaded file opens again through the front door: GET /download/<file> 200 through traefik behind the family gate (a never-downloaded name 404)
3.1 | done | app-catalog-felhom.eu/FIRST-ADMIN.md ; felhom.eu/documentation/audits/family-gate-2026-10-02/A/items.txt — class 5: no accounts at all; the family gate is the only door, and only family members pass it
3.2 | n/a | no login of its own, so no default login exists
3.3 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/metube-fresh.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/poll-metube.txt — no first-run screen; the family gate's file is written BEFORE the first start: a stranger's 63 polls (GET / and POST /add, 1/s from the press) answered 404 (no router yet) then 401 (the gate) — never the app
3.4 | n/a | MeTube has no sign-up and no accounts to sign up for
3.5 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/poll-metube.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/metube-fresh.txt — from the install press: never a 200 for a stranger (404 → 401)
3.6 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/A/items.txt — MeTube has no lock of its own; the family sign-in locks per visitor (5 a minute) and per name (10 in 10 minutes): a stranger's 7 wrong tries locked only the stranger, the family member signed in at once from elsewhere
3.7 | done | app-catalog-felhom.eu/templates/metube/.felhom.yml ; felhom.eu/documentation/audits/family-gate-2026-10-02/A/setup.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/A/items.txt — add_people: the Család card (add: the password shown once; reset and remove end access at the next request, measured)
3.8 | n/a | no after_install or after_setup command in the template
3.9 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/A/items.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/shots/familylogin-video.png — the family sign-in through traefik over https, LAN and the simulated tunnel; in a real browser (headless Chrome) the app's address leads to the sign-in page; the websocket passes the gate (101) for a member ; felhom.eu/documentation/audits/family-gate-2026-10-02/B4/member-internet.txt — and through the REAL internet on demo-hp: a member's browser → the family sign-in → MeTube; the dashboard stays shut to the member; logout ends access; a stranger 401
3.10 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/A/items.txt — MeTube reads no visitor address; the gate does, from the right (R-753): a stranger's guesses through the simulated tunnel locked only that visitor
4.1 | done | app-catalog-felhom.eu/templates/metube/docker-compose.yml ; felhom.eu/documentation/audits/family-gate-2026-10-02/C-metube-bench/birth/evidence/BIRTH/birth.log — curl is in the image (its own upstream healthcheck uses it); dials 127.0.0.1:8081; healthy on the first probe
4.2 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/C-metube-bench/C3-catalog-gates-metube.txt — probe-matches-compose OK
4.3 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/metube-fresh.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/C-metube-bench/birth/evidence/BIRTH/birth.log — box: healthy 50 s after the press, 0 restarts; bench: 31.2 s
4.4 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/metube-fresh.txt — metube stopped: the state read "stopped" within 10 s; a member at / 404 (no router — never the app ungated); running again 10 s after start
4.5 | done | app-catalog-felhom.eu/templates/metube/docker-compose.yml — container_name metube = the stack; no sidecars
5.1 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/C-metube-bench/birth/mem-summary.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/C-metube-bench/birth/mem-birth.csv — swap 0, from birth: 58.8 MiB anon = 7.7 % of 768M; 0 kills, 0 restarts
5.2 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/C-metube-bench/move/mem-summary.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/C-metube-bench/move/evidence/MV-metube/burst-metube.log — 605 s soak + 12 rounds of 8 downloads at once (96 adds, 563 MB): peak anon 270.2 MiB = 35.2 % of 768M; 0 kills, 0 restarts (memory.current touched the limit with page cache, judged on anon — `09` decision 22)
5.3 | done | app-catalog-felhom.eu/templates/metube/.felhom.yml — mem_limit 768M = the compose limit, the header says the same
5.4 | n/a | MeTube is a Python app, no self-sizing heap
5.5 | done | app-catalog-felhom.eu/templates/metube/.felhom.yml ; felhom.eu/documentation/audits/family-gate-2026-10-02/C-metube-bench/C1-previous-tag.txt — pi_compatible true (amd64 + arm64)
6.1 | done | app-catalog-felhom.eu/scripts/upgrade_fixtures_box.py — MeTube: POST /add a 1 MB public test video, the history and GET /download read back; a never-downloaded name must answer 404
6.2 | done | app-catalog-felhom.eu/templates/metube/.felhom.yml ; felhom.eu/documentation/audits/family-gate-2026-10-02/C-metube-bench/move/evidence/MV-metube/verdict.json ; felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/box-verdict-metube.json — the ladder step 2026.09.28 -> 2026.09.29, proven on both venues, written by --write-ladder
6.3 | done | felhom.eu/documentation/audits/new-apps-2026-10-01/undo/box/radicale/step.txt — the box's own undo, proven on a real failed step (Radicale, 2026-10-01); MeTube's step ran the same guarded Update (backing-up, verifying, done)
6.4 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/C-metube-bench/move/evidence/MV-metube/verdict.json — files_changed empty, no mark
6.5 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/C-metube-bench/C1b-tag-shape.txt — dated tags; the shape changed once (YYYY-MM-DD until 2025-07-30, YYYY.MM.DD since); whether upstream re-pushes a tag was not measured
7.1 | n/a | MeTube sends no mail and has no mail settings
8.1 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/catalog-gates-metube.txt — copy-i18n OK (the freeze admits metube; English for every string)
8.2 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/A/setup.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/A/items.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/metube-fresh.txt — the first steps hold on 9202: members added on the Család card, video.DOMAIN asks for the family name, a pasted link downloads to the drive
8.3 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/assets.txt — logo (from the image) and three screenshots answer 200 on felhom.eu
8.4 | done | app-catalog-felhom.eu/README.md ; app-catalog-felhom.eu/FIRST-ADMIN.md ; app-catalog-felhom.eu/templates/metube/.felhom.yml — README app table + FIRST-ADMIN row (class 5); category media; catalog_since 2026-10-02
8.5 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/assets.txt — the website's app count read against the templates; it holds
9.1 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/catalog-gates-metube.txt — catalog_gates.py metube exit 0 on the bench, every gate OK incl. volume-persistence (after R-801) and family-gate against golden 0.287.0
9.2 | done | felhom.eu/documentation/audits/family-gate-2026-10-02/B/box/metube-fresh.txt ; felhom.eu/documentation/audits/family-gate-2026-10-02/A/items.txt — a fresh install on 9202 from the drill catalog behind the family gate, as the household, as family members and as a stranger
9.3 | done | felhom.eu/documentation/backlog/OPEN-ITEMS.md — every finding is a register row (R-767 closed by the family gate; R-788 and R-801, the volume-persistence gate)
9.4 | done | app-catalog-felhom.eu/onboarding/metube.md — published in one commit with this record (the onboarding gate)