When a video with overlay-eligible metadata starts playing, FieldStation42 spawns an overlay process that draws the metadata in the lower-left corner. By default that is white text with a black outline and no background box.

The metadata itself comes from NFO sidecar files, which is where the file formats and placement rules live. This page covers what gets drawn, when it appears, and how to restyle it.

What Gets an Overlay

Only two of the NFO types draw an overlay:

NFO type Draws an overlay
Music video (<musicvideo>) Yes
Plain text Yes
Movie, episode, anything else No

The other types are still parsed and cached. Their metadata feeds the program guide and the Pay-Per-View listing instead.

Audio files get a separate now-playing overlay with its own look, driven by embedded tags rather than a sidecar. That one is covered in Recipe 8 of the Channel Recipes guide.

Fields and Display Order

For a music video NFO, the overlay draws these fields in order:

Field Display Line Notes
artist 1 (large, bold)
title 2
album 3
year 4 Falls back to the <premiered> year if absent

Missing and empty fields are skipped rather than drawn blank, so a music video with no album listed closes the gap and draws the year on line 3.

For a plain text NFO the lines are drawn as written, up to 5 of them. Either way the first line gets the large bold treatment and the rest use the body style.

Overlay Timing

Condition Behaviour
play_duration > 20s Show for first 10s, hide, show again for last 10s
play_duration ≤ 20s Show for full duration
PPV / looping playback Show permanently

The 10-second default is defined by DEFAULT_SHOW_SECONDS in fs42/nfo_agent.py.

When you tune into a channel partway through a clip, the timing works from the runtime that is actually left, not the full length of the file, so the closing appearance still lands at the end of the clip.

Configuration

All overlay appearance settings are controlled by an overlay_conf object in main_config.json. Every field is optional -- defaults are used for anything you omit.

{
  "overlay_conf": {
    "overlay_type": "normal",
    "overlay_effect": "outline",
    "overlay_offset_px": 2,
    "overlay_font_path": null,
    "overlay_text_color": [255, 255, 255, 255],
    "overlay_shadow_color": [0, 0, 0, 255],
    "overlay_title_size": 30,
    "overlay_body_size": 20,
    "overlay_title_weight": "bold",
    "overlay_body_weight": "normal",
    "overlay_fade_duration_ms": 600
  }
}

Display Type

overlay_type controls how much information is shown:

Value Lines Displayed
"normal" (default) Every line available
"minimal" The first two lines only

For a music video, "minimal" means artist and title. For a plain text NFO it means the first two lines of the file.

Visual Effect

overlay_effect controls the text rendering style:

Value Description
"outline" (default) Text with a solid outline
"drop_shadow" Graduated shadow built from layered offset copies

overlay_offset_px sets the pixel distance for the outline or shadow (default: 2).

Font

overlay_font_path accepts an absolute path to a TrueType (.ttf) font file. If omitted or the file is not found, Arial is used as a fallback.

Colors

Colors are RGBA arrays with values 0--255:

Field Default Description
overlay_text_color [255, 255, 255, 255] Main text color
overlay_shadow_color [0, 0, 0, 255] Outline or shadow color

Text Size and Weight

Field Default Description
overlay_title_size 30 Font size in pixels for the first line
overlay_body_size 20 Font size in pixels for the remaining lines
overlay_title_weight "bold" "bold" or "normal"
overlay_body_weight "normal" "bold" or "normal"

Sizes are given for a 1080p display and scale with screen height, so the overlay stays proportional on other resolutions.

Fade Animation

overlay_fade_duration_ms sets the fade-in and fade-out duration in milliseconds when the overlay appears and disappears (default: 600).

Commercials and Channel Changes

The overlay is cleared when:

  • A commercial or bump starts playing
  • The channel is changed
  • The next video starts, whether or not it has an NFO of its own. The old overlay always closes before a new one opens.

See Also

  • NFO Sidecar Metadata - file formats, placement, and the NFO types that do not draw an overlay
  • Pay-Per-View - PPV also reads NFO files for movie metadata
  • fs42/nfo_agent.py - NFO parsing and overlay rendering