--
Server total from host counters; bucket totals start from accounting deployment.
Operational buckets
--
Waiting for disk metrics
Hard cancel active work or turn off the VM
Stops active workers, health checks, probes, player streams, and fallback worker processes before restart or shutdown actions.
0 open
Operational state
Loading documentation
Reading the active V6 system map from the installed docs file.
Live state snapshot
Completion
V5 queue and resolver flow, adapted for V6 variant cataloging. The worker searches, probes, recovers, verifies, records metadata, then removes temporary media.
Provider Conveyor
Shared provider lanes across season and movie completion workers. Up to four providers pull FIFO lookup work while each provider stays one-at-a-time.
Provider Lanes
Slot file: --
Dialogue Check API
Real outbound subtitle-provider requests from dialogue verification. Cooldowns and local subtitle-cache hits are not counted as API requests.
Breakdown
Last 24 hours
Request History
Waiting for telemetry.
Season Worker
Season packs resolve through the V5 flow, then the best 720p, 1080p, and 4K variants are probed, verified, cataloged, and cleaned up.
Worker Slots
Sibling workers share the queue and rotate VPN lanes 1, 2, and 3.
Flow Log
Search, AI checks, torrent probing, recovery, dialogue, and cleanup.
No log output yet.
Queued Targets
Next 0 claimable targets · 0 deferred later.
Complete-series rows outrank regular queue items; fewer seasons left means a higher score. Due retries age with queued rows, and only one season per show runs at once.
Recent Verified Catalog
Fresh successes written to DB Library, independent from noisy worker progress.
Worker History
Recent completed, failed, cancelled, or deferred worker runs.
Movie Worker
Movie completion uses the same variant catalog contract, with temporary recovery only long enough to verify and record the best magnets.
Worker Slots
Sibling workers share the queue and rotate VPN lanes 1, 2, and 3.
Flow Log
Search, AI checks, torrent probing, recovery, dialogue, and cleanup.
No log output yet.
Queued Movies
Next 0 claimable movies · 0 deferred later.
Recent Verified Catalog
Fresh movie successes written to DB Library.
Worker History
Recent completed, failed, or cancelled movie runs.
Special Request Worker
Idle dispatcher for movie or series requests. It keeps a dedicated retry ledger and only stops a request after discovered options are exhausted.
Add Request
Search local title catalog.
Worker Slot
Single always-waiting dispatcher slot for future special requests.
Flow Log
Waiting for the first special request.
No special request work yet.
Queued Requests
Next 0 claimable requests - 0 deferred later.
Retry Ledger
Recent dispatch attempts, transient deferrals, and final exhaustion decisions.
Failure Code Definitions
History pills stay short on purpose. Use this reference to translate each code into the likely cause and next action.
Completion Worker Rules
This reference documents what every live panel on the Completion page means and the rules the worker follows before a season or movie is allowed into the catalog.
Queued rows become claimable when not deferred and not blocked by another active season for the same show.
Provider conveyor lanes collect candidates while each provider stays one-at-a-time.
Magnets are ranked, metadata is fetched, files are selected, and qBittorrent/libtorrent readiness is checked.
Episode coverage, dialogue, subtitles, and boundary cases must match the canonical target.
Verified media is segmented, cataloged, backed up, and tied to variant metadata.
Temporary downloads and worker ownership are removed unless the run is intentionally deferred.
How To Read This Page
- The Provider Conveyor shows shared lookup pressure across season and movie workers: active lanes, waiting lanes, queued tasks, the active owner, and waiting owners.
- The Dialogue Check API card counts outbound subtitle-provider requests only; cache hits and cooldown waits are intentionally excluded.
- Season Worker and Movie Worker cards show controls, slot state, flow logs, queued targets, recent verified catalog writes, and worker history.
- Failure Code Definitions translates compact history pills into likely cause and next action.
Read more
Worker Slots are live sibling processes. Each slot reports its lane, stage, actual status, active target, PID, progress, working bucket, and bucket outcomes. The Flow Log is the detailed resolver trace for the selected slot. Queued Targets and Queued Movies are split into claimable rows and deferred-later rows so due work does not get hidden behind future retries.
Queue And Control Rules
- Preview Only runs the materialization path without enqueueing rows, so target args can be checked before work is committed.
- Queue Target(s) and Queue Movie(s) materialize the target args into queue rows.
- On starts the worker; Clean Stop asks active work to finish its safe stop path; Hard Cancel is reserved for forcing active work down.
- Sibling workers share one queue and rotate across VPN lanes 1, 2, and 3.
Read more
Season queue ordering gives complete-series work priority over ordinary rows, then favors shows with fewer seasons left. Due retries age with normal queued work. The worker avoids running more than one season from the same show at the same time, which keeps cross-season qBittorrent ownership and catalog writes from colliding.
Provider Search Rules
- The provider conveyor is shared by season and movie completion so multiple workers do not hammer the same provider independently.
- Provider lanes pull FIFO lookup tasks, but each provider stays serialized to avoid self-inflicted blocks.
- Search retries compare structured row counts and keep the strongest parse result before candidates are ranked.
- Provider lockouts, challenge pages, low-row parses, and transient fetch errors are surfaced as search or provider failure codes.
Read more
Search jobs can come from multiple source profiles. The worker records provider key, lane id, queued task count, active owner, waiting owners, heartbeat time, and parse quality so the page can distinguish a genuinely quiet provider from a busy conveyor or a blocked fetch path.
Season Pack Mapping Rules
- Filename parsing keeps release numbering as conveyor_release_episode_numbers and stores canonical catalog coverage as conveyor_episode_numbers.
- The combined episode coverage overlay lets one release file cover multiple IMDb catalog episodes without editing the IMDb catalog.
- Split-part titles are grouped only by normalized base title equality, never substring-only matching.
- Titleless ordinal alignment is allowed only when selected files are monotonic, target-season safe, start at the expected beginning, and match the catalog release-unit count.
Read more
A combined file such as an Office finale can display once while covering both catalog episodes. The visible app row uses the first catalog episode number, later covered catalog rows are hidden from the normal list, and direct playback or download requests for any covered episode resolve to the same source asset.
Acceptance Rules
- Season completion accepts a pack only when every expected canonical catalog episode is covered by selected-file metadata.
- Literal filename episode numbers are evidence, not the final truth, because coverage can be remapped by title-safe split-part units.
- Partial-season sources do not get unsafe ordinal fallback; missing explicit episode evidence stays missing.
- Movies must still resolve one verified movie asset and do not use episode coverage mapping.
Read more
For seasons, the gate reads conveyor_episode_numbers after mapping. That means a 2-in-1 source covering E26-E27 counts as both E26 and E27 present, while a pack that never safely covers the finale remains rejected even if its release numbering looks close.
Torrent And Download Rules
- Selected files are prioritized while unrelated torrent files stay deprioritized.
- A rolling priority window advances as selected files prove readiness.
- qBittorrent-owned files must show meaningful progress and pass ffprobe/container readiness before processing.
- Late stalls after useful progress can defer the run for retry instead of poisoning the candidate permanently.
Read more
The worker tracks first-byte timeout, selected-file progress, front-buffer readiness, no-growth windows, sparse/preallocated file parseability, qBittorrent API reachability, and lane/network mode. Recovery actions can reapply priorities, reannounce, recheck, rotate lanes, or defer when the evidence says the source is likely recoverable later.
Dialogue And Subtitle Rules
- Dialogue verification runs before segment packaging unless explicitly skipped by worker args.
- Subtitle-provider requests, rate limits, cache hits, and provider failures feed the Dialogue Check API telemetry and failure codes.
- Boundary checks verify the first and last required source units so wrong seasons and wrong finales are caught early.
- Combined sources are checked once per source asset; the requested boundary IMDb id is tried first, then other covered IMDb ids may be used as fallback.
Read more
When subtitle embedding is active, packaging requires a dialogue summary. Provider outages can mark the run deferred with a retry time instead of failed. The persisted dialogue result records which IMDb id matched, which matters for combined episode files that legitimately cover more than one catalog row.
Packaging And Catalog Rules
- Verified media is segmented into package sets and written with catalog metadata for the chosen variant bucket.
- A combined source creates one package asset, not duplicate uploads for each covered catalog episode.
- Coverage rows let health and mobile playback treat one package set as available for every covered episode number.
- Recent Verified Catalog shows successful DB Library writes, separate from noisy worker-progress rows.
Read more
The catalog keeps IMDb rows unchanged. Coverage metadata lives on top of package and selected-file records, so the app can show a clean E26-E27 row while old direct episode requests still resolve. Finalization state is preserved across route changes and clean stops; temporary downloads are cleaned only after cataloging or safe failure handling.
Failure, Retry, And Health Rules
- Failure pills are compact labels; the definitions panel gives meaning and next action for each code.
- Terminal failures mean the current contender cannot be accepted; deferred failures mean the system intentionally waits for a safer retry window.
- Season health counts a mapped package set as healthy for every episode in its coverage rows.
- Worker History includes completed, failed, cancelled, and deferred runs so retry behavior can be audited after the live slot moves on.
Read more
Use the Flow Log when all contenders look bad: it shows whether denial came from search quality, missing episode coverage, qBittorrent readiness, dialogue mismatch, subtitle-provider deferral, packaging failure, finalization, admin cancel, or health verification. That distinction matters because only some failures should be retried immediately.
Repair Work
FIFO repair queue for confirmed health issues. Slow-probe repairs replace only the affected resolution bucket, avoid the old magnet/infohash, and defer unresolved work for seven days.
Worker Slots
Default one enabled slot. Extra siblings can be enabled; claimed jobs alternate over VPN lanes 4 and 5.
Flow Log
Waiting for repair work.
No repair work yet.
Repair Queue
Next 0 claimable repairs - 0 deferred later.
Repair History
Recent verified replacements, deferrals, failures, and cancel decisions.
How Repair Work decides what is safe to replace
Repair Work is the controlled replacement path for catalog variants that Health has already proven unsafe, slow, incomplete, or no longer streamable. It repairs the exact damaged bucket, keeps unrelated catalog rows intact, and now compares the replacement against the old variant before final acceptance.
Confirmed slow, failed, or damaged health evidence creates a deduped repair queue row with the old identity attached.
The worker claims FIFO work and pins child completion to the assigned repair VPN lane.
Only the affected 720p, 1080p, or 2160p bucket is rebuilt; the old magnet and infohash are blocked.
The replacement must appear in DB Library with matching kind, title, season, bucket, and a changed torrent identity.
The same streamability probe measures the old and new variants before the queue row can be marked done.
Better replacements are finalized; weak, inconclusive, or missing comparisons are deferred instead of silently taking over.
What It Repairs
- Slow-probe variants where Health measured sustained speed below the required bucket threshold.
- Movie variants and single season variants with enough identity data to find the exact catalog target.
- Only the damaged resolution bucket; healthy buckets on the same title remain untouched.
- Rows that can be safely retried later when providers, seeds, or lane conditions improve.
Read more
Repair is not a general completion backlog. Health has to provide the reason, the target kind, IMDb or TVDB identity, the bucket, and old torrent evidence such as magnet URI, infohash, selected files, or runtime probe details. That keeps the repair queue narrow and auditable.
Queue And VPN Lane Ownership
- Claimable rows are processed FIFO while deferred rows wait until their next-at time.
- Repair workers use VPN lanes 4-5 only; normal completion and artwork stay on lanes 1-3.
- The default slot is always available, and sibling slots can be enabled for parallel repair work.
- Each claimed repair pins its child movie or season completion process to the assigned repair lane.
Read more
Lane assignment alternates across lanes 4 and 5 so repair qBittorrent work does not collide with health probes on lanes 6-9 or the user/config-prober streamer on lane 10. The queue row records slot, process, stage, attempts, and heartbeat data so Clean Stop and Hard Cancel have visible state.
Replacement Search Rules
- The old magnet and infohash are passed as avoid-candidates so the worker cannot pick the same bad source again.
- The child completion worker runs in repair mode with the target bucket forced by replace-bucket.
- Season repairs target the affected season and preserve the rest of the show catalog.
- Movie repairs use the same quality, subtitle, dialogue, packaging, and DB Library checks as normal movie completion.
Read more
The child worker is expected to finish as a normal terminal completion run. Repair then reopens the catalog snapshot and confirms that the expected bucket exists, maps to the same title or season, and no longer points at the old identity before any success is considered.
Old-vs-Replacement Streamability
- After replacement verification, the row enters comparing_streamability and comparison_status becomes running.
- The old and replacement variants are measured with the same health streamability probe path.
- The default comparison window is 900 seconds, with warmup and metadata timeouts kept separate.
- A replacement must be healthy and materially better, or healthy while the old variant is slow, failed, or inconclusive.
Read more
The comparison writes compact old and replacement probe summaries into comparison_result_json. A healthy old variant can block acceptance if the replacement does not beat it by the configured margin, which prevents repair from swapping a known source for an equal or weaker one.
Finalization, Deferral, And History
- Accepted replacements move to done and appear in Repair History as verified replacement decisions.
- Rejected comparisons are deferred with the comparison reason preserved for later review.
- Missing catalog evidence, unchanged torrent identity, failed children, and weak probes are recorded as terminal or deferred outcomes.
- Deferred slow-probe repair defaults to a seven-day wait so repeated bad searches do not churn the system.
Read more
The history list is the audit trail: status, stage, attempts, old infohash, replacement identity, and comparison details explain why a row finished or waited. A deferred row is not ignored; it is deliberately parked until the next safe retry window.
Operator Controls And Signals
- On starts the supervised repair worker; Clean Stop lets the current child finish or exit cleanly.
- Sibling adds parallel slots, while the slot cards show process state, lane, stage, heartbeat, and current item.
- Clear Queue removes waiting work; Hard Cancel is for stopping active repair work immediately.
- The Flow Log follows the selected slot and is the fastest place to inspect search, child completion, and comparison progress.
Read more
Use Hard Cancel when a repair child is stuck at the process level. Use Clean Stop when the worker is behaving but you want it to drain safely. If a row looks stuck after child completion, check for comparing_streamability, comparison_status, and comparison_result_json in the history entry before retrying.
Networking
Live VPN lane roles, active leases, qB ownership, and libtorrent daemon workload.
The service polls user activity every 1 second. Testing starts only after no active playback, player presence, foreground app presence, or recent authenticated app activity for 300 continuous seconds.
Any active playback or fresh app/player presence cancels testing, kills active probe children, applies the best unused lane-10 config, and starts the lane-10 streamer.
It selects 3 fixtures once per local day from health/catalog rows declared healthy in the last 24h. Pinned magnets only fill gaps.
The daily set is a stable weighted sample for that local day, biased by recent speed, seeders, and peers so the same 3 are reused fairly across all configs.
For each lane-10 config, it stops the user-lane streamer, preserves port-forward data, writes the config, prepares v6lane10, then starts 3 parallel torrent probes.
Each probe prioritizes the selected file front and must reach 16 MiB of contiguous verified bytes from offset 0. Timeout is 240 seconds per config.
Probe/user lane settings are min_start_buffer_mib 16, max_startup_buffer_mib 192, urgent_window_mib 192, and lookahead_mib 8192.
A config is top-eligible only if all 3 torrents succeed against today's fixtures. Ranking is lowest worst time, then lowest mean time, then highest throughput.
At local midnight the new day starts by retesting yesterday's top 10 first. Old rows stay historical until those configs prove themselves again against today's fixtures.
After a successful sample, qB lanes 1-5 and health lanes 6-9 outside the top set are blocked from new work, drained cleanly, switched to unused top configs, verified, then unblocked.
Swarm FIFO
Continuous metadata, identity, seeds, peers, and availability checks.
Speed Probe FIFO
Continuous stream-speed checks on dedicated health lanes 6-9.
Magnet Inventory
All saved health rows. Use this for inspection; queues and histories above are the operational view.
Diagnostics Worker DB, flags, lanes, schedule normalization, and raw log.
No log output yet.
Health Worker Execution Manual
This is the detailed operating reference for the Health system: how rows enter the queues, how workers claim them, how lanes are leased, how checks are judged, and exactly what each state means.
Architecture: one inventory, two FIFOs, separate responsibilities
The worker maintains a local health inventory in variant_health. Each saved completion variant can be checked by the Swarm FIFO worker and the Speed Probe FIFO worker independently, which lets cheap metadata checks keep running without blocking expensive stream probes.
Health starts by syncing completion catalog variants into variant_health. The row stores title, target IDs, infohash, selected files, saved swarm numbers, resolution bucket, latest state, claim tokens, probe due time, and check counters.
The swarm path checks torrent identity and swarm viability: metadata, selected-file match, seeders, peers, availability, distributed copies, and whether the saved magnet still represents the expected media.
The probe path checks whether a variant can actually stream fast enough for its resolution bucket. It warms up, measures throughput, computes average speed over the probe, and compares that average against the required Mbps gate.
Each finished check writes a check_runs row with check type, result state, lane summary, previous values, current values, speed statistics, VPN origin, errors, and any requeue result.
Execution lifecycle: the exact loop every worker follows
Worker wakes on its loop interval, a manual Wake FIFO action, or a start/restart. The default loop interval is 300 seconds and a full pass is normalized around 24 hours.
The catalog is mirrored into variant_health so the worker has local rows to claim and can preserve health data even while the completion catalog changes.
Swarm claims use swarm claim fields; probe claims use probe claim fields. FIFO ordering prefers never-checked rows first, then the oldest checked rows, while probe rows also respect next-due timing.
The worker asks the lane manager for a lane lease owned by completion-health-worker. If no lane is available, the row is unclaimed and the slot reports a waiting state.
The worker runs the qB/torrent probe subprocess for either swarm or speed_probe, updates the slot card while running, and classifies the observed result.
The worker updates variant_health, inserts check_runs, clears claim fields, updates the slot result, and releases the lane lease even on errors.
Swarm FIFO worker: identity, metadata, and swarm viability
Swarm checks are the cheap, continuous truth checks. They decide whether the magnet still has usable torrent metadata and whether the saved swarm is alive enough to keep the variant trusted.
The queue orders rows by never swarm-checked first, then oldest swarm_checked_at_utc. Each active slot owns one claim token until it finishes or returns the row to the queue.
The metadata wait has a 180 second timeout. After metadata is usable, the swarm is allowed to settle for 90 seconds before judging seeds, peers, availability, and distributed copies.
A clean dead result first becomes suspect_dead. The worker only treats it as confirmed dead when the prior state already supports that suspicion, reducing one-bad-lane false positives.
If a row was stale-dead but the swarm later appears alive with complete availability, the worker can repair the stale state back toward probe work instead of leaving the variant buried.
Speed Probe FIFO worker: stream-speed measurement rules
Probe checks answer one question: would playback stay ahead if someone pressed play? The primary judgement is buffer lead from contiguous selected-file bytes, not raw average Mbps. Mbps is still recorded as supporting telemetry and as a fallback if piece telemetry is unavailable.
| Bucket | Required fallback | Buffer-lead rule | Notes |
|---|---|---|---|
| 720p | 5.0 Mbps at 24 fps | Healthy at 180s lead; borderline at 60s lead. | Fallback bitrate converts contiguous bytes into playable seconds when duration is unknown. |
| 1080p | 10.0 Mbps at 24 fps | Healthy at 180s lead; borderline at 60s lead. | This is the normal default bucket when resolution is unknown. |
| 2160p | 35.0 Mbps at 24 fps | Healthy at 180s lead; borderline at 60s lead. | Also used for 4K and UHD labels. |
The normal probe warms up for 60 seconds, can extend warmup up to 90 seconds, then measures for 300 seconds. Slow reprobes use a longer 450 second measurement window.
buffer_lead_seconds >= 180 passes. If selected-file progress is already at least 98%, the probe can also be treated as ready because the file is effectively present.
buffer_lead_seconds >= 60 is borderline when the lead is not falling. This means playback has usable headroom, but not enough to be called healthy.
A slow result means contiguous playback lead is below 60 seconds, falling, or unavailable and the Mbps fallback also failed. Slow rows are scheduled for reprobe after 3600 seconds rather than being immediately discarded.
Slow quarantine requires confirmation from 2 distinct lanes. This prevents one bad VPN lane from deleting or replacing a variant by itself.
If verified resolution buckets are missing, the worker can nudge completion search after every 3 relevant checks so the catalog keeps trying to fill the missing bucket.
Lane leases, worker slots, and cancellation semantics
Health uses lane-manager leases with owner completion-health-worker. Swarm leases use task type health-swarm; speed probes use health-probe.
The probe policy is dedicated_lanes6_9_parallel_health. Lanes 6-9 run health swarm and speed checks through persistent libtorrent daemons with configurable parallel slots for both worker types.
Each slot card shows the claimed row, stage, lane, result state, speed, and message. A slot returning to idle means the claim was cleared and the lane lease was released.
Clean Stop asks the worker loop to stop after current work reaches a safe boundary. Running subprocesses are allowed to finish instead of being killed mid-check.
Hard Cancel is the emergency path. It marks the worker for cancellation and is expected to stop active work aggressively when the lane or subprocess is wedged.
The dashboard can add or remove sibling worker slots. Swarm and probe workers have independent slot counts and independent maximums, so one side can be scaled without changing the other.
Color-coded state legend
The row passed its current health requirement. For probes, the average speed met the bucket gate or the selected file was effectively complete.
A worker slot owns the row right now. The matching claim token should clear when the check persists its result.
The variant was not a clean healthy pass, but it showed enough near-required speed to stay visible as borderline instead of immediately slow/dead.
The swarm exists but its observed seed/peer/availability evidence is weak enough that operators should treat it as risky.
The measured average speed missed the required gate. The row is retained for reprobe and may later be quarantined only after distinct-lane confirmation.
The magnet appears unusable, mismatched, or no longer represents the saved media. Confirmed dead or changed rows can trigger catalog reset and requeue work.
The worker hit an exception or probe failure that prevented a clean classification. Previous usable health can be preserved for transient errors.
The row exists in inventory but has not yet completed the relevant swarm or probe check.
Persistence and history: what gets written where
| Store | Purpose | Important fields | How the dashboard uses it |
|---|---|---|---|
| variant_health | Current inventory row and queue state. | Health state, swarm state, probe state, claim tokens, next due time, speed stats, swarm stats, errors, check counts. | Inventory table, FIFO queue summaries, counts, filters, slow/borderline/dead totals. |
| check_runs | Append-only history of individual checks. | Check type, result state, previous JSON, current JSON, lane summary, VPN origin, required speed, measured speed, average speed, sample count. | Recent history panes, 24h check counts, average swarm/probe durations, debugging evidence. |
| worker slots | Live slot readout for active workers. | Slot index, state, label, resolution bucket, lane, stage, result, current speed, message. | Active slot cards for Swarm FIFO and Speed Probe FIFO. |
| worker flags | Control-plane state for start/stop behavior. | Worker PID, state, stop requested, hard cancel requested, permanent-off state. | Top status strip, On buttons, Clean Stop, Permanent Off, Hard Cancel. |
Transient error preservation is intentional. Prior useful states such as healthy, borderline_probe, slow_probe, and weak_swarm are not casually erased by a single temporary failure.
Operator interpretation: how to read the page while it is running
- Swarm FIFO state shows whether the metadata/swarm worker is running, stopped, starting, or cancelled.
- Speed Probe state shows whether stream-speed measurement is running separately from swarm checks.
- Swarm today and Probe today count completed checks in the last 24 hours, excluding quiet-lane waits.
- Avg swarm and Avg probe split the average check duration by check type so slow speed probes do not hide fast swarm checks.
- FIFO queue lists the rows that are actually waiting next, not a legacy schedule list.
- Recent history is the fastest place to verify whether a row was judged healthy, borderline, slow, dead, changed, or errored.
- Diagnostics exposes the raw worker DB path, flags, lanes, schedule normalization, stale-warning controls, and live worker log for deeper debugging.
System Readout
Health state, FIFO pressure, speed-probe quality, and today throughput without mixing controls into the readout.
Health Command
Waiting for live Health worker status.
Waiting 0 | today 0 | forecast --
Waiting 0 | today 0 | forecast --
No forecast data loaded.
No forecast data loaded.
Worker Controls
Swarm and speed probes stay separated so scaling, stopping, and emergency actions are easy to scan.
Swarm Worker
Metadata, identity, seed, peer, and availability checks.
Speed Probe Worker
Stream-speed checks, buffer lead, and slow-probe reprobes.
Live Work
Active slots, FIFO pressure, and recent outcomes are separated by worker type.
Swarm Active Slots
--Swarm FIFO Queue
--Swarm Recent History
--Speed Probe Active Slots
--Speed Probe FIFO Queue
--Speed Probe Recent History
--Health Inventory
Saved health rows with streamability, swarm state, lane outcome, quarantine, and requeue context.
Diagnostics
Worker DB, flags, lanes, schedule normalization, and raw log.
stopped
Diagnostics
Worker DB, flags, lanes, schedule normalization, and raw log.
No log output yet.
Reference Manual
Full Health Worker Execution Manual with architecture, lifecycle, queue rules, states, storage, and operator guidance.
reference
Reference Manual
Full Health Worker Execution Manual with architecture, lifecycle, queue rules, states, storage, and operator guidance.
Disk Management
Passive dry-run pressure monitor for V6 completion downloads. It records what the future controller would pause or allow, but enforcement is off.
Waiting for storage snapshot.
Dry-Run Decisions
Items are sorted like the eventual controller: real completion work before probes, then smallest remaining payload first.
Would Continue
No active decisions yet.
Would Pause
No pauses recommended.
Lane Readout
Recent Snapshots
Cleanup Worker
Queue-less janitor for disposable completion artifacts across the bulk roots and worker-run state roots.
Live Log
Sweep loop, live reference collection, and deletion decisions.
No log output yet.
Scope
Loading the disposable cleanup roots.
Recent Deletions
Last deleted items across recent sweeps.
Catalog Interpretation Rules
Rules that explain how raw title metadata is interpreted before the app, dailies, completion queue, and DB Library decide what is visible or complete.
Protection Layers
What the system does before, during, and after database mutations.
Semantic Metrics
Domain checks that catch structurally valid but logically broken data.
IMDb Dataset Updates
Daily 10:00 dataset ingestion into the title catalog used by completion workers, dailies, TV search, and mobile APIs.
Recent Guardian Events
Snapshot, prune, write-gate, verification, and restore decisions.
Users & Tokens
Household access tokens, viewing profiles, and root-backed player cache ownership.
Generate Token
Create a reusable 6-digit household access token.
Household Tokens
Reusable household access tokens and their claim state.
Households & Profiles
Profiles own watch history, active streams, prefetched files, cached movies, and cleanup timing.
Live Activity
Watching and prefetch slots currently attached to the shared player streamer.
| User | Slot | Title | State | Swarm | Speed | Lane | Cache |
|---|---|---|---|---|---|---|---|
| No live streams. | |||||||
User Activity
Live and historical mobile playback, downloads, prefetches, successes, failures, cancellations, and cleanup outcomes.
Filters
Last 24 hours | exact events plus inferred legacy history.
Live Now
Current watching, downloading, prefetching, and app/player presence by user.
| User | Type | Title | State | Progress | Speed | Swarm | Updated |
|---|---|---|---|---|---|---|---|
| No live user activity. | |||||||
Recent Timeline
Exact activity events recorded after this dashboard update.
Inferred History
Best-effort rows from older stream, progress, and scope tables.
Live App Viewport
Only titles currently visible in an open Android app appear here, plus explicitly labeled startup and Continue Watching session scope. Reports update in place.
How User Scope Works
This is the operating contract for User / Global Scope. The system keeps likely playback torrents peer-hot for the active Android user without intentionally downloading media bytes before Play. It is not the old global pin panel, not a byte prebuffer scheduler, and not a root-pressure control surface.
Scope Inputs
startup_predictionstarts when the app foregrounds. The server predicts the first four non-empty App Layout rows before Android finishes rendering.- Actual viewport scope comes from
POST /api/mobile/user-scope/visible-tilesafter Compose measures visible tiles. - Continue Watching session scope includes the 5 most recent Continue Watching items while the app is open, plus any Continue Watching tiles currently visible in the viewport.
- Search scope is reported by the search screen and behaves like regular scope unless an explicit episode is supplied.
inactivescope means the app closed, backgrounded, settings opened, or the session is otherwise no longer browsing. It clears scope immediately.
App Layout Rules
- Prediction never invents row order. It reads the same generated
daily_picks.positionrows used by Android home. - Dashboard App Layout row order, enabled state, row type, category CSV order,
sort_mode, tile size, and tile ratio all affect what can be predicted. - Row save, delete, reorder, category import, and category delete invalidate today's generated picks so the next home load and app-open prediction use the current layout.
- Regular rows predict only leading likely-visible tiles using Android tile math. Continue Watching predicts the 5 most recent session items.
Episodes And Identity
- Regular show tiles are separate from Continue Watching tiles even when both share the same IMDb id.
- Regular series scope resolves to the first regular episode, usually
S01E01. - Continue Watching scope resolves to the resume season and episode from user progress or the tile payload.
- Cleanup follows the resolved source fingerprint, not IMDb id alone, so two rows for the same show can keep different episodes hot.
Peer-Hot Meaning
- Peer-hot means metadata, peers, seeds, and selected file information are actively discovered and maintained in the shared lane-10 torrent daemon.
- User Scope aliases run with
metadata_only=true,peer_hot=true, andprebuffer_only=false. - User Scope must not intentionally download playable title media bytes before Play. Artwork now loads lazily from Android image requests, and proactive detail asset pre-send is disabled.
- When Play matches a peer-hot warmup, the alias is promoted to the user's watching slot and normal playback startup begins downloading then.
Status Labels
discoveringmeans queued or resolving; metadata and peers are not ready enough yet.metadata readymeans torrent metadata and file selection are known, but the alias has not proven a peer-hot runtime state.peer hotmeans metadata-only peer discovery is alive and maintaining swarm information.activatedmeans a matching warmup is attached to a real active player stream and the Android app has sent freshplayer_active=truepresence. It should not appear for idle browsing.failedmeans the warmup hit a terminal error and will not be used for handoff.
Correction And Cleanup
- Startup-predicted regular/banner entries get a 5 second grace window.
- The first real viewport report confirms matching entries, adds true visible tiles, and keeps unexpired predictions only until their grace expires.
- After grace, predicted-only entries detach and unused peer-hot aliases stop unless another user still references the source or it became an active player stream.
- Inactive reports clear viewport, prediction, and Continue Watching session scope immediately.
- Removed legacy behavior stays removed: no old settings forms, no global pinned sections, no byte prebuffer counters, no root-pressure panels, and no background maintenance controls.
Dailies
Daily home rows picked from verified DB Library titles for the Android app.
App Layout
Configure Android home rows, category feeds, and layout controls independently from today's generated dailies list.
Editable Rows
Tile rows drive generated Android home rows. Banner rows drive the featured slideshow. Continue Watching rows are personalized per account and only appear in Android after watch history exists.
Category Imports
Upload CSV files to create category pools. Dailies only choose from categories that are selected on active App Layout rows.
category_name and parent_imdb_id. Aliases also work: category_title, category, or name; and imdb_id or parent_id.
One title per row. Parent IDs must be IMDb title IDs like tt0068646. Optional columns: position, title_hint, and notes.
Example: category_name,parent_imdb_id,position,title_hint then Crime Favorites,tt0068646,1,The Godfather.
Large files are fine: the browser uploads the file directly and the server parses the cached CSV.
TV-App Layout
Configure independent Samsung TV home rows. Poster rows and banner slideshows use CSV categories; Continue Watching is personalized per account.
Artwork / Images
Stored server cache for trailer files, transparent logos, posters, banners, and Android episode stills. Downloads use the original cached files.
24/7 cache completion for verified DB Library titles over VPN lanes 1, 2, and 3.
Live Queue
Recent Failures
Worker log
No log output yet.
Trailers
Cached trailer videos used by the Android detail hero.
Logos
Stored transparent logo assets from the persistent artwork cache.
Images / Posters / Banners
Stored posters, banners, continue banners, and episode stills.
Artwork Gathering Mechanics
Everything on this page is built from verified DB Library titles, persistent server cache rows, and a worker that fills missing artwork without making the Android app wait on expensive searches.
Fetch poster, portrait banner slots, and the default banner before any logo work so Android rows have a visual fallback.
Resolve transparent title logos, normalize them to 192px height, OCR-gate them, then mirror the same clean source into full and small logo rows.
For complete series, cache stills only for concrete IMDb episode IDs and official episode numbers that belong to visible seasons.
Create 16:9 continue-watching banners from textless still frames so resume rows never depend on portrait artwork.
Download trailer media after non-trailer artwork so heavy video work does not starve posters, banners, logos, or stills.
Who Gets Work
- Only verified DB Library titles enter the artwork queue; unavailable, dead, incomplete, failed-check, and rejected targets are ignored.
- Each sweep builds title tasks from missing or stale cache rows and respects the fixed phase order:
banners → logo → episodes → continue → trailer. - Recent hard failures stay under a retry guard, while transient VPN, DNS, rate-limit, and database-lock failures defer instead of poisoning the title.
Lanes And Throttle Rules
- Artwork image and Google/TMDB logo searches run through VPN namespaces
v6lane1,v6lane2, andv6lane3. - Non-trailer artwork is capped at 15 title starts per hour by default; trailer downloads are capped separately at 4 per hour with spacing.
- Trailers use direct host egress by design, while image lookups keep the rotating VPN policy and record dashboard egress telemetry.
Posters, Hero Slots, Continue Frames
- Posters come from upstream image resolution and are optimized to WebP under the shared artwork cache format.
- Banner and continue candidates must be still-frame artwork, match the required aspect profile, and pass text/letterbox rejection before storage.
- The first accepted portrait banner is mirrored into the generic banner row; all title banner slots keep their own slot files and metadata.
Transparent Logo Safety
- Logo search tries TMDB logo pages first, then Google Images through the interactive, headless, and HTML fallback paths.
- Every PNG is normalized, cropped to visible alpha, resized to
LOGO_NORMALIZED_HEIGHT, and rejected if it is black-only. - Tesseract OCR runs on light and dark composites; readable words outside the target title reject that candidate and the worker retries the next URL.
- The logo-specific format
logo-ocr-h192-v4intentionally makes old logo rows stale after logo size or OCR policy changes.
Storage And Invalidation
- Persistent files live under
/var/lib/v6-server/artwork-cache/persistent/{imdb}/; trailer files live under the bulk media root. - Rows are keyed by service date, IMDb ID, and image kind; ready rows must have a matching file, content type, and current format version.
- Android cache keys are versioned separately, so
full-logo-h192-ocr-v4andsmall-logo-h192-ocr-v4force phones to refetch corrected logos. - Pruning preserves the active row, honors the cache budget, and keeps downloads pointed at original cached files rather than resized previews.
Lazy Fetch Contract
- The phone receives artwork URLs and stable cache keys; it does not own source search, logo OCR, banner filtering, or trailer acquisition.
- Mobile endpoints lazily fetch missing or stale rows through the same cache functions as the worker, so manual browsing and app requests obey the same policy.
- Search, detail, daily home, continue watching, and user-scope targets all point back to these server cache rows instead of duplicating artwork logic.
Series Still Selection
- Episode stills are fetched only for series with complete, concrete season metadata and valid
ttepisode IDs. - Placeholder future episodes and unofficial season shells are skipped so artwork work does not imply a playable or visible episode.
- Stored episode art is cropped to 16:9 WebP for Android rows and counted separately in the Images summary.
Buttons And Recovery
Startkeeps the background worker alive;Sweep Nowasks the running worker to rescan immediately.Clean Stoplets in-flight work wind down;Hard Cancelterminates now and marks running tasks interrupted.Wipe Logo PNG Cacheclears logo rows only;Wipe All Artwork Cacheclears image rows and files so the worker rebuilds from policy.
The Peaky Blinders Rule
- Logo sources can return sequel, spin-off, episode, or subtitle logos that still share title tokens with the real show.
- OCR rejects extra readable text such as
Immortal Manfor aPeaky Blinderstarget, then retries another candidate instead of storing a mismatch. - Blank OCR is treated as inconclusive rather than bad, because stylized transparent logos sometimes defeat OCR even when the source is correct.
DB Library
Failure Mailbox
Completion-worker triage for search, LM, magnet, dialogue, torrent, packaging, legacy finalization, and runtime failures.
Settings
Runtime knobs for completion search, subtitle providers, and VPN lanes. Completion and dialogue settings are saved to the worker runtime file so they survive dashboard restarts and are picked up by new worker runs.
Torrent Source URLs
The season and movie completion workers use these sources when searching for torrent candidates. Each row maps to the simulator source format: home URL, optional search URL template, and parser profile.
Subtitle Providers
Used by the completion worker to verify selected media against episode/movie dialogue before cataloging and packaging.
Completion Download Route
This only changes qBittorrent payload downloads for season/movie completion. Search pages, APIs, subtitle providers, metadata fetches, health checks, and player streams keep using VPN lanes.
IDLE / FULLSPEED Autoscaling
Keeps completion siblings low while mobile or TV users are active, then opens extra season/movie slots after the quiet window.
VPN Lanes
Lanes 1-3 run completion and artwork work. Lanes 4-5 run repair qBittorrent work. Lanes 6-9 run health libtorrent checks, and lane 10 is reserved for user playback and config proving.
Config Zips and Torrent Ports
Apply one AirVPN WireGuard zip to selected lanes and update forwarded torrent ports in one save.