# Orbit TV roadmap Approved by Paul on 1 November 2026. Companion documents: [programming bible](programming-bible.md), [metadata and matching](metadata-and-matching.md), [asset inventory](asset-inventory.md). Source briefs are in [briefs](briefs/). ## Execution order (Paul, 3 November 2026) Batches 1 to 5 of the special-programming artwork are approved as the creative direction, ready to move towards production integration with the usual asset checks and install approval. Artwork approval is not approval to schedule events or change bookings. The stages run in this order, each inspected first, proposed with acceptance criteria, approved, built, tested, verified on the Xiaomi box and recorded, in versioned releases kept apart (assets, scheduler, playback, homepage). No claims of hardware verification from tests alone; no silent rewriting of committed schedules or curated decisions. 1. **Audio synchronisation fix** (0.95.2): detect the box's audio clock going wrong in long playback and correct it through the player's own mechanisms, without overcorrecting or a custom engine. Verify over extended playback on the box. 2. **Terra branding correction:** replace the old Terra logo on every surface (channel list, guide, corner logo, channel info, shared branding) with exports from the approved newer design; before-and-after; TV-distance check; small isolated release. 3. **Presentation integration:** 3A audit every approved asset across Batches 1 to 5; 3B presentation keys (booked event or active takeover, then named block, then channel ident; block ident on entering a block only; old plans stay valid; cross-midnight kept); 3C connect every approved identity (Riot, After Dark, Horror, Gold, Three, Vortex, Orbit 2, Ring X nights and PPV with its booked title, Terra, Drive-In takeovers and themed nights, Premiere kept inactive until its scheduling and metadata exist); 3D keep preloading, full-screen playback, clean holds, fallbacks, silence by default; 3E dynamic text for Ring X nights, PPV, themed nights and Premiere, only for confirmed bookings, handling long titles and missing metadata. Never give special artwork to an ordinary programme just because it airs in a themed window. 4. **Programming and schedule verification:** every channel against docs/channels, the briefs and the installed configuration (identity, pool, core and supporting, catalogue matches, dayparts, weekly blocks, progression, rotation, events, never-aired content, identity errors, schedule coverage), including the known investigations (long series crowding ToonZ, Wild, Odyssey; film rest pools; Premiere new arrivals; estimated episode counts; the first PPV Sunday; new blocks entering the week). Multi-week replays: no gaps, cut-offs or accidental repeats, correct events and progression, fairness, stable restarts, committed bookings unchanged. Defects get isolated proposals, approved before applying. Output: the verified baseline for the Living Network. 5. **Living Network** in small stages: 5A rolling seven-day planning; 5B catalogue awareness (new to library, newly released, new episode, first broadcast on Orbit, previously screened); 5C preference-aware selection with deterministic rules first; 5D suggested special events, artwork only once approved and booked; 5E user autonomy (manual, suggest and approve, automatic), Orbit Preset optional, providers separate from the scheduler. 6. **What's On and homepage intelligence:** editorial sections built on trustworthy schedule, catalogue and event data; booking truth for anything with a date or time; tune to airing, guide for future, cinema screen for Drive-In events; the guide stays usable without recommendations. ## Decisions Paul approved these on 1 November 2026. | Conflict found | What the sources say | Decision | | --- | --- | --- | | 103 name | Installed as "Toonami". The bible has Vortex, and 103's search list also holds titles the bible now gives to Heroes and Orbit X. | Rename the display to Vortex, keep 103 and its lineup. Toonami is a third-party brand, and the creative brief bars those as default branding. | | 101 name | Installed as "Orbit One", bible says "Orbit 1". | Use Orbit 1 on screen, keep 101. | | Box office and game names | The app and its artwork say OrbOffice and OrbHive. Both briefs say Orbit Drive-In and OrbitHive. | Use Orbit Drive-In and OrbitHive going forward. Rename the app and artwork in a later build. | | Orbit X and Ring X look | Both call for silver or chrome with an aggressive red X, and the bugs will sit on the same screen. | Keep the red X for Orbit X's cartoon slash. Give Ring X a distinct silhouette, decided when its board arrives. | | 102 content | Built from Horror, Thriller and Science Fiction film searches. The bible separates Orbit Horror and defines After Dark as cult and late-night. | Keep 102 as built. Change its rules when presets arrive, and don't claim adult controls before profiles exist. | | Title moves | Toy Story moves from Wonder to PixelZ. Batman Beyond and The Powerpuff Girls drop off Vortex in the new table. | Latest table wins. Batman Beyond stays a permitted crossover and The Powerpuff Girls moves to Rewind. Existing 103 choices stay. | | Order of work | Your earlier order had controlled refresh and the grid guide. The new priority list names neither. | Keep both, as shown in section E. | | Profiles | Listed as a later priority, yet matching treats audience suitability as a required filter. | Capture ratings early and show them. Treat real enforcement as a gate before anyone outside your household uses mature channels. | ## Current status The status below comes from the source code, the verification notes and Paul's reports from the box. The roadmap update's list of working features is right in spirit, but discovery and channel generation are much narrower than it implies. ### Implemented These are working, with Paul's confirmation noted where given. | Feature | Actual extent | Confirmed by | | --- | --- | --- | | Emby sign-in and remembered login | One fixed provider. Encrypted saved token, no saved password. | Paul, on 0.14 | | Metadata access | Hand-triggered, small queries: 20 items per page, 10 series per search, 5 episodes per series. No full library read. | Paul, on 0.3 | | Clock-driven channels | Repeating UTC timeline. Joins in progress, real Now and Next, automatic rollover. | Paul, on 103 | | 101 Orbit One | Built from the checked sample, up to three titles. | Partly: built and saved | | 103 Toonami | One to three approved series, up to five episodes each, from a 23-title search list. | Paul | | 102 Orbit After Dark | Two or three approved films from genre searches. | Paul: played, with a tuning-screen issue | | After Dark artwork in the app | Compact logo and lit-window background, on the review and guide screens. | Paul | | Programme strip and channel switching | Strip hides after five seconds. Switching works between built channels. | Paul for the strip; switching not separately reported | | Demo guide grid, ticket previews, Services page | Fictional data, not connected to Emby. | Paul, on 0.2 | 0.16 replaces the blue tuning panel and passes 87 tests and lint. Paul confirmed on 1 November 2026 that it works on the box. ### Approved direction - The 25-channel lineup in section A, as presets matched against each user's library, never bundled content. - Tick-based selection: available titles can be ticked, and missing titles stay visible, unticked and marked unavailable. - The clock-driven schedule stays, and new work plugs into it. - Original Orbit assets only. Concept art is reference, and After Dark is the reference workflow. - Optional, explainable personalisation, with no mandatory AI or cloud service. - Orbit Drive-In as occasions, not a catalogue. ### Proposed These need technical review: sections B, C and F, time-of-day and weekly programming, repeat rules, and the catalogue storage choice. ### Future Profiles and PINs, more providers, authorised IPTV and external guide data, themes, Catch Up, OrbitHive Bedlam, OrbText, first-run onboarding, self-hosting and public distribution. ### Blocked or uncertain - **Metadata quality:** unknown until tested. Nobody has measured how much of it the provider returns. - **Provider load:** the provider's rate limits and any rules on full library reads are unknown. - **Playability at scale:** each title needs its own playback check, and only direct-play sources work because transcoding is off. - **Names and rights:** clearance isn't established for Orbit or any channel name. Curated title lists and references to other brands need review before public release. - **Transparent video idents:** support is unproven on the box, and current idents are opaque H.264. - **New concept boards:** the eight new boards haven't been received. ## Indexing and programming engine Audit and phased plan are in review, from `docs/briefs/indexing-programming-engine-2026-11-01.md`: https://claude.ai/artifact/YYGHnyn7fhxfM1NctEtexw. Nothing from it is approved or built yet. ## Smart channels status Phase A of [the Smart Channels Foundation brief](briefs/smart-channels-foundation-2026-11-01.md) passed Paul's review on 2 November 2026, with Paradox on the box (VERIFICATION-0.39.0.md). Phase B (Terra and After Dark, VERIFICATION-0.40.0.md) and Phase C (Vortex, plus fewer repeats on Terra, VERIFICATION-0.41.0.md) are on the box as 0.41, tested and awaiting Paul's review. Day parts are on the box on Vortex and After Dark (VERIFICATION-0.42.0.md). Phase D (the remaining channels) needs separate approval. Reviewed suggestions are built and in use on After Dark and Vortex (VERIFICATION-0.47.0.md), the first piece of the programming director. Vortex Movie Night, the first weekday event, is on the box. Phase D has started with Orbit Gold (111), Heroes (121) and Evidence (141), on the box as 0.49, then ToonZ (122), Rewind (123) and Orbit X (124), all on the box as 0.51 with ten smart channels running (VERIFICATION-0.51.0.md). Orbit Three (112), Riot (113) and Dark Files (142, with day parts from the bible) are on the box as 0.59, making 13 smart channels (VERIFICATION-0.59.0.md). Paul's own channels, Detour (114), BritX (115), Orbit Junior (125) and Orbit Wild (143), are built as 0.63 from docs/briefs/new-channel-ideas-2026-11-02.md; Orbit Unsolved is held, as Dark Files covers it. Still to add: Orbit 2, Wonder, PixelZ, Orbit VHS, Orbit Sci-Fi, Orbit Horror, Orbit Action, Orbit Romance, Orbit Premiere, Odyssey and Ring X. Numbers are placeholders until Paul maps the lineup. A show may run on several channels but never at the same moment. Animated idents are design files only and aren't in the app yet. ## Programming director Paul's direction, 2 November 2026, for after broadcast reliability is proven. Proposed, not built. - **Two tracks:** broadcast reliability (episode progression, schedule recovery, film rotation, day parts) comes first. Smart programming (channel identity rules, discovery, variety, explainable recommendations, and eventually local learning) follows. - **Two parts:** the scheduler executes a stable programme plan. A separate programming director decides what belongs in that plan. - **Personality setting:** Familiar (more established favourites), Balanced (favourites mixed with discoveries), Surprise Me (more unusual programming). Illustrative, not in the app. - **Not for this channel:** Paul can't judge every suggested title in advance, so unsure ones stay in as discovery, with an option to remove a title while it's airing. Proposed 2 November 2026, not built. - **Ownership:** rule-based and transparent, with lightweight preference signals. Learning can be switched off entirely and reset. No cloud, no mandatory AI, no uploading viewing history. ## Living network: new arrivals by channel identity Paul's direction, 3 November 2026, for the core programming roadmap. Recorded only: no phase, no code. Orbit should feel like a living network. Each channel keeps its nostalgic identity, while new arrivals in the library are matched to the channels they suit and offered for future slots. Examples: new Dragon Ball episodes or suitable anime for Vortex's next evening, first Orbit screenings for Premiere, new superhero animation on Heroes, themed weekends at the Drive-In. What's On then promotes the confirmed results: New on Vortex tonight, Tonight's Movie Premiere, Special Marathon Weekend, New to Orbit, Coming This Weekend at the Drive-In. **Ground rules:** the scheduler decides what airs, and What's On only promotes confirmed programmes. New titles are suggested for future slots and never disturb committed plans. User choices and manual scheduling always win. Personal highlights come with profiles and never change the live broadcast. Provider-independent, explainable and lightweight, with no constant AI and no outside services. **What already exists to build on** | Need | Existing piece | | --- | --- | | Spotting new arrivals | The catalogue import reads the library oldest first by date added, so new titles are simply what's past the last position read. New episodes of shows already on a channel arrive by themselves at its weekly pool refresh. | | Channel identity | Each channel's curated list, day parts and suggestion rules (genres, years, ratings, exclusions). | | Suggest, then approve | The Titles review: suggestions with reasons, accepted and rejected choices saved per channel, nothing added without approval. | | Explaining choices | Phase 1 reasons on every planned programme. | | Separation and homes | The approved Phase 2 direction: primary homes as preferences, a 3 hour default window, a 24 hour episode rule, event overrides. | | Promotion | Tonight on Orbit and the event registry (Stage A approved in direction, not built). Hidden Gem already uses "never shown on Orbit". | | Events and weekends | The Drive-In planner, named bills and the Takeover definitions (Stage A). | **What would be new:** an arrivals check that compares new library items with every channel's rules and lists the matches with reasons, a "New" tag on a programme's first airing that promotion can read, and an optional "suggest a slot" step (for example, Vortex's next evening block) that becomes a normal approved choice. A first-airing event, such as a new film's Orbit premiere, would use the same event model as the Drive-In. **Marathons (later):** per-show mixed or in-order playback (`shuffleTitles`, 0.84.0) lets a marathon run a normally mixed show in order for one night. Telling standalone episodes from arc episodes, so The X-Files can be mixed by day and in order by night, comes with the smarter programming work. **Depends on:** Phase 2 scheduling, Tonight on Orbit Stage B, profiles for personal highlights, and a provider abstraction before Plex or Jellyfin. ## The Living Network architecture (Paul, 3 November 2026) Paul's direction, recorded as the frame for everything above and below. Not started: no scheduling changes until each part is audited, proposed and approved on its own. **Guiding principle:** Paul defines the character of the channels and the boundaries of the network. Orbit uses the available library, viewer preferences and approved rules to find interesting things to broadcast. What's On makes those broadcasts discoverable, and the presentation system makes them feel special. A personal network that feels alive, without taking control away from the viewer. 1. **Presentation templates, not calendar events.** Takeovers (Orbit Fright Nights, Christmas at Orbit, Driv-Fi, The 80s Takeover, Arnie Triple Bill), themed director, actor, franchise and decade nights, and First Screenings and New Arrivals are reusable presentation capabilities the Living Network can select. None is a compulsory dated broadcast. 2. **Intelligent event selection (later).** Discover and propose events from: the playable library; viewer preferences; channel identities and approved rules; genres, franchises, directors, actors, decades and themes; seasonal opportunities; event rotation history; rest periods and fairness; runtimes and free windows; existing commitments and manual events. Example: suitable Schwarzenegger films in the library, so Orbit proposes an Arnie Triple Bill, picks three playable films, finds a future Drive-In slot and attaches the themed presentation. Built on normalised metadata and deterministic, inspectable rules; AI optional and never a cloud dependency. 3. **Seasonal programming.** Configurable eligibility windows and preferences, not fixed dates: October makes Halloween events eligible and increasingly relevant, December Christmas; sci-fi weekends year-round; director, actor, franchise and decade specials from the catalogue and preferences. A takeover activates only when its event is approved and booked, and normal presentation returns when the booking or takeover period ends. 4. **The rolling seven-day network (core).** Keep the seven-day committed schedules. As time advances, keep planning future uncommitted slots to hold the horizon, respecting identity, daypart and weekly rules, episode order, fairness, repeat limits and rest, programme boundaries, confirmed recurring events, playable items, user settings, profile visibility and restrictions, and existing bookings. Never rewrite committed plans for new content or new recommendations. New arrivals and proposed events go into suitable future uncommitted slots, within the user's automation permissions. A scheduled event is not a suggested event. 5. **User control and custom networks.** Orbit Preset is Paul's curated network; users can build their own. Modes: manual scheduling, suggest-and-approve, and automatic within user-approved rules. Users can change channel identities, create channels, set preferences, approve events and override decisions. The same foundation works across supported media providers. 6. **What's On as the editorial front page.** Sections such as Tonight on Orbit, Picked for Today, New on Orbit, First Screenings, New Episode Premieres, Upcoming Special Events, Movie Nights and Marathons, This Weekend on Orbit. The committed seven-day schedule is the source of truth for anything with a date or time. New imports can be discovery suggestions but are never called premieres until booked. Keep apart: new to the provider library, recently released, first screening on Orbit, new episode, ordinary repeat; never infer premiere status from title metadata. Selections meaningful, not random (identity, interest, freshness, significance, variety, timing). Airing items tune straight to the channel; future ones open the guide entry. Clean, fast, remote-friendly. 7. **Presentation integration.** A booked themed event selects its approved artwork automatically from the confirmed programme and its block or event identity. Precedence: booked event or takeover presentation, then named block ident, then the channel ident; missing or disabled artwork falls back safely. Shared assets with dynamic, verified text rather than a video per director, franchise or title. Keep seamless playback, preloading, the final-frame hold, small assets and device performance. 8. **Order of work.** (1) Batch 5 artwork previews. (2) This selection intelligence stays a roadmap. (3) The Terra in-app logo replacement as its own small release. (4) Complete and verify the presentation-key integration before any automated takeover. (5) Later, audit the scheduler, catalogue metadata, event system and homepage, then propose the Living Network in increments. **Later technical roadmap, each part with its own acceptance criteria, tests and rollback:** continuous seven-day schedule maintenance; catalogue refresh and new-arrival detection; recommendations and special-event selection; user approval and automation preferences; premiere identification; What's On editorial selection; reusable takeover presentation. ## Living Network test scenarios and order (Paul, 4 November 2026) Full proposal: docs/living-network-proposal.md. Three end-to-end test scenarios: 1. **Story-aware episode grouping.** This is reusable; Paradox and Doctor Who come first. Multi-part stories are booked as complete groups from verified markers or approved arc lists, never as isolated later parts. 2. **New-media discovery.** Dragon Ball Super: Beerus is the test: new to library, newly released, first on Orbit, a Vortex Prime proposal, and promotion only once a playable episode is booked. 3. **Drive-In intelligent curation.** Orbit curates its own cinema calendar from the playable film catalogue: Arnie Triple Bill, Hammer Horror Double Bill, Universal Monsters Takeover, J-Horror After Midnight, director, actor, franchise, seasonal and decade nights. Each event is verified for identity, playability, runtime, fit, date and linear clashes. The current future calendar is replaced only by a separately approved Drive-In cutover that keeps tickets, screenings underway and confirmed events. **Shared intelligence:** grouping, detection, assignment, scheduling and promotion are separate components sharing verified programme identities and confirmed bookings. The Living Network proposes and schedules, What's On and the Drive-In present confirmed bookings, and the existing scheduler keeps order, timing and continuity. **Order:** - A: Doctor Who grouping on Paradox. Approved for implementation. - B: Beerus inspection on the box. Approved when the TV is idle. - C: new-media detection. - D: channel assignment and booking proposals. - E: grouping on other channels. - F: Drive-In curation, in small releases from read-only recommendations. - Then What's On. - Then the Vortex Prime and Afterburn idents. ## After Dark editorial events (Paul, 4 November 2026) These are editorial proposals for the Living Network only. There are no bookings, no assets and no presentation keys until each event is approved. **After Dark's identity.** Cult midnight cinema, in the spirit of Shudder-style horror discovery. That covers obscure international horror, experimental cinema, folk horror, B-movies and unusual genre films. It is not a duplicate of the Horror channel. Mainstream horror lives on Horror, Sci-Fi, BritX or VHS. All three events below are occasional events within After Dark, not new channels. 1. **Hammer Horror Double Bill.** A curated double feature of verified Hammer horror films, scheduled late at night. Presentation: classic Gothic, with crimson theatrical styling. 2. **Universal Monsters Takeover.** A themed evening of Universal's classic monster films, using verified library titles. Presentation: black-and-white cinema styling, with its own special identity. 3. **J-Horror After Midnight.** An occasional late-night showcase of Japanese supernatural, psychological and atmospheric horror. It draws on verified, playable library titles where available, such as Ringu, Ju-on, Dark Water, Pulse (Kairo), Audition and Noroi. - Presentation: an old CRT television flickers into life. The picture distorts with analogue tracking interference and static, and the After Dark identity appears briefly through it. Then the J-Horror After Midnight title emerges. - It finishes on a fully lit, clean final frame so playback carries on seamlessly. - The mood is eerie and restrained, with no aggressive flashing and no loud sting. **When implemented,** each event follows the same pattern: - The Living Network checks which films are available and playable, and selects programmes that fit the theme. - It proposes suitable future slots for approval. - The matching presentation activates only once the event has been approved and booked. - Each event uses the existing event-key and reusable dynamic-presentation architecture (`DayPart.key`, `blockIdentFor`, the shared clip with dynamic text). No event artwork shows unless an actual event is booked. **A possible special extra.** More Things That Happened (2007) leaves the normal After Dark film rotation, because it is Lynch extra material rather than a feature. It is kept in mind as a possible approved special extra later. ## Movie nights and specials on every channel (Paul, 3 November 2026) A roadmap principle, not a request to build now. Films and specials aren't only for film channels. Any channel can carry intentional film blocks that match its identity, never random films in its episode rotation: - Vortex: Friday and Saturday anime Movie Night (exists). - Heroes: superhero animated movie specials. - Orbit X: Fox Kids-style adventure films and weekend specials. - Rewind and ToonZ: cartoon movie nights and classic animated specials. - Orbit Three, Gold and Riot: occasional comedy films, themed specials and event nights. - Orbit Premiere: recent releases, new library additions and first Orbit screenings. Build them from what exists: day parts with days (events), film pools and rest periods, committed schedules, and the proposed events and highlights work. Keep scheduling and promotion separate. What's On and Tonight on Orbit may promote only what's actually booked in a committed schedule, with the channel's identity, title, artwork and start time, for example "Friday Movie Night on Vortex", "Tonight's Premiere", "Superhero Movie Special on Heroes" or "Saturday Classics on ToonZ". Preserve channel identities, approved titles and committed schedules. ## New episode premieres and release slots (Paul, 3 November 2026) An extension of Living Network programming, recorded only. No code yet. When new episodes of a channel's established shows arrive in the library (an ongoing series like Dragon Ball, a new season, a weekly release, a returning series), Orbit should eventually: 1. Notice them through catalogue refreshes and verified metadata. 2. Work out which channels they belong to from the channel identities. 3. Check release dates, episode order and existing programming slots. 4. Suggest a premiere slot following that channel's own policy, for example the evening after a new Dragon Ball episode arrives on Vortex. 5. Leave committed schedules alone. If the slot is already booked, use the next suitable uncommitted slot, or ask for approval for an explicit change. 6. Prevent duplicate premieres, out-of-order broadcasts and confusing repeat announcements. 7. Once approved and committed, promote it in What's On as, for example, "New on Vortex", with the real broadcast time. Keep three dates apart: the original release date, the date added to the library, and the first Orbit broadcast. A new arrival in the library isn't necessarily a newly released episode. Users choose per channel: suggested premieres for approval, automatic scheduling only within slots they've explicitly authorised, or ordinary rotation only. The aim is that each channel grows its own release-day traditions (regular premiere slots, movie nights, special events) that match its identity, across Vortex, Heroes, Paradox, Riot and the rest. Reuse the catalogue refresh, committed schedules, the approval workflow and the What's On work rather than building new machinery. Works alongside "Movie nights and specials on every channel" above. **On the main menu (Paul, 3 November 2026):** an approved premiere with a confirmed broadcast slot automatically becomes eligible for a featured card in What's On / Tonight on Orbit, showing its artwork, channel identity, episode title and real airtime. It sits in the same editorial highlights system as movie nights, marathons, special events and Drive-In takeovers, not a separate recommendation system. Selecting a future premiere opens the TV guide at that programme; selecting one already airing tunes straight to its channel. Only confirmed airings are advertised, and a highlight is updated or removed whenever its schedule changes. ## Film channel directions (Paul, 3 November 2026) Editorial directions, not yet built. Check catalogue availability and scheduling feasibility before implementing. - **Orbit Premiere:** keep the existing blockbusters as supporting programming while the Living Network new-arrivals work is developed. Eventually distinguish recently released films, recently added library films, and first screenings on Orbit. New arrivals and premieres get suitable scheduling slots and appear in What's On once confirmed. - **Horror and After Dark:** Horror is the mainstream horror channel across all eras. After Dark becomes the wider cult and midnight cinema channel: unusual horror, exploitation, B-movies, strange sci-fi and cult classics. Shared titles stay allowed, with the usual rule against the same film on two channels at once. - **After Dark weekend traditions:** Friday B-Movie Throwbacks; Saturday The Last Drive-In with Joe Bob Briggs as a regular staple with full episode runtimes kept; Sunday Cult Classics. - **Orbit VHS:** about 1980 to 1995 at its core, with sensible exceptions and later films that deliberately recreate the rental era. Not a hard year rule. - **Recurring film events (3 November 2026):** Slasher Saturday on Horror (Saturday 20:00 to 02:00), B-Movie Throwbacks on After Dark (Friday 21:00 to 01:00) and Cult Classics on After Dark (Sunday 21:00 to 01:00) built in 0.91.0; The Last Drive-In with Joe Bob Briggs as After Dark's Saturday 21:00 staple approved in direction, needing its own engine change. All four are eligible for the future What's On homepage: once their broadcasts are committed, What's On should recognise and promote them by name, channel, artwork and time, through the shared highlights work, not a separate promotion engine. - **Themed nights inside an event (Paul, 3 November 2026):** an event can change its theme from week to week, so each household's Orbit develops its own nights. For example, a Cult Classics Sunday could become a Rob Zombie night: House of 1000 Corpses (2003), The Devil's Rejects (2005), Halloween (2007) and Halloween II (2009), all in the library. Themes would come from hand-made sets (a director, a franchise, a star) chosen in rotation, and would be promoted by name in What's On once booked. Not built; it fits the Living Network work. ## Special programming presentation (Paul, 3 November 2026) Four presentation levels: channel ident, block ident (3 to 5 seconds), event promo (confirmed bookings only) and takeover identity (optional, reversible). Each special identity is a variation of its parent channel, ends on a clean fully lit hold frame, has a small guide card, keeps audio quiet with a silent option, and falls back to the parent ident. Audit and concepts: the "Special programming presentation" doc. - **Batch 1, Riot (previews approved to build):** Riot Laughs, Saturday Stunt Night, Riot After Hours. Graveyard keeps the standard Riot ident. - **Later batches:** After Dark and Horror; Sunday Gold, Scottish Comedy Night, Vortex Movie Night, Retro Action, Spooky Teatime; PPV Sunday, Ring X weekly variation, Terra Sunday; Drive-In takeovers, Halloween and Christmas, director nights, premieres. - **Future event identities, not started:** Vortex Prime (Orbit's own name for Vortex's action and anime hours: 16:00 to 18:00 Vortex Prime, after-school action, energetic and colourful; 21:00 to 23:00 Vortex Prime: Afterburn, a darker, more intense evening variation of the same identity, not a separate brand), Heroes Saturday Morning, Orbit X Saturday Morning, Evidence Sunday Mystery, Dark Files Case Files, Odyssey Journeys. - **Lower priority:** Orbit 1 Sunday Drama, Wild Saturday Late. - **No bespoke ident for now:** Gold Saturday Teatime. Tots keeps its existing time-of-day idents. - **Presentation keys (direction liked, needs its own approval and verification, separate from the artwork):** a stable key per block or event, written into each booked programme. A block ident plays only when entering the block, following the committed programme (including cross-midnight events and overlapping block edges), with normal channel idents between programmes inside it. Preloading, seamless changeovers, clean hold frames and fallback to the channel ident stay as they are. ## Scheduler investigation: film rest periods (Paul, 3 November 2026) Read-only investigation, separate from any release. Found in the 0.90.0 replay: After Dark, VHS, Detour, BritX, Wonder and PixelZ can't keep their 7-day rest, because their lists run out before the week does, so the film that has waited longest comes back early (about 290 to 370 showings inside the rest over four weeks). The same happens today. Not to be solved by blindly adding titles or removing films. Look at adaptive rest periods based on pool size, runtimes, channel identity and how often films repeat. Keep a configurable preferred rest period, with a sensible fallback when the pool can't support it. Measure first and review before any scheduler change. ## Scheduler investigation: fair rotation for uneven episode counts (Paul, 3 November 2026) Read-only investigation, separate from any release. Found in the 0.88.0 replay: the finish-together rule lets a very large collection, such as ToonZ's Looney Tunes with 985 shorts, hold a block's round open, so smaller shows rest for weeks while short core shows come round again within the week. Rewind shows a milder version. Not to be solved by removing programmes or cutting their available episodes. Look at a lightweight weighted-fair rotation that keeps: core, supporting and surprise priorities; independent episode progression; reasonable airtime for smaller series; no unnecessary same-day repeats; daypart identities; all committed schedules; deterministic, explainable choices. Before proposing anything, measure on representative channels (ToonZ, Rewind, Heroes, Orbit X, Vortex, and a comedy channel): eligible-show coverage, episode repetition (same day, 3 days, 7 days), maximum waiting time per show, and airtime share by core and supporting. Relates to the Phase 2 separation decisions (3 h configurable separation, 24 h same-episode default). ## Future polish ideas Paul's ideas, 1 November 2026. Not fixes and not scheduled. - Subtle accent colour per category. - A tiny live pulse or movement on the On now cards, kept gentle and off for reduced motion. - The highlighted left-menu item could reflect the channel or theme, while yellow stays the clear focus signal. - Orbit Drive-In gets its own full-screen destination, opened from the teaser card. - **Rings around the planet (Paul, 1 November 2026):** Orbit 1's background had its rings off to one side of the planet. The app's copy is fixed, from orbit-1/sources/orbit_1_background_v2.svg. Orbit 1's ident and the other channels built from the same planet layout (Orbit 2, Orbit Sci-Fi and any others on that theme) still need checking and the same fix before they join the app. - **Bigger film pools (Paul, 2 November 2026):** filling by rating in 0.74 picked poor titles, so 0.75 uses longer hand-picked lists instead. A real programming director needs a better signal than rating, to be ironed out with Paul. - **Build your own network (Paul, 2 November 2026):** for anyone else using the app. On first sign-in, Orbit checks our channels against their library and ticks the ones it can fill, with those channels on by default. They can then edit any channel, adding or removing titles, turn channels on or off, and create new channels of their own. It's about people building what they want, as Paul did. In the pipeline, not scheduled. - **Seamless idents (Paul, 2 November 2026):** in 0.78, the ident covers the last 7 seconds of a show, and the next one loads silently first and takes over on time. Wild, Detour, BritX and Junior still need films of their own. - **Settings (Paul, 2 November 2026):** built in 0.72, then cut back in 0.73 to Channels, Watching and Emby account, as Paul wants only what's mandatory and a simple flow. The demo guide, old menu and test tools are gone. - **Subtitles default (Paul, 1 November 2026):** a setting behind the gear for subtitles on or off by default, in the viewer's language where a programme has it. - **Orbit Drive-In name (Paul, 1 November 2026):** decided, replacing OrbitOffice. Event types inside it are Orbit Marquee, Orbit Double Bill, Orbit Triple Bill and The Late Show. The briefs and design/interface still show the old name. - **Orbit Drive-In (Paul, 2 November 2026):** built in 0.67 with three scenes that take turns: his theatre and drive-in pictures, and the CRT. Marquee nights, Friday double bills, Saturday triple bills and late shows from his films, booked a week ahead. Tickets and in-app reminders came in 0.71, 5 minutes before and at the start. - **Top nav (Paul, 2 November 2026):** Home, Drive-In and Arcade along the top of every screen, from 0.76.2, each with its own screen, keeping the main menu clear. Snake is the Arcade's first game. - **Orbit Arcade (Paul, 2 November 2026):** the look in design/arcade is approved: logo, honeycomb menu and Bedlam screen. Games are OrbitHive Bedlam, Snake, Block Drop, Brick Break, Pairs and Patience. Small games only, so the app stays small: drawn in code with no game engine, and measured for size when built. Not scheduled. ## Channel numbers Done in 0.69, as Paul asked: blocks like Sky, biggest channels first. 100s entertainment and comedy (101 Orbit 1, 102 Orbit 2, 103 Orbit Three), 200s factual, 300s films, 400s sport, 600s cartoons and kids. The full list is in VERIFICATION-0.69.0.md. ## Interface direction Paul's idea, 1 November 2026. Home, guide and watching controls were built in 0.25 to 0.34 and confirmed on the box. Back on home closes the app, by Paul's choice, rather than going full screen. Still to build: proper settings behind the gear, profiles and real Orbit Drive-In events. - **Home:** keep the colour scheme and refine the details. Old-Sky-style category list on the left (All Channels, Documentaries, Movies, Kids and so on), showing a category only if the viewer has channels in it. Right side shows what's on now and Orbit Drive-In events, selectable with the remote. - **Guide:** choosing a category opens its channel list below, with channel name, time and what's on. Live picture-in-picture sits at the top on one side, with the highlighted programme's description on the other. Moving through the list updates the description, and only pressing OK changes the picture. - **Watching controls:** OK shows the classic programme bar. Up and down change channel. Right opens subtitles. Holding OK opens a small box for typing a channel number, because the Xiaomi remote may have no number keys. Left jumps back to the last channel watched. - **Settings:** a gear at the top right holds connection, profiles, themes and editing, so setup stays out of the way. - **Loading:** today's menus are developer test screens. Replace them with simple viewer options behind the gear, once indexing is settled. - **Principle:** the TV should open onto something playing or one press away, so home can't become another catalogue. ## Roadmap changes The roadmap gains two steps the update doesn't name, the metadata audit and a generic channel list, and keeps every earlier milestone. P1 to P6 are your priorities, and arrows show what must exist first. Branding can run alongside the other work once channels exist. ```mermaid flowchart TD fix["Now: 0.16 tuning fix, test on 102"] --> audit["Metadata audit"] --> cat["P1 Catalogue and refresh"] cat --> preset["P2 Preset matching"] cat --> list["Generic channel list"] preset --> rec["P5 Recommendations"] list --> grid["Grid guide restored"] --> brand["P4 Branding rollout"] list --> sched["P3 Schedule quality"] --> office["P6 Orbit Drive-In"] ``` Gate before mature channels reach other households: profiles and enforced ratings. Later: more providers, IPTV, themes, Catch Up, OrbitHive Bedlam, OrbText, public release. The grid guide comes before most new channels, because switching one at a time gets unwieldy past a handful. That follows your earlier request to bring the guide back as channels grow. ### What each step needs from today's code The clock engine stays. These limits are the parts that have to change, and only the last row changes how the clock behaves. | Today | Why it matters | Needed for | | --- | --- | --- | | Queries capped at 20 items, by hand | No library-wide view | P1 | | 512 KiB saved state, fixed channel slots, numbers 101 to 103 only | Can't store a catalogue or a fourth channel | P1, channel list | | Channel lineups of 2 to 15 unique titles | Too small for real channels, and blocks intentional repeats | P3 | | One repeating loop anchored to UTC | No concept of weekday, evening, local time or daylight saving | Dark Files, Ring X, Orbit Drive-In | For that last row, I'd keep the loop as the default and add an optional local-time block layer that hands each block a lineup. It needs its own design and your approval before any work starts. That also meets your rule against replacing the engine. ### Earlier milestones kept | Milestone | Where it now sits | | --- | --- | | Original channel set: 101, 102, 103 | Done | | Controlled refresh, previewing additions and removals without shifting what's playing | P1 | | Duplicate grouping and best-version choice, added 1 November 2026 | P1, before preset matching | | Smart rotation from large channel pools, added 1 November 2026 | P3 | | Reusable and custom channel creation with ticks | P2 and channel list | | Grid guide with real Now and Next | After channel list | | Bottom-left bug, off by default | P4 | | Optional idents with reduced-motion setting, never delaying the clock | P4 | | Dashboard: On now, Coming up, Orbit Drive-In presents | With P5 and P6 | | First-run onboarding and more providers | Later, Emby preserved | | Profiles, Kids, PIN | Later, with the gate shown above | | Themes, Catch Up, Games, OrbText | Later, unchanged | | Seasonal programming and themed weekends | P3 and P6 | The gate only applies once someone else's household is involved, so it doesn't hold up your own box. Until then, Orbit shouldn't describe any channel as age-protected. ## Next development step I recommend a read-only metadata coverage check as 0.17, after you've confirmed 0.16 on the box. It answers the question every later decision depends on: how much usable metadata does your provider return? Nothing gets built on guesses, and your channels are untouched. ### Scope - **Entry point:** a new "Check metadata coverage" action under Menu, Connect Emby. - **Requests:** one sample each of films, series and episodes, at most 20 items each, and only when you press it. - **Result:** counts only, such as "Genres 18 of 20", for each field in section B. No titles are shown. - **Sampling:** existing queries sort by name, which favours titles starting with A. This one should take a spread across the library and label itself a sample. It won't save anything, change a channel or schedule, classify titles, or build the catalogue. ### Files likely to be involved | File | Change | | --- | --- | | `MetadataAudit.kt` (new) | Build the requests, count field coverage | | `EmbyConnectionScreen.kt` | The action and the results screen | | `MetadataAuditTest.kt` (new) | Fixture tests | | `app/build.gradle.kts`, `EmbyClient.kt`, `SecureMediaDataSource.kt` | Version bump, as in past releases | | `VERIFICATION-0.17.0.md` (new) | Release notes and evidence | ### Risks | Risk | Handling | | --- | --- | | Provider load or rate limits | Three small requests, only on demand. Existing cooldown applies, and a rate-limit reply stops the check. | | Oversized replies from extra fields | Existing 2 MiB response cap, with a clear message if hit | | Sample misleads | Label results as a sample, not a library total | | A field name differs from Emby's documentation | Check the documentation first, and report a missing field as zero, not as an error | | Private catalogue exposure | Counts only, nothing saved or logged | ### Acceptance criteria - [ ] One press sends at most three requests, each capped at 20 items. - [ ] The screen shows coverage counts for each item type and field, with no titles. - [ ] 101, 102 and 103 keep their lineups and timing, and saved setup is byte-for-byte unaffected by the check. - [ ] An expired login or rate limit gives a clear message and stops. - [ ] You can run it with the remote, then read or photograph the result for me. ### Tests Fixture tests cover the request limits and the token staying in the header, not the URL. They also cover missing and malformed fields, a server ignoring the limit, rate-limit and expired-login stops, and no saved-state writes. The full 87 existing tests and lint must still pass, and you then run it on the box. ### Rollback Reinstall the 0.16 APK kept in `outputs/revision-0.16.0`. The saved data format doesn't change, so your login and channels should survive, which I'd confirm during the test. The project is now in git, so each release can also be rolled back from its commit, which the channel-list migration will need later. ## Towards release (Paul, 5 November 2026) Paul will watch Orbit for a few weeks first, so the channels, the Director's Chair and its learning mature on real use before anyone else gets it. In rough order: 1. **Catch-up:** watch a programme that aired in the last couple of days from the start; the channel itself carries on. Designed 5 November 2026 (design/catch-up): the guide scrolls back two days, past programmes carry a Catch Up mark, OK on one opens the Catch Up pop-up (Hold OK stays the number box), a two-part story offers both parts; plus a Catch Up tab in the nav bar (Home, What's On, TV Guide, Catch Up, Drive-In, Arcade) with Just missed, Earlier today and Yesterday rows. Built in 0.108.22 (5 Nov): sleep timer in the Watching panel, Catch Up in the guide, the pop-up and its own tab; the box keeps 49 h of past. 2. **Sleep timer:** fade out and stop after 30, 60 or 90 minutes. 3. **First run (pre-launch setup):** a guided first launch that connects a library, checks it against Orbit's channel presets and switches on the channels it can fill; sets the After Dark lock (a PIN on After Dark and The Late Show) and the sleep timer there too. 4. **More media servers:** beyond Emby, Plex, Jellyfin and Silo (a new open-source media server, https://siloserver.org/), behind one library interface so the scheduler, the Chair and the Drive-In don't care which server it is. 5. **Your own channels:** people choose which channels they want, use Orbit's presets (the Chair picks the shows that best suit each channel from their own library), create their own channels and add or remove shows. Create your own (Paul, 6 November 2026) comes with playback styles: in order, shuffled, blocks or marathon, alongside the Director's Chair's matching. Content groups for shorts (short cartoons bundled into half-hour slots) are their own scheduler engine, separate from custom channels: Tots and ToonZ use it whether or not custom channels are on, and Create your own's "blocks" style uses the same engine. A block keeps its individual episodes underneath (each with its own entry, start and runtime), so Catch Up, programme progress, Kids restrictions and the Director's Chair still see exactly what aired; the block is only how the guide and idents present them (Paul, 6 November 2026). Not built yet; each needs its own proposal and approval. ## Portability and data safety (Paul, 6 November 2026) Before themes or more features: Orbit has to work for someone else's server without touching Paul's. - **Server address (0.108.40):** typed in at sign-in, HTTPS only, checked as an Emby server before the password is sent, saved with the sign-in. - **Each server its own workspace (0.108.41):** sign-in, catalogue, schedules and bookings, the Director's Chair's decisions and approved events, playback notes and artwork. Only the server signed in to is open; a session stays bound to its own server's address. The box's existing data belongs to the original server and stays exactly where it is (nothing moved, copied or rewritten), so an older Orbit still finds all of it. Moving to another server deletes nothing; Sign out keeps a server's data; Remove this server is its own confirmed choice. - **Portable events:** the curated Drive-In events are templates by title, year and verified IMDb ID, found in each library through its catalogue. An event with any film missing isn't offered at all, and nothing unrelated stands in. Every copy of a film is checked and the first this box plays is booked. - **Paul's own decisions stay his:** premiere calls, After Dark removals, the Beerus copy and the season plans (Advent, the Naughty List, premieres) are by item on his server and apply only there. - **Advent:** its doors and the Naughty List still name Paul's items; when Advent is installed, they need the same template treatment for any other server. - **Home servers on plain HTTP (later, its own change):** LAN-only. HTTPS stays the default; plain HTTP only for a private address on the home network (10.x, 172.16-31.x, 192.168.x, or a .local name), never a public one, with a clear warning and the token kept to that address. Needs the cleartext rule narrowed to those addresses and the media source's private-address refusal relaxed for that server alone. No unrestricted public HTTP. ## The Orbit cast across Orbit (Paul, 5 November 2026) Ollie, Blaze, Zip, Drift, Luna and Bumble, always drawn to the model sheet (design/arcade/orbit-cast.md). Ideas to pick from: cameos in the other games (Snake, Brick Break, Pairs cards); Tots idents and short bumpers; a sleep timer goodnight from Luna; Catch Up and loading moments; the Arcade's Recently played and best-score cheers. ## Themes (Paul, 5 November 2026) Built in 0.108.42: theme tokens (Themes.kt), Look step after Welcome, Settings › Look; Orbit Night unchanged colour for colour; contrast tested for every look. The cast, idents, takeover marks and game boards keep their own colours. Six looks: Orbit Night, Daybreak, Nebula, Retro Tube, Deep Sea, High Contrast (design/first-run/themes.png). - The chosen look applies at once, onboarding included, so "Choose your look" comes right after Welcome. - Every colour in the app comes from the theme (no fixed navy or gold left in any screen), and each look is checked on every screen, in the player overlays, pop-ups and games too, before release. The cast never changes colour. ## Orbit Multiroom (Paul, 5 November 2026) "Bring Orbit to another room." On a new box, first launch offers **Join an existing Orbit** alongside a fresh set-up: it finds the living-room box on the home network (or takes a six-digit code shown there), the living-room TV confirms, the chosen settings come across, you name the room and start watching. Shared between rooms: channel choices and presets; channel schedules only if shared viewing is chosen; themes and accessibility; profiles and Kids restrictions; Director's Chair decisions; Arcade preferences. Stays with each box: sleep timer, sound output, playback capabilities, remote preferences, what's playing, local caches and diagnostics. Shared schedules are an explicit choice: the same programme on Orbit 1 upstairs and down at the same moment (join live at its place), or the same line-up with independent schedules. Stages, with no box ever made a server others depend on: 1. **Transfer my Orbit:** a secure one-time copy of approved settings. No lasting connection. 2. **Keep rooms in sync:** approved changes to channels, profiles or themes pass between paired boxes, with clear conflict handling. 3. **Shared network:** boxes play from one canonical schedule with independent playback. This needs one schedule authority, or two boxes could plan different programmes for 8pm. An optional small local coordinator, never required. Security, to settle before building: - No Emby password ever leaves a box. Each box signs in for itself, or gets its own device token the server issues, so each one can be signed out on its own. - Pairing only on the local network, by the code plus a confirmation on the existing box's TV. Codes are short-lived and single-use. - The transfer is encrypted end to end with a key agreed during pairing, never sent in the clear. The receiving box shows what is coming before it's applied. - The Grown-ups PIN travels only as its salted hash, never as digits. Kids restrictions can't be loosened from the new box without the PIN. - Paired boxes can be listed and removed from Settings. Removing one stops any sync. ## Ideas from NostalgiaTV (6 November 2026; comparison: https://claude.ai/artifact/8apAQfaBkBHSzSt7X4Bawv) In Orbit's own style, roughly in this order: credits squeeze-back with "Next on…" and the cast, and cast promos between programmes; channel takeovers by the hour (a block with its own ident); content groups for shorts on Tots and ToonZ; playback styles in Create your own; a phone remote and home-network web page for editing channels; settings export (Multiroom stage 1, tethered schedules later); seasonal dressing for the cast; Report Issue (counts only). Not: parody networks, real adverts, Firebase sync.