Skip to main content

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 catalogs
  • types: Added "movie" to specify what content types we support
  • catalogs: New array describing our catalogs

Catalog description:

  • id: Unique identifier for this catalog within your add-on
  • type: Must match one of the types in your types array
  • name: 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 see
  • poster: 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 collections
  • collection: Static lists that rarely change
  • index: Main source for metadata and search
  • recommendation: 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 id field in your manifest's genres array
  • Users can filter catalogs by these genres for better content discovery
  • Catalogs with genreIds can 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

  1. Update your manifest with the new catalog information
  2. Create the catalog file with your movie data
  3. Reinstall your add-on in EMET Surf (paste the manifest URL again)
  4. 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!