Skip to content

Releases: veteranop/StudioFire

StudioFire v1.6.0

Choose a tag to compare

@veteranop veteranop released this 24 Oct 19:59

Added

  • Now-playing file for the stream encoder (the song titles on the website).
    StudioFire now writes the song that is on air into a plain text file every time
    the track changes. Point it at the file your streaming encoder already watches
    — for KDPI that is BUTT on the stream PC — and the website player starts showing
    song titles with nothing else to set up. Configure it under Settings →
    Streaming → Now-playing file
    ; use the full network path
    (\server\share\...) rather than a drive letter, and press Write the
    current song now
    to test it without waiting for the next track. The live
    monitor shows the last title written and flags a failed write. If the file
    cannot be written the station keeps playing and the monitor says why — nothing
    about this can affect the audio. Accented names are simplified (Björk appears
    as "Bjork") because the streaming server garbles anything else.
  • SoundExchange royalty report. StudioFire can now build the monthly report a
    station owes SoundExchange for its internet stream, from the records it already
    keeps of what actually aired. Run it for a calendar month and it writes three
    files: the report itself (service, artist, title, album, ISRC, label and
    performances, in the order the regulation asks for them), a full track log —
    every song with the exact time it started, kept as the evidence behind the
    report — and a short warnings file listing anything it could not fill in.
    Advertisements, station IDs, PSAs and underwriting are left out by design. Two
    things it will never invent: it does not guess a song's ISRC or record label,
    and it does not use "how many times it played" in place of "how many people
    heard it" — the listener totals have to come from the streaming host.
    Command: python -m services.core.sx_report --month 2026-09 --out reports.
  • Song titles can be published to the stream. StudioFire can send the
    on-air artist and title to the streaming server as each track starts, so the
    website player shows what is playing and the streaming host has a record of
    what it carried. Off by default, and it needs the streaming host's admin
    credentials before it can do anything; it never blocks or delays audio.
    Accented names are simplified before they go out (Björk appears as
    "Bjork") because the streaming server garbles anything else — a plain
    spelling reads correctly, a mangled one does not.
  • Streaming settings and monitor (Settings → Streaming). A new section where
    the target streaming address, the mount name and the stream host's
    username/password are entered once, with a switch to turn the title sending on
    or off. Below it, a live monitor answers the only question that matters:
    what a listener actually sees. It shows the last title StudioFire sent and
    whether it succeeded, what the streaming host reports, what a listener's player
    receives, and how many people are listening right now — refreshed every few
    seconds. A Send a test title button pushes one test through the same path a
    real track uses, so "does it work?" is answered without waiting for a song
    change. The password is write-only: it is never shown back on screen.

StudioFire v1.5.1

Choose a tag to compare

@veteranop veteranop released this 05 Oct 20:10

Added

  • Help menu and a built-in manual. A new Help link in the top bar opens
    the StudioFire Operator's Manual — a plain-English guide to running the
    station: the On Air screen, playing music, spots and IDs, reports, settings,
    and what to do if something looks wrong. It is built into the app, so it works
    with no internet, and it is on every screen.
  • "What's new" inside Help. The manual's What's new section shows what
    changed in the version you are running and the ones before it (newest first).

StudioFire v1.5.0

Choose a tag to compare

@veteranop veteranop released this 03 Oct 21:13

Added

  • Library duplicate cleanup. Settings now links to a Duplicate cleanup
    page. Press Find duplicates and StudioFire lists every song that appears
    more than once in the music library, side by side, with its size and length.
    Tick the copies you want to keep; everything you leave unticked is moved —
    never deleted — into a _Duplicates folder inside your music library, with a
    manifest so any file can be put straight back. Songs used by a playlist, a
    show or a spot, or held in a station folder, are protected and never moved.

StudioFire v1.4.0

Choose a tag to compare

@veteranop veteranop released this 03 Oct 21:06

Added

  • Shuffle button on the playlist editor. Open a playlist and press the new
    Shuffle button to reorder it into a random mix, so a playlist no longer
    plays in the exact same sequence every time. The new order is saved straight
    back to the playlist's .lst file, the same as any other change.
  • Shuffle button on the On Air screen. The playlist card on the On Air page
    (the list of what's playing and what's next) now has its own Shuffle
    button, so you can reshuffle the rotation right where you are watching it.
    The current song keeps playing; everything coming up is shuffled and the new
    order is saved to the playlist. The button is off while a show is on air.
  • Choose 12-hour (AM/PM) or 24-hour (military) time. Settings now has a
    Clock & time format option. It changes every clock StudioFire shows — the
    clock in the top bar, the On Air history, reports, the schedule calendar and
    the show labels. It starts on 12-hour (AM/PM) and the operator can switch to
    24-hour at any time.

StudioFire v1.3.3

Choose a tag to compare

@veteranop veteranop released this 30 Sep 03:21

Added

  • Auto-start that keeps the station on air: scripts\install-autostart.bat.
    Run it as Administrator on the box and the station comes back by itself after a
    power bump or a Windows restart, with the sound still working and nobody at the
    keyboard. It turns on Windows autologon for the station account and creates two
    scheduled tasks: one that starts start-all.bat shortly after that account logs
    in, and a watchdog that checks every 5 minutes and restarts the stack if it stays
    unhealthy twice in a row. Add -check to see exactly what it would do without
    changing anything; scripts\remove-autostart.bat undoes it.

Changed

  • install-services.bat now refuses to run on a station. A Windows service runs
    in session 0, which has no audio device: the engine starts, plays nothing, and the
    old script still reported success while services.msc showed the service Running.
    It now stops and points you at install-autostart.bat instead. If you genuinely
    want the services on a box that never makes sound, pass -i-understand-no-audio.
  • DEPLOY.md no longer recommends services as the production setup for a station —
    see docs/AUTOSTART-CONSENSUS.md for the evidence and the reasoning.

StudioFire v1.3.2

Choose a tag to compare

@veteranop veteranop released this 30 Sep 02:41

Changed

  • Auto-start is now one .bat, and it doesn't leave the fiddly part to you.
    scripts\install-services.bat (run as Administrator on the on-air PC) registers
    the three services so they start at boot and restart themselves if they crash,
    asks for the Windows account the station should run as, then starts them and
    reports which ones came up. Add -check to see exactly what it would do with no
    changes at all. The Log On account matters because a Windows service session has
    no drive letters, no user profile and no NAS credentials — run as LocalSystem and
    the station comes back and finds no music. If Windows refuses the account or the
    password the script says so instead of leaving you with services sitting Paused.
    It also stops any console-mode stack first, so you can't end up with two engines
    on one station.

StudioFire v1.3.1

Choose a tag to compare

@veteranop veteranop released this 30 Sep 01:34

Fixed

  • Spots (legal IDs, PSAs, ads, jingles) that fired but never actually played.
    A fired spot was correctly handed to the player, but a housekeeping pass could
    briefly forget about it and then delete its ready-to-play copy from the local
    cache before it reached the air — so the spot was silently skipped and the next
    song/show played instead (seen on the KDPI on-air PC on 2026-09-29: rules fired
    every hour but nothing aired). StudioFire now holds on to a just-queued spot or
    cued track until the player confirms it, so it can't be dropped before it plays.

StudioFire v1.3.0

Choose a tag to compare

@veteranop veteranop released this 30 Sep 01:09

Added

  • A "What's new / Change log" section in Settings. It shows the version your
    station is running, what changed in it, and the versions before it (newest
    first, older ones fold open) — so after an update you can see exactly what came
    in without having to ask. Nothing to set up: it reads the change log that
    already ships with StudioFire.

StudioFire v1.2.0

Choose a tag to compare

@veteranop veteranop released this 29 Sep 23:37

Fixed

  • The station no longer needs a mapped drive (like Z:) to find its music,
    playlists, station IDs, PSAs or ads.
    A mapped drive only exists while
    someone is logged in, so after a reboot or a Windows update the station could
    come back up without it — and then the file browser showed only C:\, the
    station folders in Settings read "does not exist", and scheduled items could
    silently miss their windows (on 2026-09-29 a Windows-update reboot dropped the
    drive on the KDPI on-air PC and the legal-ID, PSA and underwriter rules missed
    every window for the rest of the afternoon). StudioFire now finds those files
    through the music library's own address instead of the drive letter, so
    playlists, shows, IDs and PSAs keep working whether the drive is mapped or not.
  • The file browser can now reach the music library even with no drive
    mapped.
    At the top level the picker lists the library itself alongside the
    local drives, so you can always browse to your music and your .lst
    playlists. Opening a path that was saved with a drive letter (e.g. Z:\...)
    also works when that drive isn't there any more.
  • Restarting or updating re-connects the drive automatically when the
    station has a config\drive-map.bat — every way StudioFire starts or restarts
    now runs it first (previously only the Windows-service path did). If the
    mapping fails, the station still starts; playback is never held up by it.

StudioFire v1.1.0

Choose a tag to compare

@veteranop veteranop released this 27 Sep 15:52

Added (operator feedback from KDPI, 2026-09-25, TimeTrax #644)

These came from John after the first live show on the new system.

  • Songs crossfade. In the last 4 seconds of a song, the next song
    starts underneath it and rises while the old one falls, with no gap and no
    dip in the middle (an "equal-power" fade, so the overall loudness stays
    steady all the way through). PSAs, ads and station IDs are never faded. One can start
    over a song's fade-out, but it plays at full volume from start to finish,
    and the song after it starts the moment it ends, at full volume.
    Emergency filler is never faded either. Skip is still an instant cut, and
    "Stop after current song" lets the song finish fully before it stops. The
    crossfade length is set in config.json under engine → crossfade_sec
    (0 turns crossfading off, so items play back to back).

  • Program Output meter (VU) at the top of the On Air page. Live left and
    right levels of what the station is sending to the sound card, with
    green/amber/red zones, peak-hold marks and a peak readout in dB. If the
    station goes silent while on air for 8 seconds, the meter card turns red
    and says so. The level is measured without changing the audio. If the meter
    can't run, it says "Meter offline" and the music plays on normally.

  • Redesigned Now Playing card: bigger title, a progress bar, the
    playlist/show line, and the Stop, Skip and Stop-after buttons stacked on the
    right. The card's edge is green while on air and grey when stopped.

  • Search spots by name. Type in the new search box above Upcoming Spots
    to find a spot by its name, schedule, or file/folder.

  • Date next to the clock at the top of every page (e.g. "Fri, Sep 25").

  • Now Playing shows the playlist. The card now shows which playlist or
    show is on air, how many songs are left, how much time is left, and roughly
    when it will end.

  • Song count and run time for playlists. The playlist page shows how many
    songs it has and how long it plays, and each song shows its length. Songs
    whose length isn't known yet are counted separately; their length fills in
    automatically the first time they're readied for air.

  • File browser on the playlist page. Open any folder the studio PC can
    see (NAS included) and use + Add to add a song to the playlist or
    ▶ Next to play it right after the current song. There's also an
    "Add all songs in this folder" button. It reopens the last folder you used.
    Adding songs no longer reloads the page, so you can add several in a row.

  • StudioFire can update itself from GitHub. Settings → Software
    updates
    shows your version and whether a newer one has been published,
    with its release notes, and a green ⬆ Update pill appears on the On
    Air page when one is available. An admin presses Install update
    (StudioFire never installs anything by itself). It backs up first,
    restarts only what the update changed (most updates don't interrupt the
    music at all), and if the new version doesn't start properly it puts the
    old one back by itself. You can also run Update StudioFire from GitHub
    from the Start menu.

Changed

  • The On-Air schedule's "Up next" list is in true air order. Each entry
    now starts with when it will actually air next (e.g. "▶ Tomorrow 6:00 AM").
    Before, every one-time show was listed ahead of every repeating one, so a
    daily 6 AM show could appear below something scheduled for next week.
  • Better on smaller monitors. The On-Air schedule and Upcoming Spots
    lists wrap long names, and their buttons move under the text instead of
    getting cut off. The Now Playing buttons shrink to fit, and the History/Log
    column moves below the main area on screens narrower than 1440 pixels. The
    clock no longer overlaps the menu.
  • Calendar names stay in their box. Long show names wrap inside the day
    box instead of spilling into the next day or getting cut off.
  • After an update, the page picks up the new layout by itself. Before, the
    browser could keep showing the old layout until you did a hard refresh.

Fixed

  • Saving a playlist from StudioFire no longer blanks out the song lengths
    stored in its .lst file.
  • A playlist containing a file name with an unusual character (e.g. "√")
    no longer breaks when saved. The character used to be turned into "?", and
    that song would then never play again.
  • A malformed length in a .lst file (e.g. "-2") no longer causes that line's
    song to be skipped.
  • Playlists made on another computer now play on this one when a path alias
    is set up (path_aliases in config.json). Aliases used to apply only while
    importing a playlist, so a rotation that was already saved could fail to
    play and drop the station into emergency filler.
  • If the audio engine is stopped abruptly (e.g. Ctrl+C in its window), its
    player no longer keeps running in the background and gets mixed up with the
    next engine.
  • Recovery after the audio player crashes is faster: it no longer waits 2
    seconds on a player that's already gone.
  • Closed a race in the web control room's feeder (P2) where an operator
    cueing a song ("Play Next"), firing a station ID/ad, or editing the live
    rotation at the same moment the system was pulling fresh songs from the NAS
    could silently vanish: the cued item would be dropped from bookkeeping and
    its just-copied local file deleted while it was still queued to play. The
    song would just never air, with nothing showing an error. All feeder
    bookkeeping is now serialized so this can't happen. A newly-cached file
    also can't be deleted for at least 10 minutes no matter what, as a second
    safety net.
  • A failed ad/station-ID insert (e.g. a brief network hiccup) no longer
    silently gives up that spot's time slot — it now retries for up to 10
    minutes before finally logging it as missed, so a real network blip
    doesn't quietly cost a sponsor their ad play.

Changed

  • The system now only queues a few songs ahead in the live player (was ~45
    minutes' worth) — the 45-minute local cache is unchanged and still fully
    protects against a NAS/network outage (the player's own emergency filler
    reads straight from that cache), but now the on-air queue reflects reality
    almost immediately instead of lagging up to 45 minutes behind edits.
    Configurable via core.feed_ahead_tracks in config.json (default 3).