Skip to main content
Battles Record integrates with Jellyfin to automatically update your media library when recordings complete.

Overview

When a recording finishes:
  1. File is moved to output directory
  2. NFO metadata file is created
  3. Jellyfin library scan is triggered
  4. Recording appears in Jellyfin

Setup

1

Configure Jellyfin Connection

Navigate to Settings → Integrations → Jellyfin
2

Enter Server URL

Your Jellyfin server address (e.g., http://localhost:8096 or https://jellyfin.example.com)
3

Add API Key

Create an API key in Jellyfin: Dashboard → API Keys → New
4

Select Library

Choose which Jellyfin library should receive recordings
5

Test Connection

Click Test to verify the connection works

Library Configuration

Jellyfin Library Type

Create a dedicated library for stream recordings:
1

Open Jellyfin Dashboard

Go to Dashboard → Libraries → Add Media Library
2

Select Type

Choose Shows or Mixed Content
3

Add Folder

Point to your Battles Record output directory
4

Configure Metadata

Disable internet metadata fetchers (recordings use local NFO files)
Using Shows type organizes recordings as episodes under each channel (series).

Folder Structure for Jellyfin

Enable Jellyfin-compatible folder structure in Battles Record:
{library_dir}/
└── {platform}/
    └── {channel}/
        ├── tvshow.nfo
        ├── poster.jpg
        ├── banner.jpg
        ├── logo.png
        ├── fanart.jpg
        ├── landscape.jpg
        └── Season XX/
            ├── season.nfo
            ├── poster.jpg
            ├── {channel} - S01E001 - {title}.mp4
            ├── {channel} - S01E001 - {title}.nfo
            └── {channel} - S01E001 - {title}-thumb.jpg
Recordings are organized as a TV show structure - platform and channel as the show, months as seasons (S01 = January, S12 = December), and individual recordings as episodes. Enable in Settings → Integrations → Jellyfin → Use Jellyfin Folder Structure.

NFO Metadata

Battles Record generates NFO files for each recording:

Episode NFO

<?xml version="1.0" encoding="UTF-8"?>
<episodedetails>
  <title>Valorant Ranked</title>
  <showtitle>Shroud</showtitle>
  <season>2026</season>
  <episode>0201</episode>
  <aired>2026-02-01</aired>
  <runtime>180</runtime>
  <plot>Recorded from Twitch on February 1, 2026. Category: Valorant</plot>
  <genre>Gaming</genre>
  <studio>Twitch</studio>
</episodedetails>

Series NFO

Created once per channel:
<?xml version="1.0" encoding="UTF-8"?>
<tvshow>
  <title>Shroud</title>
  <plot>Stream recordings from Twitch channel Shroud</plot>
  <genre>Gaming</genre>
  <studio>Twitch</studio>
</tvshow>

Artwork & Rich Image Generation

When enabled, Battles Record generates a full set of artwork for each channel using platform profile and banner images.

Color Palette Extraction

Dominant colors are extracted from the channel’s profile image using k-means clustering. A 5-color palette is derived automatically:
ColorUsage
PrimaryMain accent color for headers and titles
SecondarySupporting color for backgrounds
AccentHighlight color for badges and indicators
TextPrimary text color
Muted TextSecondary text and labels
All generated images use this palette for a cohesive look per channel. If image loading fails, a default dark zinc palette is used as fallback.

Show-Level Images

Generated once per channel:
ImageSizeDescription
poster.jpg680x1000Portrait poster with profile image, channel name, platform, and metadata
banner.jpg758x140Wide header with banner background, profile image, and channel name
logo.png800x310Horizontal logo with large channel name and platform text
fanart.jpg1920x1080Cinematic background with vignette overlay, profile image, and game category
landscape.jpg500x281Thumbnail card with diagonal gradient and profile image

Season-Level Images

Generated once per month:
ImageSizeDescription
poster.jpg680x1000Season poster with prominent date display (month, day, year) and episode count

Episode-Level Images

Generated per recording:
ImageSizeDescription
thumb.jpg3840x21604K thumbnail with stream screenshot background, title overlay, viewer count, game, duration, and episode number
All images use embedded JetBrains Mono (Regular and Bold), matching the application’s monospace design system.
Enable artwork generation in Settings → Integrations → Jellyfin → Download Artwork.

Library Refresh

Automatic Refresh

After each recording completes, Battles Record triggers a library scan:
MethodDescription
Full ScanScan entire library (slower, more thorough)
Folder ScanScan only the recording’s folder (faster)
Configure in Settings → Integrations → Jellyfin → Refresh Method.

Manual Refresh

Force a library refresh:
  • Click Refresh Library in Settings → Integrations → Jellyfin
  • Or use the API: POST /api/jellyfin/refresh

Naming Format

Customize how recordings appear in Jellyfin:

Season/Episode Numbering

FormatExampleDescription
MonthlyS01E001Seasons by month (S01 = January, S12 = December), sequential episodes
YearS2026E0201Year as season, date as episode
Date2026-02-01Date in filename (requires Jellyfin date parsing)

Title Format

FormatExample
Stream TitleValorant Ranked
Date + Title2026-02-01 - Valorant Ranked
Category + TitleValorant - Ranked

Multiple Jellyfin Servers

Configure multiple Jellyfin instances:
1

Add Server

Click Add Jellyfin Server in settings
2

Configure

Enter URL, API key, and library
3

Assign Channels

Choose which channels sync to which server

Troubleshooting

Recordings Don’t Appear

  1. Verify Jellyfin connection in settings
  2. Check API key has library write permissions
  3. Ensure output directory is accessible to Jellyfin
  4. Try manual library refresh

Wrong Metadata

  1. Check NFO file was created alongside video
  2. Verify Jellyfin is using local metadata (not internet scrapers)
  3. Delete .nfo and let Battles Record regenerate

Permission Errors

For Docker deployments, ensure user IDs match:
environment:
  - PUID=1000
  - PGID=1000
These should match your Jellyfin container’s user.

Duplicate Entries

If recordings appear twice:
  1. Disable duplicate metadata providers in Jellyfin
  2. Ensure only one folder structure format is enabled
  3. Run library scan with Replace all metadata option