The catalog
Excellent! Your add-on is installed and working. Now it's time to make it actually useful by adding content. This step introduces catalogs - the heart of content discovery in EMET Surf.
A catalog is a collection of content organized by type. Think of it as a playlist or library - like "Action Movies," "Popular TV Shows," or "Documentaries." Users browse these catalogs to find content they want to watch.
Understanding content types
Before creating your catalog, you need to decide what types of content you'll provide. Each type is presented differently in the app:
movie - Individual films
- Each movie is a single item
- No episodes or seasons
- Streams are linked directly to the movie
series - TV shows and episodic content
- Organized into seasons and episodes
- Each episode is a separate video
- Perfect for TV shows, web series, etc.
tv - Live television
- Real-time streaming content
- No duration (live broadcasts)
- News, sports, live events
For this tutorial, we'll start with movies since they're the simplest.
Updating your manifest
To add a catalog, you need to tell EMET Surf about it in your manifest. Here's what to add:
{
"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"],
"types": ["movie"],
"catalogs": [
{"id": "movieCatalog", "type": "movie", "name": "Hello, Movies"}
]
}
What changed:
resources: Added"catalog"to tell EMET Surf this add-on provides catalogstypes: Added"movie"to specify what content types we supportcatalogs: New array describing our catalogs
Catalog description:
id: Unique identifier for this catalog within your add-ontype: Must match one of the types in yourtypesarrayname: What users will see as the catalog title
Creating your catalog structure
EMET Surf expects catalogs to be organized in a specific folder structure. Create these directories:
On Windows:
mkdir catalog
mkdir catalog\movie
On Mac/Linux:
mkdir -p catalog/movie
Your file structure should look like this:
my-emet-addon/
├── manifest.json
└── catalog/
└── movie/
└── movieCatalog.json
The filename movieCatalog.json must match the id you specified in your manifest.
Adding content to your catalog
Now create your catalog file with some sample movies:
{
"metas": [
{
"type": "movie",
"id": "tt0032138",
"name": "The Wizard of Oz",
"poster": "https://images.metahub.space/poster/medium/tt0032138/img",
"genres": ["Adventure", "Family", "Fantasy", "Musical"]
},
{
"type": "movie",
"id": "tt0017136",
"name": "Metropolis",
"poster": "https://images.metahub.space/poster/medium/tt0017136/img",
"genres": ["Drama", "Sci-Fi"]
}
]
}
Understanding the fields:
type: Must match your catalog type (movie)id: Unique identifier for this item (we're using IMDb IDs here)name: The title users will seeposter: URL to the movie's poster image (should be square, around 300×300 pixels)genres: Array of genres for filtering and organization
About IMDb IDs:
We're using IMDb IDs (like tt0032138) because EMET Surf has built-in metadata support for movies with valid IMDb IDs. This means you get detailed information (cast, plot, ratings) automatically.
External database IDs: You can also include external database identifiers to help connect your content with other add-ons and services:
{
"metas": [
{
"type": "movie",
"id": "tt0032138",
"name": "The Wizard of Oz",
"poster": "https://images.metahub.space/poster/medium/tt0032138/img",
"genres": ["Adventure", "Family", "Fantasy", "Musical"],
"imdb_id": "tt0032138",
"tmdb_id": "630"
}
]
}
Available external IDs:
imdb_id: IMDb identifier (e.g., "tt0032138")tmdb_id: The Movie Database identifier (e.g., "630")
Providing these IDs helps EMET Surf connect metadata between different add-ons and provides better content discovery and organization.
Advanced catalog features
EMET Surf supports several advanced catalog features to make your content more discoverable:
Catalog types
{
"catalogs": [
{
"id": "movieCatalog",
"type": "movie",
"name": "Hello, Movies",
"resource": "catalog" // default
},
{
"id": "recommendations",
"type": "movie",
"name": "Recommended",
"resource": "recommendation"
},
{
"id": "collections",
"type": "movie",
"name": "Collections",
"resource": "collection"
}
]
}
Catalog types:
catalog(default): Regular content collectionscollection: Static lists that rarely changeindex: Main source for metadata and searchrecommendation: Suggests related content
Localized names
{
"catalogs": [
{
"id": "movieCatalog",
"type": "movie",
"name": "Hello, Movies",
"localizedName": {
"en": "Hello, Movies",
"es": "Hola, Películas",
"ru": "Привет, Фильмы"
}
}
]
}
Advanced filtering
{
"extraSupported": ["genreMulti", "genreExclude", "releaseYear", "pagination"],
"catalogs": [
{
"id": "movieCatalog",
"type": "movie",
"name": "Hello, Movies",
"extraSupported": ["pagination"]
}
]
}
Genre-based filtering
You can specify which genres a catalog contains by adding a genreIds field. This allows EMET Surf to filter catalogs by genre and provide better content organization:
{
"catalogs": [
{
"id": "action-movies",
"type": "movie",
"name": "Action Movies",
"genreIds": [28, 12]
},
{
"id": "drama-series",
"type": "series",
"name": "Drama Series",
"genreIds": [18, 80]
}
]
}
Genre IDs:
genreIds: Array of numeric genre IDs that match the genres defined in your manifest- These IDs correspond to the
idfield in your manifest'sgenresarray - Users can filter catalogs by these genres for better content discovery
- Catalogs with
genreIdscan be automatically categorized and filtered
Example with manifest genres:
// manifest.json
{
"genres": [
{
"id": 28,
"localizedName": {
"en": "Action",
"es": "Acción",
"ru": "Боевик"
},
"name": "Action"
},
{
"id": 12,
"localizedName": {
"en": "Adventures",
"es": "Aventuras",
"ru": "Приключения"
},
"name": "Adventures"
}
],
"catalogs": [
{
"id": "action-adventure",
"type": "movie",
"name": "Action & Adventure",
"genreIds": [28, 12]
}
]
}
Testing your catalog
- Update your manifest with the new catalog information
- Create the catalog file with your movie data
- Reinstall your add-on in EMET Surf (paste the manifest URL again)
- Browse the app - you should see your "Hello, Movies" catalog!
Your catalog will appear in the main interface, showing the movie posters in a grid. Users can click on movies to see more details (which we'll add in the next step).
What you've accomplished
- Created your first content catalog
- Learned about different content types
- Understood the file structure for catalogs
- Added sample movies with proper metadata
- Discovered advanced catalog features
What's next?
Your add-on now shows content! But when users click on a movie, they'll see limited information. In the next step, we'll add detailed metadata - descriptions, cast information, ratings, and more.
Summary
- Catalogs are collections of content organized by type
- Update your manifest to declare catalog support
- Create the proper folder structure:
catalog/type/catalogId.json - Include essential fields:
type,id,name,poster,genres - Use IMDb IDs for automatic metadata support
- EMET Surf supports advanced features like recommendations and localization
- Your add-on now provides browseable content!