# Ingenee prototype — canonical data

Single source of truth for every entity referenced across the prototype. When updating a page, look here first to keep names, IDs, dates, and metadata consistent.

---

## Operator orgs · 12 total

| Slug | Name | Plan | State | Members | Created | Renewal | MRR | 30d Bedrock | Margin |
|---|---|---|---|---|---|---|---|---|---|
| `midweststream` | MidwestStream Content Operations LLC | Pro | Active | 5 | 2026-01-12 | 2026-07-14 | $499 | $214 | $285 · 57% |
| `nordicvod` | NordicVOD | Business | Active | 14 | 2025-09-22 | 2026-07-22 | $1,499 | $812 | $687 · 46% |
| `africaflix` | AfricaFlix | Pro | Past-due | 3 | 2025-11-04 | retry 2026-06-18 | $499 | $612 | -$113 · -23% |
| `demosandbox` | DemoSandbox | Trial | Trial | 1 | 2026-05-30 | trial ends 2026-06-16 | $0 | $14 | -$14 |
| `newoperator` | NewOperator | Trial | Trial | 2 | 2026-06-04 | trial ends 2026-07-04 | $0 | $0 | $0 · coupon LAUNCH50 |
| `coastalstream` | CoastalStream Media | Pro | Active | 4 | 2025-10-18 | 2026-07-18 | $499 | $192 | $307 · 62% |
| `prairiebroadcasting` | Prairie Broadcasting Co. | Business | Active | 8 | 2025-08-11 | 2026-08-11 | $1,499 | $642 | $857 · 57% |
| `evergreentv` | Evergreen TV Networks | Pro | Active | 6 | 2025-12-02 | 2026-07-02 | $499 | $284 | $215 · 43% |
| `southstreamtv` | South Stream TV | Pro | Active | 4 | 2026-02-14 | 2026-07-14 | $499 | $228 | $271 · 54% |
| `metrocentralfast` | Metro Central FAST | Business | Active | 11 | 2025-07-22 | 2026-07-22 | $1,499 | $748 | $751 · 50% |
| `phase1tester` | Phase1Tester | Pro | Active (stagnant) | 2 | 2025-06-12 | 2026-06-12 | $499 | $0 | $499 |
| `churnedco` | ChurnedCo | — | Canceled | — | 2025-12-01 | canceled 2026-06-01 | $0 | $0 | $499 May 14 |

**Platform totals:** 12 orgs · 8 active · 3 trial · 1 past-due · MRR $8,990 · 30d cost $5,080 · 30d revenue $8,990 · margin $3,910 (43.5%)

---

## People

| Name | Email | Org(s) + role | 2FA | Last login |
|---|---|---|---|---|
| Naresh Choudhary | naresh@revidd.com | MidwestStream (Owner), DemoSandbox (Owner), **super_admin** | ✗ | just now |
| Sarah Chen | sarah@midwest.tv | MidwestStream (Editor) | ✓ | 2h ago |
| Mike Patel | mike@midwest.tv | MidwestStream (Editor) | ✓ | 4d ago |
| Jamie Lee | jamie@midwest.tv | MidwestStream (Viewer, **invited**) | — | pending |
| Lena Holm | lena@nordicvod.se | NordicVOD (Owner) | ✓ | 1h ago |
| Aaron Pierce | aaron@nordicvod.se | NordicVOD (Editor) | ✓ | 3d ago |
| Ade Adekunle | ade@africaflix.com | AfricaFlix (Owner) | ✓ | 8d ago |

---

## Metadata standards — title identifier schema

Every canonical title in the prototype carries the **full standard ID set**. Operator screens display them inline (asset drawer, provenance tab); export formats fan out the IDs that each downstream system expects.

### Identifier types we carry

| Standard | Field key | Format | Authority | Notes |
|---|---|---|---|---|
| **EIDR** Entertainment Identifier Registry | `eidr` | `10.5240/XXXX-XXXX-XXXX-XXXX-XXXX-C` (DOI) | EIDR Inc. (Phase 2 carry; outbound Phase 3) | Studio-grade canonical id |
| **TMDB** The Movie Database id | `tmdb_id` | integer (e.g. `12345`) | TMDB (Phase 2 floor) | Most common; free + 50/sec |
| **IMDb id** | `imdb_id` | `tt#######` (7–8 digits) | IMDb (Phase 2 provisioned) | Industry standard public id |
| **TMS / Gracenote** id | `tms_id` | `MV###########` (movies) / `SH###########` (series) / `EP###########` (episodes) | Gracenote / Nielsen (Phase 2 lite) | Required for cable / smart-TV |
| **Gracenote Series id** | `tms_series_id` | `SH###########` | Gracenote | For TV-series episodes |
| **ISAN** International Standard Audiovisual Number | `isan` | `XXXX-XXXX-XXXX-XXXX-?-XXXX-XXXX-?` | ISAN-IA (Phase 3) | ISO 15706 standard |
| **House ID** operator master id | `house_id` | `<ORG>-#####` (e.g. `MWS-12892`) | Operator | Internal asset reference |
| **UPC** | `upc` | 12-digit | Operator / studio | Physical-media tie |
| **ProductionID** MovieLabs CMM | `production_id` | MovieLabs CMM PID | Studio | From MovieLabs Avails |

### Canonical identifier set per title — `MidwestStream` library sample

| Title | Year | Runtime | Rating | Genre | Mood | State | Conf | Catalog | TMDB | IMDb | TMS (Gracenote) | EIDR | House ID | License territory | License window |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| **Night Shift** | 2024 | 01:36:00 | PG-13 | Crime drama | Cozy noir | Approved | 0.94 | MidwestStream lib | `1109427` | `tt12345678` | `MV019384521` | `10.5240/EXAM-PLE2-A4B7-C8D2-F92E-N` | `MWS-12892` | US · CA · MX | 2026-01-15 → 2026-06-15 ⚐ |
| **Lagos Nights** | 2023 | 01:48:00 | NR | Drama | Slow burn | Review | 0.68 | MidwestStream lib | `1108234` | `tt29384712` | `MV019328491` | `10.5240/AB12-3CD4-E5F6-7890-1234-Z` | `MWS-12893` | CA · MX | 2026-04-15 → 2026-12-31 |
| **Heat** | 1995 | 02:50:00 | R | Crime drama | Tense | ON AIR | 0.99 | MidwestStream lib | `949` | `tt0113277` | `MV000012431` | `10.5240/HE4T-1995-CRIM-DRMA-PAC4-N` | `MWS-12894` | WW | 2025-12-01 → 2027-12-31 |
| **Quiet Storm** | 2025 | 01:24:00 | PG-13 | Mood theme | Cozy | Enriched | 0.91 | MidwestStream lib | `1124981` | `tt32184729` | `MV019487102` | `10.5240/QS25-COZY-NOIR-1FAA-CC02-P` | `MWS-12895` | US | 2026-03-01 → 2027-02-28 |
| **Frozen Lake** | 2026 | 01:38:00 | PG-13 | Thriller | Slow burn | Expired | — | Filmrise Q2 drop | `1142884` | `tt33887124` | `MV019488721` | `10.5240/FL26-THRI-BBC2-3D11-EF09-Q` | `FILM-29384` | WW | 2024-09-01 → 2026-06-02 ✗ |
| **The Slow Burn** | 2024 | 01:42:00 | PG-13 | Crime drama | Cozy noir | Stuck | 0.42 | Indie Q1 2026 | — | — | — | — | `INDIE-00841` | — | unknown ◐ |
| **The Lake House** | 2006 | 01:39:00 | PG | Romance | Soft | Scheduled | 0.97 | MidwestStream lib | `1715` | `tt0410297` | `MV001012435` | `10.5240/LK06-RMNC-SCFT-1ABC-DE01-K` | `MWS-12896` | US · CA | 2026-01-01 → 2027-12-31 |
| **Mosaic of Years** | 2022 | 01:54:00 | R | Drama | Mature | Approved | 0.92 | Acme licensing | `1107312` | `tt28741623` | `MV019218742` | `10.5240/MY22-DRMA-2B4C-EE91-CD12-R` | `ACME-04211` | US · CA · MX | 2026-01-01 → 2027-06-30 |
| **Easy Sunday** | 2018 | 01:12:00 | PG | Light comedy | Warm | Approved | 0.95 | MidwestStream lib | `565987` | `tt08471932` | `MV017812409` | `10.5240/ES18-LCMD-WRMR-AB11-FF22-W` | `MWS-12897` | US | 2025-08-01 → 2027-08-01 |
| **Casino** | 1995 | 02:58:00 | R | Crime drama | Tense | Approved | 0.98 | Acme licensing | `1268` | `tt0112641` | `MV000012442` | `10.5240/CAS5-CRIM-DRMA-MOB1-AB12-N` | `ACME-04212` | WW | 2026-09-15 → 2028-09-14 |
| **The Insider** | 1999 | 02:37:00 | R | Drama | Slow burn | Approved | 0.96 | Acme licensing | `1813` | `tt0140352` | `MV000418273` | `10.5240/INS9-DRMA-MNN1-CB44-EE92-N` | `ACME-04213` | US · CA | 2026-02-01 → 2028-02-01 |
| **Sunday Brunch** | 2020 | 01:36:00 | PG | Family comedy | Warm | Approved | 0.93 | Acme licensing | `798123` | `tt18472918` | `MV018429103` | `10.5240/SB20-FAMI-CMDY-WARM-1234-P` | `ACME-04214` | US | 2025-12-01 → 2027-12-01 |
| **Cousins, Etc.** | 2021 | 01:28:00 | PG | Family comedy | Warm | Approved | 0.91 | Acme licensing | `802914` | `tt19482018` | `MV018982761` | `10.5240/CE21-FAMI-CMDY-WARM-4567-P` | `ACME-04215` | US | 2026-03-01 → 2027-12-31 |
| **Found Family** | 2023 | 01:34:00 | PG-13 | Drama | Hopeful | Approved | 0.90 | MidwestStream lib | `1105621` | `tt27194812` | `MV019128493` | `10.5240/FF23-DRMA-HOPE-AA98-CC55-J` | `MWS-12898` | US · CA | 2026-01-01 → 2027-06-30 |
| **Honest Lies** | 2024 | 01:50:00 | R | Thriller | Tense | Scheduled | 0.87 | MidwestStream lib | `1118842` | `tt30481928` | `MV019384712` | `10.5240/HL24-THRI-TNSE-BB12-CC44-R` | `MWS-12899` | US | 2026-04-01 → 2027-03-31 |
| **After the Storm** | 2022 | 01:42:00 | PG-13 | Drama | Mature | Approved | 0.89 | MidwestStream lib | `1105432` | `tt25471829` | `MV018921831` | `10.5240/AS22-DRMA-MTRE-FF21-EE89-P` | `MWS-12900` | US · CA | 2026-01-01 → 2027-12-31 |
| **Old Sketches** | 2019 | 01:18:00 | NR | Documentary | Reflective | Approved | 0.88 | MidwestStream lib | `542918` | `tt08742918` | `MV018112498` | `10.5240/OS19-DOCU-REFL-CC11-AA22-N` | `MWS-12901` | US | 2025-09-01 → 2026-08-31 |
| **Underwater** | 2017 | 01:35:00 | PG-13 | Drama | Mysterious | Approved | 0.91 | MidwestStream lib | `498234` | `tt06291842` | `MV017291203` | `10.5240/UW17-DRMA-MYST-BB23-FF45-P` | `MWS-12902` | US · CA | 2026-02-01 → 2027-12-31 |
| **Two Years Later** | 2021 | 01:46:00 | R | Crime drama | Reflective | Approved | 0.85 | MidwestStream lib | `812491` | `tt20294718` | `MV019018472` | `10.5240/TY21-CRIM-DRMA-RFLC-CC78-R` | `MWS-12903` | US | 2026-06-01 → 2027-06-01 |
| **A Quiet Year** | 2020 | 01:36:00 | PG-13 | Drama | Quiet | Approved | 0.93 | MidwestStream lib | `728361` | `tt17284819` | `MV018429108` | `10.5240/QY20-DRMA-QITS-AA11-FF89-P` | `MWS-12904` | US · CA · MX | 2026-01-01 → 2027-12-31 |
| **Q1 promo Heat** | 2025 | 00:04:00 | NR | Promo | — | Expired | — | Q3 promos | — | — | — | — | `MWS-PR-201` | US | 2025-01-01 → 2025-12-31 ✗ |

**Identifier authority defaults** (per [metadata-providers.md §6](../../docs/v2/integrations/metadata-providers.md)):
- Title name / runtime: **IMDb** > Gracenote > TMDB
- Cast / credits: **TMDB** > IMDb
- Genre / mood: **AI cluster + operator override** > TMDB
- Air date / release year: **Gracenote (US)** / **IMDb (rest)**
- Ratings / certifications: **Gracenote** > MPAA filing > operator override
- Synopsis: **operator** > IMDb > TMDB > AI generation (read-through)

**Library totals:** 8,420 titles total in MidwestStream · 21 detailed canonical above + 8,399 generic.

---

## Catalogs · 12 in MidwestStream

| Name | Source | Titles | State | Last activity |
|---|---|---|---|---|
| MidwestStream lib | CSV | 8,420 | Active | 2h |
| Acme licensing | Avails (XLSX) | 412 | Review | 14m |
| Q3 promos | Brightcove | 38 | Active | just now |
| Indie Q1 2026 | CSV | 180 (of 4,000 ingesting) | Ingesting · 1,842 / 4,000 | 3m |
| Filmrise Q2 drop | MovieLabs CMM | 1,200 | ⚠ 12 rights expired | 1d |
| Imported (Phase 1) | CSV | 3,210 | Paused | 3w |
| Acme Q3 avails | Avails (XLSX) | 218 windows | Review | 2d |
| Nordic main *(NordicVOD)* | Brightcove | 14,210 | Active | just now |

---

## Storefronts in MidwestStream · 3

### Home (Published · 14 shelves · 186 tiles · daily light refresh)

| # | Shelf | Class | Refresh | CTR | Compl | Status |
|---|---|---|---|---|---|---|
| 1 | Hero pick | Hero | — | 18.2% | 64% | Live |
| 2 | Continue watching | Personalised | — | 14.0% | 58% | Live |
| 3 | Friday Night Crime | Genre/Mood blend | Daily light | 6.2% | 41% | Live |
| 4 | Hidden Gems | Discovery | Daily light | 4.1% | 38% | **PINNED** |
| 5 | Family Comedies | Family | Weekly mod | 7.8% | 52% | **SPONSORED — Acme** |
| 6 | 90s Nostalgia | Era | Weekly mod | 5.4% | 44% | Live |
| 7 | Audience: Mature | Audience fit | Weekly mod | 1.9% ▼ | 28% | Live |
| 8 | New & recent | New | Daily light | 6.0% | 38% | Live |
| 9 | Slow-Burn Crime | Mood theme | Daily light | — | — | Live |
| 10 | Comfort Watch | Mood theme | Daily light | — | — | Live |
| 11 | Documentary picks | Genre | Weekly mod | — | — | Live |
| 12 | Romance for Quiet Sundays | Mood | Weekly mod | — | — | Live |
| 13 | Family Saturday Movie | Family | Weekly mod | — | — | Live |
| 14 | International discoveries | Discovery | Weekly mod | — | — | Live |

### Action zone (Published · 6 shelves · 72 tiles · weekly moderate)
### Q3 stunt page (Draft · 8 shelves · 96 tiles)

---

## FAST channels in MidwestStream · 5

| Slug | Display name | Archetype | TZ | EPG horizon | Health | Watershed | Distributors |
|---|---|---|---|---|---|---|---|
| `comedy-24x7` | COMEDY-24x7 | Mixed | America/Chicago (CT) | 13d | 81 ▲ | 21:00 CT | Roku DPF, Samsung TV+, XMLTV, JSON |
| `action-24x7` | ACTION-24x7 | Mixed | America/Chicago (CT) | 14d | 76 ▼ | 21:00 CT | Roku DPF, XMLTV, JSON |
| `crime-eu` | CRIME-EU | TV-Series | Europe/London (UK) | 7d | 84 ─ | 21:00 UK | Samsung TV+, XMLTV, JSON |
| `cozy-films` | Cozy Films · COZY-FILMS | Movie | America/Chicago (CT) | 3d ⚐ | 78 ▼ | 21:00 CT | Roku DPF, XMLTV, JSON |
| `music-videos-90s` | MUSIC-VIDEOS-90s | Music-Video | America/New_York (ET) | 14d | 88 ─ | n/a | XMLTV, JSON |

### Cozy Films channel DNA
- Tone: Comfort viewing. Slow-burn dramas, light comedies, romantic films of the 80s–10s. No horror, no extreme violence.
- AI guidance: Avoid back-to-back romcoms in primetime. Don't run two films from the same director within 14 days. Always end primetime with the heaviest tile.

#### Cozy Films · dayparts CT
- Overnight 00–06 · filler-heavy
- Early 06–09 · light comedies
- Daytime 09–17 · discovery, drama
- Family block 17–20 · family-safe
- Primetime 20–23 · recognition-heavy
- Late 23–24 · slow-burn

#### Cozy Films · rotation tiers
- Heavy: 18 titles · 4d window
- Medium: 32 titles · 7d window
- Light: 48 titles · 14d window
- Catalog: 340 titles · 30d window

#### Cozy Films · blocks · 8
| Name | Kind | Recurrence | Locked | Status |
|---|---|---|---|---|
| Family Saturday Movie | themed | Sat 17:00–20:00 CT | 🔒 | Active |
| Slow-Burn Sundays | genre | Sun 22:00–24:00 CT | 🔒 | Active |
| Stand-up Hour | series_strip | Mon–Thu 22:00–23:00 CT | | Active |
| Heat marathon | asset_pool | Fri 19:00–24:00 CT | 🔒 | Active |
| Filler Friday late | filler | Fri 24:00–06:00 CT | | Active |
| AI Sunday brunch | ai_assembled | Sun 10:00–13:00 CT | | Active |
| Q3 special | themed | one-time 2026-07-15 | 🔒 | Pending |
| Old Tuesday strip | series_strip | (paused) | | Paused |

---

## Export formats & distributor specs

Every published Ingenee output flows through an `OutboundCatalogAdapter` per [catalog-sync.md §3](../../docs/v2/integrations/catalog-sync.md). Each format has a canonical schema, MIME type, file extension, and identifier requirements. The Distribution settings screen shows these as cards; the Carriage history shows each delivery; the Publish gate validates against per-format spec.

### Formats — Phase 2 (live in prototype)

| Format | Display name | File / endpoint | Schema / spec | Required IDs | Delivery |
|---|---|---|---|---|---|
| `xmltv` | **XMLTV 1.3** | `epg.xml` | XMLTV DTD 1.3 | tms_id preferred · imdb_id fallback | publish-on-event → S3 / CDN |
| `roku-dpf` | **Roku Direct Publisher Feed** | `roku_dpf_<date>.json` | Roku DPF JSON v3 schema | imdb_id required · tms_id optional · 16:9 hero ≥ 1280×720 | SFTP daily → `dpf.roku.com/<partner>/` |
| `samsung-tvplus` | **Samsung TV Plus daily report** | `samsung_<date>.xml` + sidecar art | Samsung TV+ Programming Spec v3.2 | tms_id required · EPG horizon ≥ 7d | SFTP daily 09:00 UTC → `ssp.samsungtvplus.com/<partner>/` |
| `json-channel` | **JSON channel** | `channel.json` | Ingenee canonical v1 | EIDR + imdb_id + house_id | publish-on-event → operator S3 |
| `json-shelves` | **JSON shelves** | `shelves.json` | Ingenee canonical v1 | EIDR + tmdb_id | publish-on-event → operator S3 |
| `zip-carriage` | **ZIP carriage bundle** | `<channel>_<date>.zip` | XMLTV + JSON + assets manifest + sidecar | union of all | publish-on-event → S3 |
| `csv-titles` | **CSV titles export** | `titles_<scope>.csv` | RFC 4180 + Ingenee column set | all available | one-off download |
| `xlsx-titles-windows` | **XLSX titles + windows** | `titles_<scope>.xlsx` | Excel 2016 + Avails-shaped columns | all available + window cols | one-off download |
| `schema-org-jsonld` | **Schema.org JSON-LD** | `catalog.jsonld` | Schema.org / TVSeries / Movie | imdb_id + tmdb_id + eidr | publish-on-event → operator CDN |
| `jw-player-feed` | **JW Player Studio feed** | `jw_feed.json` | JW Player Studio MediaFeed v1 | jw_media_id (per JW account) + tmdb_id | publish-on-event → JW endpoint |
| `pluto-tv` | **Pluto TV programmer feed** | `pluto_<channel>.xml` | Pluto TV channel spec v2 | tms_id + eidr + 16:9 art | SFTP weekly → `ssp.pluto.tv/<partner>/` |
| `mrss-outbound` | **MRSS 2.0 outbound** | `feed.xml` | Yahoo MRSS 2.0 + media:content | imdb_id minimum | publish-on-event → operator CDN |

### Formats — Phase 3 (cards shown disabled in prototype)

| Format | Display name | Spec | Notes |
|---|---|---|---|
| `amagi-cloudport` | **Amagi Cloudport** | Amagi REST API + asset push | Bidirectional · paired with playout per D-9 |
| `amagi-thunderstorm` | **Amagi THUNDERSTORM** | Amagi reports API | As-run + ratings receive |
| `wurl-distribution` | **Wurl** | Wurl distributor API | Distribution + reports |
| `frequency-feed` | **Frequency** | Frequency channel API | Distribution + reports |
| `lg-channels` | **LG Channels** | LG partner XML template | Partner-supplied template |
| `vizio-watchfree` | **Vizio WatchFree+** | Vizio partner template | CSV via SFTP weekly |
| `xumo` | **Xumo** | Xumo partner JSON | partner JSON over SFTP |
| `tubi` | **Tubi (Fox)** | Tubi programmer dashboard CSV | CSV via portal |
| `amazon-freevee` | **Amazon Fire TV / Freevee** | Amazon partner JSON | Partner reports |
| `plex` | **Plex** | Plex partner XML + JSON | Partner reports |
| `tvanytime` | **TVAnytime** | ETSI TVAnytime spec | Rich EPG for distributors that require it |
| `scte-224` | **SCTE-224** | SCTE-224 Event Scheduling & Notification | Inter-system program-event metadata |
| `movielabs-cmm-out` | **MovieLabs Common Metadata XML** | MovieLabs CMM 2.6 | Studio-grade outbound (mirrors inbound) |
| `ema-avails-out` | **EMA Avails XLSX** | EMA Avails 1.7 | Industry rights outbound |
| `cablelabs-adi` | **SMPTE 2021 ADI 3.0 (CableLabs)** | CableLabs Asset Distribution Interface | Cable VOD operators |

### Distributors active in MidwestStream

| Distributor | Format adapter | Channels assigned | Last activity |
|---|---|---|---|
| Roku DPF | `roku-dpf` | COMEDY-24x7 · ACTION-24x7 · COZY-FILMS | 12m · ⚐ rejected (4 missing 16:9 hero) |
| Samsung TV+ | `samsung-tvplus` | CRIME-EU · COMEDY-EU | 4d · ✓ ack |
| XMLTV public feed | `xmltv` | all 5 channels | 12m · ✓ live · `cdn.midweststream.tv/epg.xml` |
| JSON channel | `json-channel` | all 5 channels | 2h · ✓ live · `s3://midwest-cdn/` |
| JSON shelves | `json-shelves` | Home storefront · Action zone | 2h · ✓ live |
| Schema.org JSON-LD | `schema-org-jsonld` | all 5 channels + Home | 12m · ✓ live |
| ZIP carriage bundle | `zip-carriage` | (not in use) | — |
| JW Player Studio | `jw-player-feed` | Home storefront | 4h · ✓ live |
| MRSS outbound | `mrss-outbound` | (not in use — operator CDN handles MRSS) | — |
| Pluto TV | `pluto-tv` | (deferred — Phase 3) | — |

---

## Distributor rejections · 3 open

| Distributor | Surface | When | Reason |
|---|---|---|---|
| Roku DPF | COMEDY-24x7 | 14:42 | ROKU.DPF.MISSING_HERO_16x9 · 4 titles (Night Shift #812, Lagos Nights #828, The Slow Burn #841, Frozen Lake #862) |
| Roku DPF | ACTION-24x7 | 09:01 | hero too small (< 1280×720) on 1 title |
| Samsung TV+ | CRIME-EU | 09:00 | EPG horizon < 7d minimum |

---

## Analytics sources connected by MidwestStream

| Source | State | Mode | Events 7d |
|---|---|---|---|
| Mux Data | ● Connected | webhook (real-time) | 14,210 · 3 unresolved |
| Roku DPF reports | ● Connected | SFTP daily 07:00 UTC | last 4d |
| Operator CSV ad revenue | ● Connected | manual upload | 4 uploads |
| Conviva | ○ Not connected | — | — |
| Samsung TV+ reports | ○ Not connected | — | — |
| CloudFront / CMCD | ○ Not connected | — | — |
| GA4 server-side | ○ Not connected | — | — |
| Adobe Streaming Media | ○ Not connected | — | — |
| Google Ad Manager | ○ Not connected | — | — |

---

## ROI baselines (MidwestStream)

- Hourly cost: $90 / hour
- VOD curate: 25 min / shelf
- VOD execute: 10 min / refresh
- FAST week build: 100 min / week-build
- Auto Tag: 90 min / 25 titles batch
- Currency: USD · Region: North America

**Last 7 days:** Time saved 42h 14m · Money saved $3,805 · Avg health 78 → 81 ▲

---

## Plans catalog

| Plan | $ / mo | Titles | AI calls | Members | Channels | Storefronts |
|---|---|---|---|---|---|---|
| Trial | $0 | 5,000 | 5k | 3 | 1 | 1 |
| Pro | $499 | 50,000 | 50k | 15 | 10 | 5 |
| Business | $1,499 | 200,000 | 200k | 50 | 25 | 20 |
| Enterprise | custom | ∞ | ∞ | ∞ | ∞ | ∞ |

---

## Filter dropdown option sets

Canonical sets used by `.pickr` filter buttons across pages — wired via `data-filter-options`.

| Filter | Options |
|---|---|
| Title status | Approved · Enriched · Review · Scheduled · ON AIR · Expired · Stuck · Inactive · Draft |
| Confidence | High (≥ 0.90) · Mid (0.70–0.90) · Low (< 0.70) · No match |
| Genre | Crime drama · Drama · Thriller · Romance · Family comedy · Light comedy · Documentary · Music Video · Promo · Animated · Action · Mood theme |
| In rotation | Yes · No |
| Rights status | Active · Expiring soon · Expired · Unknown · Override active · Global |
| Scope | FAST · AVOD · SVOD · TVOD · all |
| Territory | US · CA · MX · UK · DE · FR · IT · ES · BR · AU · NZ · IN · ZA · WW |
| Catalog source | CSV · Brightcove · VHX · MRSS · Cleeng · Zype · Uscreen · MovieLabs CMM · MovieLabs Avails · Schema.org JSON-LD · Gracenote |
| Catalog state | Active · Review · Ingesting · Issues · Paused · Trash |
| Channel archetype | Movie · TV-Series · Music-Video · Mixed |
| Channel state | ON AIR · Building · Below min EPG · Issues · Paused · Off air |
| Storefront state | Published · Draft · Generating · Endpoint rejected · Paused |
| Distributor | Roku DPF · Samsung TV+ · XMLTV public · JSON channel · ZIP carriage · LG Channels · Vizio WatchFree+ · Pluto TV · Xumo · Tubi · Fire TV · Plex |
| Org state (admin) | Active · Trial · Past-due · Suspended · Paused · Canceled |
| Plan | Trial · Pro · Business · Enterprise |
| Event actor | Operator · Auto · PLATFORM-ADMIN |
| Event type | catalog.* · title.* · rail.* · storefront.* · channel.* · schedule.* · rights.* · analytics.* · org.* · roi.* |
| Saved-view scope | All · Mine · Org shared |
| Last activity | Last 24h · Last 7d · Last 30d · Last 90d · All time |

---

## "In rotation" taxonomy — what it means + the kinds

A title is **in rotation** when it's referenced by at least one operator-facing programming surface. There are **four distinct kinds of rotation**, and a title can be in multiple kinds simultaneously.

### 1. FAST channel rotation (the term's origin — broadcast / music-television)

A title placed in a FAST channel's schedule belongs to one of four **rotation tiers**, set per-channel:

| Tier | Per-channel cap | Use case | Example |
|---|---|---|---|
| **Heavy** | once every **4 days** | High-recognition hooks — the tentpoles | "Heat" on COMEDY-24x7 |
| **Medium** | once every **7 days** | Strong-but-not-flagship | "Mosaic of Years" on COMEDY-24x7 |
| **Light** | once every **14 days** | Discovery / depth | "Honest Lies" on ACTION-24x7 |
| **Catalog** | once every **30 days** | Deep filler · overnight · low daypart | "Old Sketches" on COZY-FILMS |

A title can be in different tiers on different channels (e.g. "Heat" Heavy on COMEDY-24x7, Medium on ACTION-24x7).

### 2. VOD shelf rotation

A title placed on a published VOD storefront shelf. The shelf's **refresh policy** (Light · Moderate · Aggressive) controls how often title order changes within the shelf. A title is "in VOD rotation" if it appears on at least one published shelf.

### 3. Promoted rotation

A title that has an active **promotion** elevating it above normal rotation rules:

| Promo kind | Effect |
|---|---|
| **FEATURE** | Primetime hook position N times per window |
| **STUNT** | One-time block (movie marathon, premiere) |
| **BOOST** | Increases rotation tier weight; nudges more airings |
| **QUEUED** | Soft preference for next regen |

### 4. Music-video rotation (Music-Video archetype channels only)

The classic radio/TV music-rotation model with finer tiers:

| Tier | Plays / day | Use case |
|---|---|---|
| **Heavy** | up to 14×/day | A-list current hits |
| **Medium** | 6–10×/day | B-list current + recent classics |
| **Light** | 2–5×/day | Cs + deeper cuts |
| **Recurrent** | 1–2×/day | Past hits in graceful decline |
| **Catalog** | rare · filler | Deep library |

### Canonical rotation state per title (MidwestStream)

| Title | FAST tier | FAST channel | VOD shelves | Promo | Status |
|---|---|---|---|---|---|
| **Heat** | Heavy | COMEDY-24x7 + ACTION-24x7 | Friday Night Crime · 90s Nostalgia · Hidden Gems | FEATURE (15–21 Jun) | In rotation (4 kinds) |
| **Night Shift** | Heavy | COMEDY-24x7 | Friday Night Crime · Hidden Gems · New & recent | — | In rotation (FAST + VOD) |
| **Lagos Nights** | Medium | COZY-FILMS | Hidden Gems · International discoveries | BOOST (13–20 Jun) | In rotation (3 kinds) |
| **Quiet Storm** | Light | COZY-FILMS | New & recent · Comfort Watch | — | In rotation (FAST + VOD) |
| **The Slow Burn** | — | — | Hidden Gems | — | VOD-only · stuck identity |
| **The Lake House** | Catalog | COZY-FILMS | Romance for Quiet Sundays | — | In rotation (FAST + VOD) |
| **Mosaic of Years** | Medium | COZY-FILMS | (none) | — | FAST-only |
| **Easy Sunday** | Light | COZY-FILMS · COMEDY-24x7 | Family Comedies · Comfort Watch | — | In rotation (FAST + VOD) |
| **Casino** | Heavy | ACTION-24x7 | 90s Nostalgia · Hidden Gems | — | In rotation (FAST + VOD) |
| **The Insider** | Medium | ACTION-24x7 | (none) | — | FAST-only |
| **Sunday Brunch** | Light | COZY-FILMS | Family Comedies | — | In rotation (FAST + VOD) |
| **Cousins, Etc.** | — | — | Family Comedies | — | VOD-only |
| **Found Family** | Light | COZY-FILMS | Hidden Gems | — | In rotation (FAST + VOD) |
| **Honest Lies** | Light | ACTION-24x7 · COMEDY-24x7 | Audience: Mature | — | In rotation (FAST + VOD) |
| **After the Storm** | Catalog | COZY-FILMS | (none) | — | FAST-only |
| **Old Sketches** | Catalog | COZY-FILMS | Documentary picks | — | In rotation (FAST + VOD) |
| **Underwater** | Catalog | ACTION-24x7 | (none) | — | FAST-only |
| **Two Years Later** | — | — | Audience: Mature | — | VOD-only |
| **A Quiet Year** | Catalog | COZY-FILMS | (none) | — | FAST-only |
| **Frozen Lake** | (was Light) | (was COZY-FILMS — pulled) | (was Hidden Gems — pulled) | — | **Off rotation · rights lapsed** |
| **Q1 promo Heat** | — | — | (none) | — | Off rotation · rights lapsed |

### "In rotation" filter options (used across the prototype)

`Heavy rotation` · `Medium rotation` · `Light rotation` · `Catalog rotation` · `VOD shelves only` · `Promotion active` · `Off rotation`

---

## Naming conventions

- **Org slugs**: lowercase, no separators (`midweststream`)
- **Channel slugs**: ALLCAPS-WITH-DASHES (`COMEDY-24x7`)
- **Storefront slugs**: lowercase-dashes (`home`)
- **Title IDs**: 3-letter prefix + 3-digit number (`tt812`)
- **Event ULIDs**: 26-char Crockford Base32 (`01J9XK7M4QH8V4P0AYMNRG3Z7M`)
- **House IDs**: org prefix + 5-digit (`MWS-12892`)

## Today's "now" anchor

The prototype simulates **today = 2026-06-13 14:42 UTC**. All "X minutes/hours ago" timestamps are relative to this moment. All upcoming dates are after this. Trial expiries and rights windows reference this anchor.
