VOD artwork and title logos

How the TV app reads and renders the catalogue's title logos, artwork and What's New fields. Reference for the Android, iOS and web app teams. Updated 23 October 2026 (evening).

Summary

The catalogue now carries, per show and per language, a transparent title logo (logoTitle), two landscape pictures (artwork.landscape with the logo burned in, artwork.landscape_no_logo without it), and, on What's New items, the show's cover (seriesImage) and a hasTrailer flag. The TV app uses them as follows:

API fields

Base: https://apps-api.ipt.to. Catalogue calls send locale and no session id.

EndpointFields used
GET /v2/vod/categories/main?locale=he|enRoot tabs (series, movies, telenovelas, docu, kids).
GET /v2/vod/categories/{id}/list?locale=&page=&size= results.items[] (child categories = shows): logoTitle, artwork.landscape, artwork.landscape_no_logo, artwork.portrait, showpic, hasTrailer, name, genre, year, description.
results.category (the requested show itself): the same fields, used by the series page.
GET /v2/vod/categories/{id}/vods?locale=&page=&size=Movies and episodes: showpic, hasTrailer, logoTitle when present. Movie items carry artwork too (same landscape / landscape_no_logo pair) where the catalogue has it. On 23 Oct 2026 the movies root list already has it; many sub-category movies still have artwork: null, and the app falls back to showpic for both card and hero on those.
GET /v2/vod/categories/{mainId}/vods/new?locale=&upper=1&size=25What's New. Each item has vod, category (the season) and upper[] (main → broadcaster → show → season, ids and names). On vod: seriesImage, logoTitle, hasTrailer, showpic (episode frame), type (episode or vod).
GET /v2/play/trailer/{series|movie}/{id}?sid=Trailer stream. Needs a session. Answer: { error: 0, streams: [url, …] }; play streams[0].

Field reference

FieldValueUse
logoTitleAbsolute URL of a transparent PNG, or nullTitle logo in the hero's title slot
artwork.landscapeAbsolute URL (JPG) or nullCard picture (logo burned in)
artwork.landscape_no_logoAbsolute URL or nullHero background behind the focused item; series page background
artwork.portraitAbsolute URL or nullNot used by the TV app yet
showpicProtocol-relative URL (//images.peer5.net/…)Fallback for card and hero; the episode frame in What's New
seriesImageAbsolute URLWhat's New episode card (the show's cover)
hasTrailertrue / falseWhether to request a trailer at all
URL normalisation: a value starting with // gets https: in front; a value starting with http is used as is; anything else is appended to the API base. Card copies are resized by the CDN with ?s=480 (poster and programme paths only); hero and logo images are loaded at full size.

Language

The API localises logoTitle. With locale=he it returns the Hebrew logo; with locale=en it returns the English logo only when one exists, otherwise null. The apps therefore never choose a logo themselves: request the catalogue in the UI's language and use what comes back. A Hebrew logo must not appear in the English UI; when logoTitle is null, show the text title.

Any cache of catalogue data that includes logos must be keyed by language as well as by id.

Card and hero images

The rule in words, and it is the same for series and movies alike (and for telenovelas, docu and kids, which are series or movies underneath): every title has two landscape pictures. The one with the logo burned in (artwork.landscape) is for the card in a row, where there is no room for a separate title. The one without the logo (artwork.landscape_no_logo) is for the hero behind the focused show and for the series page background, because there the title is drawn separately, as the logoTitle image or as text, and a second logo inside the picture would double it.

Fallbacks, in order, when a field is missing or null:

  1. Card: artwork.landscape → showpic (the picture the catalogue always had).
  2. Hero: artwork.landscape_no_logo → artwork.landscape → showpic. A show without the clean picture simply shows its card picture in the hero, as before.
  3. Title: logoTitle → the text title in the logo style (see Text fallback).

Nothing is left empty: the pre-existing showpic is always the last fallback for both pictures, so a show with none of the new fields looks exactly as it did before.

ItemCardHero / background
Series (category item)artwork.landscape, else showpicartwork.landscape_no_logo, else the card picture
Movie (vod item)artwork.landscape, else showpicartwork.landscape_no_logo, else the card picture
What's New episodeseriesImage (the show's cover), else the episode showpicThe episode showpic (episode frame)
What's New movieshowpicshowpic
Series page background—category.artwork.landscape_no_logo, else category.showpic

Test title for the movie type

A movie that has the full set on production (apps-api.ipt.to): logoTitle in Hebrew (767 × 439) and in English (800 × 202), artwork.landscape (logo burned in) and artwork.landscape_no_logo, plus hasTrailer: true.

  • Tab: ילדים (Kids, id 8889284) → category סרטי אנימציה בדיבוב עברי (id 189; English name "Animated films in Hebrew dubbing")
  • Movie: החתול בעל 10 הנשמות ("10 Lives", 2024), vod id 159260
  • Expected in both languages: the card shows the picture with the logo; the hero behind it shows the clean picture with the logo of the UI language drawn in the title slot (Hebrew logo in Hebrew, "10 Lives" logo in English). Two different logo shapes on one title, so it also checks the sizing formula.
  • Test against production. On api-dev this movie still returns landscape_no_logo: null and no English logoTitle, so there you would only see the fallbacks.

What's New row

Title slot

The hero reserves a fixed box at the top for the title, so the rows below start at the same height for every show, whatever the logo's shape.

PropertyValue (fraction of screen)At 1920 × 1080
Box height16.2 % of screen height175 px
Box top1.4 % of screen height from the top of the hero area15 px
Box widthHero text width, 36.5 % of screen width700 px
AlignmentContents at the bottom of the box, on the start side (left in LTR, right in RTL)—
Headroom under the logo1.6 % of screen height between the logo (or text title) and the next row, the same gap the text blocks keep17 px
Below the boxEpisode title (What's New only), genre | year, description, duration (99 minutes) as the last line—
Description linesSeries and Movies pages: 4 lines (What's New rows included). Telenovelas, Docu and Kids: 3 lines. Then an ellipsis.—
Text leading (TV)Description line height 1.85 % of screen width (font size unchanged, 1.5 %); the What's New episode title 2.2 % / 2.6 % of screen width. These keep four description lines plus the duration above the first row.36 px / 42 · 50 px
Logo shadowdrop-shadow(0 0.2vh 0.6vh rgba(0,0,0,0.6))—

Logo sizing formula

The logos come in every shape, from portrait 0.44:1 to 13:1. Scaling them to fit a box makes wide logos enormous and tall ones tiny, so each logo is sized by its visual area and then capped. All lengths below are fractions of the screen width W, which keeps the result identical on every 16:9 screen.

// natural size of the PNG: naturalW × naturalH
r = naturalW / naturalH                // aspect ratio (default 2 when unknown)

AREA  = 0.0114 · W²                    // target visual area  (42 000 px² at 1920)
H_MAX = 0.082 · W                      // tallest allowed     (157 px at 1920)
W_MAX = 0.29  · W                      // widest allowed      (557 px at 1920)
H_MIN = 0.049 · W                      // shortest, if width allows (94 px at 1920)

h = sqrt(AREA / r)
h = min(h, H_MAX, W_MAX / r)           // caps
h = max(h, min(H_MIN, W_MAX / r))      // floor, unless the width cap forbids it
w = h · r

render the PNG at w × h (object-fit: contain), anchored bottom / start of the slot

Results at 1920 × 1080, measured over the catalogue:

Logo shapeExampleRendered size
Portrait (0.6:1)אתה חייב לקרוא את זה94 × 157 px
Square (1:1)המטבח המנצח157 × 157 px
Wide (2–3:1)דה וויס, הכוורת285–350 × 120–147 px
Very wide (3.5–6:1)ערב טוב עם גיא פינס385–400 × 100–110 px
The artwork files contain a transparent margin around the logo (typically 10–20 % of the file). The formula works on the file's size, so a file with a wide margin renders slightly smaller than one trimmed to the logo. Trimmed PNGs give the most even result.

Text fallback (no logo)

When logoTitle is null the title is set as text in the same slot. Keep the font and size your app already uses for the title — there is no need to change them. The only requirements are that the text sits in the title slot (bottom of the box, start side, same headroom) and keeps the fallback image rules above.

For reference only, this is how the trial build styles it (not required):

PropertyValue
FontRubik Bold (covers Hebrew and Latin), fallback Noto Sans Hebrew / Roboto Bold
SizeOn the TV layout the app's existing hero title scale applies (2.4 % of screen width, line height 3 %, 46 / 58 px at 1920), up to 3 lines
CaseUppercase for Latin text (no effect on Hebrew)
Weight effectsText stroke 0.05 % of screen width, shadow 0 0.3vh 0.9vh rgba(0,0,0,.75) + 0 0 2vh rgba(0,0,0,.35)
LinesUp to 3 across the full hero width, then an ellipsis

Trailers

Series page

The page a show opens to (season list on the start side, episode list in the middle). What changed:

See the two series page pictures in Screenshots: the page as opened and the dialog.

Screenshots

Reference captures from the TV build at 1920 × 1080, Hebrew UI, taken on 23 October 2026. Click a picture for the full size. They show how each case should look; the exact shows change with the catalogue.

Series page (2 pictures)

Series page as opened: title logo and genre | year in the top start corner, aligned with the season list; header buttons info · favourite · sort
Series page as opened: title logo and genre | year in the top start corner, aligned with the season list; header buttons info · favourite · sort
Series page after pressing the info button: the About-the-series dialog with the logo, genre | year, description and the centred Close button
Series page after pressing the info button: the About-the-series dialog with the logo, genre | year, description and the centred Close button

Series landing - What's New row

What's New row, focused on an episode of <b>new-1-אסנהיים</b>: episode title under the logo, no genre | year line, duration last
What's New row, focused on an episode of new-1-אסנהיים: episode title under the logo, no genre | year line, duration last
What's New row, focused on an episode of <b>new-2-הבריחה</b>: episode title under the logo, no genre | year line, duration last
What's New row, focused on an episode of new-2-הבריחה: episode title under the logo, no genre | year line, duration last

Series landing - broadcaster rows (the logo sized by the area formula, whatever its shape)

קשת 12 row, focused on <b>בזמן שעבדתם</b>
קשת 12 row, focused on בזמן שעבדתם
קשת 12 row, focused on <b>הבריחה</b>
קשת 12 row, focused on הבריחה
רשת 13 row, focused on <b>אסנהיים</b>
רשת 13 row, focused on אסנהיים
רשת 13 row, focused on <b>מוריה וברקו</b>
רשת 13 row, focused on מוריה וברקו
כאן 11 row, focused on <b>דאבל על הכסף</b>
כאן 11 row, focused on דאבל על הכסף
כאן 11 row, focused on <b>מה שתגידו</b>
כאן 11 row, focused on מה שתגידו
סדרות HOT row, focused on <b>השמועה</b>
סדרות HOT row, focused on השמועה
סדרות HOT row, focused on <b>מחוברים</b>
סדרות HOT row, focused on מחוברים
סדרות yes row, focused on <b>בודקת</b>
סדרות yes row, focused on בודקת
סדרות yes row, focused on <b>פאודה</b>
סדרות yes row, focused on פאודה

Four description lines (Series and Movies pages)

Series landing, a regular show with a four-line description
Series landing, a regular show with a four-line description
Series landing, a What's New episode with a four-line description and the duration line
Series landing, a What's New episode with a four-line description and the duration line
Movies landing, What's New row: logo, genre | year, four description lines, duration
Movies landing, What's New row: logo, genre | year, four description lines, duration
Movies landing, a catalogue row: text title (no logo) in the title slot
Movies landing, a catalogue row: text title (no logo) in the title slot

Implementation checklist

Catalogue

Read logoTitle, artwork.*, hasTrailer on list items and on results.category. Request in the UI language. Cache per language.

Pictures

Card = artwork.landscape → showpic. Hero = artwork.landscape_no_logo → card picture.

What's New

Card = seriesImage; hero = episode frame; title = show name + episode name; logo = vod.logoTitle; no genre / year for episodes; trailer only if hasTrailer.

Title slot

Fixed box, contents bottom / start aligned; logo sized by the area formula with caps; text fallback in the logo style.