Skip to content

Creating Custom Radio Stations

Will edited this page Aug 27, 2026 · 1 revision

Creating Custom Radio Stations

A custom station selects one or more collections and defines a radio schedule. Use CSL Music Mod Station Editor or write the JSON file by hand.

Directory layout

Put station JSON files in the root of CSLMusicMod_Music. Put audio in the root or an immediate child directory.

CSLMusicMod_Music/
├── Night Drive.json
├── Night Drive.png
├── Night/
│   ├── Empty Streets.ogg
│   └── Last Train.ogg
└── Ident/
    └── Station ID#blurb.ogg

This layout defines the Night and Ident collections. The loader does not search child directories for JSON files.

Option A: Station Editor (Recommended)

  1. Install CSL Music Mod Station Editor.
  2. Run the editor with Java 8 or a newer compatible Java runtime.
  3. Select your collections and build the schedule.
  4. Save the generated .json file in the root of CSLMusicMod_Music.
  5. Review the file against the Station JSON Reference. The mod ignores editor metadata such as top-level description and context name.
  6. Restart the game, then select the station from the radio panel.

The current JSON loader defines the supported fields. Review each file that Station Editor creates before you publish it.

Option B: Write JSON by hand

Minimal station

This station uses every .ogg file in the Night directory. The mod builds a schedule from the content types it finds.

{
  "name": "Night Drive",
  "collections": ["Night"]
}

The loader drops the station if Night contains no supported .ogg files.

Station with a schedule and thumbnail

{
  "name": "Night Drive",
  "collections": ["Night", "Ident"],
  "thumbnail": "Night Drive.png",
  "schedule": [
    { "type": "blurb", "min": 0, "max": 1 },
    { "type": "music", "min": 2, "max": 4 }
  ]
}

The game selects zero or one blurb, then two to four music tracks, before it repeats the state chain. Each state draws matching content from the station's collections.

The thumbnail path starts from the JSON file's directory. If you omit the field or the loader cannot find the file, the mod uses its built-in station thumbnail. Use a square image; the mod creates a 64 by 64 atlas entry from it.

Naming rules

  • Give each custom station a unique internal name.
  • Match collection names to immediate directory names, including letter case.
  • Use Userdefined for the root user collection.
  • Write song filters with the display name, omitting .ogg and any content-type suffix.
  • Duplicate station names overwrite an existing dictionary entry. Directory enumeration order cannot provide a stable override, so avoid duplicates.

Add context rules

Use Context-Sensitive Radio to select different collections or songs according to game time, weather, city happiness, or active disasters.

Test the station

  1. Enable detailed logging, restart the game, and load a city.
  2. Confirm that the station appears in the radio list.
  3. Open its playlist and check every expected content type.
  4. Play entries and skip through enough content to exercise each schedule state.
  5. Check the game log for Cannot load channel, Unknown context type, or missing named-condition messages.