Playback
Segments & subtitles
Chapter marks become skip buttons. Subtitle streams become hosted sidecars. Players fetch both from a single manifest — no separate subtitle hunt.
- recap
- intro
- credits
- episode
One manifest
Segments and subtitles together
ffprobe reads chapter marks for skip buttons and subtitle streams for every language in the file. Clients get both from a single GET.
- ⏭
Segment timestamps
Recap, intro, credits, and preview blocks with start and end seconds — ready for skip buttons in Jellyfin and other clients.
- CC
Subtitle URLs
VTT and SRT sidecars per language, hosted and returned in the same manifest response as the segment list.
Previously on White Collar…
EN · WebVTT
Tidligere på White Collar…
DA · WebVTT
Tidigare på White Collar…
SV · WebVTT
Subtitle tracks
- ENWhite.Collar.S01E01.en.vtt
- DAWhite.Collar.S01E01.da.vtt
- SVWhite.Collar.S01E01.sv.vtt
The bar above is the stored data. The player below is what a client does with it — seek the timeline, skip colored blocks, and load subtitle tracks from the manifest.
White Collar
S01E01
- Recap
- Intro
- Credits
- Preview
- Episode
Segment types
Four kinds of skippable block
Only these parts are stored and returned. The main episode body is implied by the gaps between them.
- ▶
Intro
Opening titles and theme song
- ↺
Recap
"Previously on…" segments
- ■
Credits
End credits and cast rolls
- »
Preview
"Next time on…" teasers
Playback API
One manifest endpoint
Reading is open. Pass TMDB id, season, episode, and duration_ms. For proper sync, POST an English reference_subtitle (SRT or VTT) from the player — highly recommended.
Example requests
GET http://metadata.kilr.dk/manifest?tmdb=21510&season=1&episode=1&duration_ms=1384000
POST /manifest (multipart: tmdb, season, episode, duration_ms, reference_subtitle)
Bulk export: GET /dump (ODbL 1.0)
{
"segments": [
{ "type": "recap", "start_seconds": 0, "end_seconds": 52.1, "source": "ingest" },
{ "type": "intro", "start_seconds": 52.1, "end_seconds": 98.4, "source": "ingest" },
{ "type": "credits", "start_seconds": 1320.5, "end_seconds": 1384.0, "source": "ingest" }
],
"subtitles": [
{ "language": "en", "url": "https://…/White.Collar.S01E01.en.vtt" },
{ "language": "da", "url": "https://…/White.Collar.S01E01.da.vtt" }
]
}Integrations
Using it in players
Plain JSON over HTTP — anything that plays video can read the manifest.
Jellyfin
BuiltServer plugin using Jellyfin's IMediaSegmentProvider. Skip buttons appear in the web client after a media segment scan.
Stremio
PlannedAddon for manifest subtitle URLs. Skip buttons aren't part of the Stremio addon protocol today.
Pipeline
How playback data flows
- 1
Run the CLI on your library
Point ome at a file or folder. Only chapter and subtitle metadata reaches POST /ingest — video never leaves your machine.
- 2
We probe and match
ffprobe reads chapters and subtitle streams. Duplicates are skipped; shows are matched to TMDB on the server.
- 3
Your player asks
POST /manifest with TMDB id, season, episode, duration_ms, and an English reference subtitle (recommended) returns synced segments and subtitle URLs.
Contribute
Grow segment data from your library
Run the CLI against files with chapter marks. You need an API key from your account page.
ome --file ./White.Collar.S01E01.AMZN.mkv # watch a folder ome --watch ./library/
Filename must include show, season, episode, and provider — e.g. White.Collar.S01E01.AMZN.mkv.
- Reading is open. Uploading needs a bearer token from /account.
- There is a 60-second grace window on
duration_ms. Outside it, /manifest returns 404 rather than guess.