Series (TV shows with episodes)
Excellent! Your add-on now provides movies with full functionality. But what about TV shows? Let's expand your add-on to support series - content with multiple episodes organized into seasons.
The key difference between movies and series is that series have multiple videos (episodes) instead of just one. Each episode is a separate video that users can watch individually.
Understanding series structure
Movies vs Series:
- Movies: One video per item
- Series: Multiple episodes organized in seasons
Series organization:
- Series → Seasons → Episodes
- Each episode has its own stream
- Users can browse episodes and watch them individually
Updating your manifest
To support series, you need to add "series" to your types and create a series catalog:
{
"id": "my.first.emet.addon",
"version": "1.0.0",
"name": "Hello, World",
"description": "My first EMET Surf add-on",
"logo": "https://example.com/logo-256.png",
"resources": [
"catalog",
{
"name": "meta",
"types": ["movie", "series"],
"idPrefixes": ["hiwrld_"]
},
"stream"
],
"types": ["movie", "series"],
"catalogs": [
{"id": "movieCatalog", "type": "movie", "name": "Hello, Movies"},
{"id": "seriesCatalog", "type": "series", "name": "Hello, TV Shows"}
]
}
What changed:
- Added
"series"to bothtypesarrays - Added a new series catalog to the
catalogsarray
Creating the series catalog
First, create the directory structure for series:
On Windows:
mkdir catalog\series
On Mac/Linux:
mkdir -p catalog/series
Now create catalog/series/seriesCatalog.json:
{
"metas": [
{
"type": "series",
"id": "tt1748166",
"name": "Pioneer One",
"poster": "https://images.metahub.space/poster/medium/tt1748166/img",
"genres": ["Drama", "Sci-Fi"]
},
{
"type": "series",
"id": "hiwrld_tt0147753",
"name": "Captain Z-Ro",
"poster": "https://www.captain-z-ro.com/images/FLYER-PAGE-1_250.gif",
"genres": ["Sci-Fi", "Children", "Educational"]
}
]
}
Note: The catalog structure is identical to movies - only the type field differs.
Providing series metadata
For the first series (tt1748166), EMET Surf will automatically provide metadata since it has a valid IMDb ID.
For the second series (hiwrld_tt0147753), you need to provide custom metadata. Create the directory:
On Windows:
mkdir meta\series
On Mac/Linux:
mkdir -p meta/series
Create meta/series/hiwrld_tt0147753.json:
{
"meta": {
"id": "hiwrld_tt0147753",
"type": "series",
"name": "Captain Z-Ro",
"description": "From his secret laboratory, Captain Z-Ro and his associates use their time machine, the ZX-99, to learn from the past and plan for the future.",
"releaseInfo": "1955-1956",
"logo": "https://fanart.tv/fanart/tv/70358/hdtvlogo/captain-z-ro-530995d5e979d.png",
"imdbRating": 6.9,
"poster": "https://www.captain-z-ro.com/images/FLYER-PAGE-1_250.gif",
"background": "https://www.captain-z-ro.com/images/Captain-Z--R0_500.jpg",
"genres": ["Sci-Fi", "Children", "Educational"],
"runtime": "15 mins.",
"videos": [
{
"season": 1,
"episode": 1,
"id": "hiwrld_tt0147753:1:1",
"title": "Christopher Columbus",
"released": "1955-12-18"
},
{
"season": 1,
"episode": 2,
"id": "hiwrld_tt0147753:1:2",
"title": "Daniel Boone",
"released": "1955-12-25"
}
]
}
}
Key differences from movie metadata:
videosarray: Lists all episodes with their details- Episode structure:
season,episode,id,title,released - Episode IDs: Use format
seriesId:season:episode
Adding episode streams
Each episode needs its own stream file. Create the directory:
On Windows:
mkdir stream\series
On Mac/Linux:
mkdir -p stream/series
Episode 1 stream
Create stream/series/hiwrld_tt0147753:1:1.json:
{
"streams": [
{
"title": "Episode 1 - HD Quality",
"url": "https://example.com/captain-z-ro-episode-1.mp4"
}
]
}
Episode 2 stream
Create stream/series/hiwrld_tt0147753:1:2.json:
{
"streams": [
{
"title": "Episode 2 - HD Quality",
"url": "https://example.com/captain-z-ro-episode-2.mp4"
}
]
}
Important: The stream file names must match the episode IDs from the metadata (hiwrld_tt0147753:1:1, hiwrld_tt0147753:1:2).
Understanding the series structure
Your file structure should now look like:
my-emet-addon/
├── manifest.json
├── catalog/
│ ├── movie/
│ │ └── movieCatalog.json
│ └── series/
│ └── seriesCatalog.json
├── meta/
│ ├── movie/
│ │ └── hiwrld_jellyfish.json
│ └── series/
│ └── hiwrld_tt0147753.json
└── stream/
├── movie/
│ ├── tt0032138.json
│ ├── tt0017136.json
│ └── hiwrld_jellyfish.json
└── series/
├── hiwrld_tt0147753:1:1.json
└── hiwrld_tt0147753:1:2.json
Testing your series
- Update your manifest with series support
- Create the series catalog with TV shows
- Add series metadata with episode information
- Create episode streams for each episode
- Reinstall your add-on in EMET Surf
- Browse the series catalog - you should see TV shows!
- Click on a series - you should see episodes listed
- Click on an episode - you should see stream options
Advanced series features
Multiple seasons
{
"videos": [
{"season": 1, "episode": 1, "id": "seriesId:1:1", "title": "S01E01"},
{"season": 1, "episode": 2, "id": "seriesId:1:2", "title": "S01E02"},
{"season": 2, "episode": 1, "id": "seriesId:2:1", "title": "S02E01"}
]
}
Episode metadata
Each episode can have additional information:
released: When the episode airedoverview: Episode descriptionthumbnail: Episode-specific image
What you've accomplished
- Added series support to your add-on
- Created series catalogs with TV shows
- Provided detailed series metadata with episodes
- Added individual episode streams
- Understood the series vs movie structure
- Learned about episode ID formatting
What's next?
Your add-on now supports both movies and TV shows! In the next step, we'll add dynamic features like search, filtering, and pagination to make your content more discoverable.
Summary
- Series have multiple episodes organized in seasons
- Add
"series"to your manifest types - Create series catalogs and metadata
- Include
videosarray with episode information - Use episode IDs in format
seriesId:season:episode - Create individual stream files for each episode
- Your add-on now supports TV shows with multiple episodes!