Library → Catalogs → New catalog
New catalog
Bring many titles in at once · 3 steps · resumable
1Pick source
2Map fields
3Confirm & start
1
Pick source
✓ indie-q1-2026.csv · 4,000 rowsindie-q1-2026.csv · 28.4 MB · 4,000 rows · 14 columns · UTF-8 · ✓ headers detected
Sample row:
"Night Shift",2024,"Two estranged brothers...",PG-13,tt12345678,…acme-avails-q2-2026.xlsx · 8.6 MB · 1,200 avail windows · MovieLabs EMA Avails 1.7 · ✓ schema match
Header detected:
DisplayName | ContentID | AltID | Territory | LicenseType | Start | End | …
Will create: 412 new titles · extend 88 existing rights · 1,200 rights-window records ·
Territories detected: US (612) · CA (218) · MX (164) · LATAM-multi (206)
Feed validated · 218 items · last server update 12m ago
Namespaces:
media: Yahoo MRSS 2.0 · dc: Dublin Core · itunes: iTunes · xyz: custom (3 elements)channels-uk-week-25.xmltv · 4.2 MB · XMLTV 1.3 · ✓ DTD valid
Detected: 14 channels · 2,940 programmes · 7-day window (2026-06-15 → 2026-06-21)
Mode:
One ID per line. We'll detect the type and fetch canonical metadata from the right provider.
10 lines · 0 blanks · 0 invalid
imdb · 5
tmdb · 2
tms · 1
eidr · 1
unknown · 1
Connected · last sync 14m ago · 8,420 assets indexed · manage credentials
2
Map fields
11 of 14 columns auto-matched · 3 need attentionAvails columns are pre-mapped by MovieLabs schema. One row = one rights window. We'll create / extend rights records as well as titles.
Rights creation policy
Map each XML namespace + element to an Ingenee field. The feed will be re-polled on a cron; new items become titles, missing items follow your removal policy.
Map each XMLTV channel id to an Ingenee channel. Programmes become titles + airings on the mapped channel.
Programme field mapping
XMLTV element → Ingenee fieldprogramme/title → title.nameprogramme/sub-title → title.episode_nameprogramme/desc → editorial.synopsis_longprogramme/category → editorial.tagsprogramme/credits/actor → cast.actorsprogramme/rating/value → classifications.ratingprogramme/episode-num[@system="onscreen"] → identity.episode_codeprogramme/icon[@src] → artwork.posterprogramme/@start, @stop → airing.start, airing.endprogramme/@channel → airing.channel_idNo column mapping — each ID is resolved against its provider, then full canonical metadata + artwork are fetched.
5 unique titles · 5 dupes will merge to existing per the rule in Step 3 · all artwork + cast + synopsis will be pulled from the resolved provider.
Partner field paths are stable — saved mapping is reused on every sync. Custom fields can map to Ingenee external_ids.
Sync mode
3
Confirm & start
Shown in Library filters · Catalogs list
Used in provenance / "from catalog X"
Override per title later
Match on imdb_id → tmdb_id → house_id → title+year
When this Avails row overlaps an existing rights window
If subscribed, future Acme Avails arrive into
avails/acme/inboxFalls back to
ttl in feed if shorterPush-based ingest · fires the cron on demand
When an XMLTV airing collides with an existing channel schedule
5 of 10 pasted IDs already exist in your library
Partner pushes diffs · we apply
Rotate in Partner settings
Pre-flight
Run silently before ingest 3,992 rows look ingestable
6 rows missing required fields (rating, runtime) · will land in Review queue
2 rows have duplicate house_id · apply duplicate rule above
14 ID columns will cross-reference TMDB · IMDb · Gracenote
Ingenee AI will run themes · mood · keywords · audience-fit · embedding
4,000 rights records from window_start / window_end / territory
1,200 avail windows look valid
412 new titles will be created · 88 rights extensions on existing titles
14 rows overlap an existing rights window · apply policy above
3 ContentID values do not resolve to EIDR · will use AltID fallback
Territory coverage: US · CA · MX · LATAM-multi · all on the org rights map
Feed reachable · TLS 1.3 · last-modified honoured · ETag enabled
218 items in current snapshot · 0 schema errors
14 items missing
media:content[@url] · no playback url · will sit in Review queue AI synopsis backfill enabled for items without
description · 38 items Cron set: hourly · next poll in 14m
14 channels mapped · 2,940 programmes will become airings
412 unique titles will be created (rest are repeats of existing)
89 airing conflicts with Ingenee-scheduled slots · apply policy above
112 programmes have no
rating · will inherit channel-default pre-watershed cap XMLTV TZ
+0100 normalised to channel local time 5 unique titles will be ingested (5 dupes will merge)
All IDs resolved against TMDB · IMDb · Gracenote · EIDR registries
Full AI enrichment will run · themes · mood · embeddings · audience-fit
Artwork pulled from TMDB · 100% coverage
Brightcove auth refreshed · OAuth scope
video-cloud-graphql OK Selected collection has 412 videos · all have a master HLS
23 videos lack
custom_fields.imdb_id · will resolve identity via title+year fallback Webhook URL registered:
hooks.ingenee.../bc/8421 AI will fill missing synopsis · genre tags · for 38 partner items
What happens after Start ingest
- Parse + identity resolve — match each row to canonical title (TMDB · IMDb · TMS)
- Metadata enrichment — pull canonical fields, prefer your-row values
- Ingenee AI enrichment — themes, mood, keywords, audience-fit, embedding
- Artwork fallback chain — TMDB → Fanart → IMDb → AI synthesis
- Validation — rating gates, rights overlap, duplicate house_id
- Review queue — anything below confidence policy
ETA: ~14 minutes for 4,000 rows · resumable · you can leave the page.
- Parse Avails XLSX — one row → one rights window candidate
- Title resolution — match ContentID (EIDR) → AltID (TMS) → DisplayName+Year
- Create / extend titles — 412 new, 88 existing
- Write rights records — per territory · per licence-type · per window
- Overlap reconciliation — apply window policy
- Metadata enrichment — TMDB/IMDb for art + cast on the new 412 titles only
ETA: ~9 minutes for 1,200 windows · rights review queue opens automatically when done.
- Initial poll — pull current 218 items
- Identity resolve — match by
guid; fall back to title+year against TMDB - Metadata + artwork — feed values preferred · provider fills gaps
- Subscribe — register the hourly cron · honour
ETag+If-Modified-Since - On next poll — diff items by guid · apply add / update / remove
First sync ETA: ~3 minutes · ongoing polls run silently every hour.
- Parse XMLTV — extract channels + programmes
- Channel mapping — create new Ingenee channels where requested
- Title resolution — match programmes against library by title+year; create if new
- Airing creation — 2,940 schedule entries on mapped channels
- Conflict resolution — apply the policy above
- Channel EPG refresh — affected channels get their EPG re-published
ETA: ~6 minutes · EPG endpoints repaint on completion.
- Resolve each ID — provider lookup (TMDB · IMDb · TMS · EIDR)
- Deduplicate — merge cross-provider matches into a single title
- Full enrichment — canonical metadata + cast + artwork + AI themes
- Stamp into catalog — assigned to the catalog name above · rotation = Catalog
ETA: under 30 seconds for 10 IDs.
- Initial pull — fetch the full collection (412 videos) via Brightcove CMS API
- Identity resolve — use
custom_fields.imdb_idwhen present; title+year fallback otherwise - Map + ingest — apply the partner-field map above
- Register webhook — Brightcove pushes diffs as videos change
- Continuous sync — every webhook becomes an upsert / soft-delete
First pull ETA: ~5 minutes · then real-time on every partner change.