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!