Program Logs

The program log is the blueprint for your broadcast. It's a plain text file that tells AutoCast exactly what to play, in what order, and with what timing — songs, commercials, voice tracks, live breaks, weather announcements, hardware commands, and more. Everything AutoCast does during a broadcast is driven by the program log.

In a typical station workflow, program logs are created by ClockWork and placed in Logs/Program Logs/ inside your Station Folder, named for the date they're meant to air. AutoCast picks up today's log automatically at launch and monitors it continuously — if the file changes (because ClockWork updated it, or you edited it), AutoCast reloads it immediately.

What a Program Log Looks Like

A program log is a plain text file. You can open it in any text editor. Each line is either an audio file entry, a command, a comment, or blank. Here's a short example:

## Morning Drive — Monday March 10
# Hour 6
/Station/Music/RollingStones_PaintItBlack.mp3	218	196	2.1	0	Rolling Stones	Paint It Black	Aftermath
/Station/Sweepers/DeepGrooves_Open.mp3	8	7	0	0	Deep Grooves Radio		
# VT Comment TalkBed
# Time-Correct@:00:00
# Hour 7
# Break :02:00
/Station/Music/Eagles_HotelCalifornia.mp3	391	381	1.8	14	Eagles	Hotel California	Hell Freezes Over

Let's break down what each line type means.

Audio File Lines

Lines that play audio are tab-separated, with fields in this order:

FieldWhat It Is
File PathFull path to the audio file on disk.
DurationTotal length of the file in seconds.
EOMEnd-of-Message point in seconds — where the next song's crossfade begins. If 0, the universal overlap setting is used instead.
CueCue point in seconds — where playback of this file begins (skips dead air at the start).
RampRamp point in seconds — where the vocals begin. Used for voice track talkbed timing.
ArtistArtist name, shown in the program log and on the deck display.
TitleSong title.
AlbumAlbum name (optional).

These values come from your music library database, managed in Librarian. ClockWork writes them into the log automatically when it generates the schedule.

Command Lines

Lines beginning with # (a single hash) are commands — automation instructions that AutoCast executes as it reaches them in the log. Commands control timing, live breaks, voice tracks, commercial breaks, hardware routing, and much more. The full command reference follows in this chapter.

Comment Lines

Lines beginning with ## (two hashes) are comments. AutoCast ignores them completely. Use them to annotate the log with show notes, reminders, or section markers for the benefit of anyone reading the file.

Hour Markers

Every hour boundary in the log is marked with a # Hour command:

# Hour 9

Hour markers tell AutoCast which hour it's in, which is essential for time-based commands like # Time-Correct and # Interrupt to do their math correctly. Every log should have an hour marker at the start of each new hour's content.

Timing and Flow Control Commands

# Time-Correct@:MM:SS

This is one of AutoCast's most useful scheduling tools. When AutoCast reaches a Time-Correct command, it checks the current wall-clock time. If the time is before the specified minute and second, AutoCast skips forward past any items in the log until it gets past this command — effectively jumping ahead to make sure it's in position by the target time. If the current time is already past the target, the command is ignored and playback continues normally.

The classic use: place # Time-Correct@:00:00 just before your top-of-hour news or break. No matter how early or late the preceding music ran, AutoCast will be in position for the news exactly at the hour.

# Time-Correct@:58:30
/Station/Liners/TopOfHour_Tease.mp3	[fields...]
# Hour 9
/Station/News/News_0900.mp3	[fields...]
💡

Items that get skipped by Time-Correct can optionally remain visible in the program log, shown dimmed. Turn this on in Settings → System → Show Skipped Events if you want to see what was passed over.

# Interrupt@:MM:SS [fade]

Similar to Time-Correct, but more aggressive. When AutoCast encounters an Interrupt command, it sets a timer for the specified minute and second. When that moment arrives, AutoCast fades out whatever is currently playing — mid-song if necessary — and jumps to the next event in the log.

The optional fade parameter (in seconds) overrides the Default Interrupt Fade from Settings. Use it when you need a faster or slower fade for a specific transition.

# Interrupt@:30:00 3
/Station/Programs/NetworkJoin.mp3	[fields...]

Use Interrupt when the hard stop is non-negotiable — network joins, legal IDs at specific times, anything where you absolutely cannot be late.

# Pause-For HH:MM:SS [label]

Pauses automation for an exact duration, then resumes automatically. The optional label text appears on the deck display during the pause, so you know what the pause is for.

# Pause-For 0:05:00 Traffic Report

# Pause-Until HH:MM:SS

Pauses automation until a specific wall-clock time. Also accepts the keywords Noon and Midnight as shorthand.

# Pause-Until 10:00:00
# Pause-Until Noon

# FadeInto N

Cross-fades the currently playing audio into the next item over N seconds, rather than waiting for the natural EOM point. Creates an immediate, smooth transition on demand.

# FadeInto 4

Live Input Commands

# Live-For [+vol] HH:MM:SS [label]

Opens the live input for an exact duration, then automatically closes it and resumes automation. The optional +vol or -vol parameter adjusts the live input volume in dB relative to normal. The optional label appears on the deck display.

# Live-For +2 0:03:30 Morning Drive Talkbreak

# Live On / # Live Off

# Live On opens the live input with no automatic timeout. # Live Off closes it and resumes automation. Use these together when the break duration isn't fixed in advance:

# Live On
# Pause-For 0:10:00
# Live Off

# LiveAssist On / # LiveAssist Off

# LiveAssist On switches AutoCast to DJ-controlled mode — each item plays once, then AutoCast waits for the operator to manually advance. Interrupt scheduling is suspended. # LiveAssist Off returns to full automation.

Dynamic File Selection Commands

# GetPlay [+vol] /path/with/tokens.ext

Plays an audio file whose name includes date and hour tokens that AutoCast resolves at runtime:

TokenReplaced With
%DToday's date (in the format used by your scheduling system)
%HCurrent hour, two digits (00–23)
# GetPlay /Station/Programs/MorningShow_%D_%H.mp3

At 9am on March 10, AutoCast resolves this to MorningShow_031025_09.mp3 and plays it. Perfect for syndicated programs or daily recorded content dropped into a folder by name.

# GetFile [+vol] /path/with/tokens.ext

Identical to # GetPlay in how it resolves the filename, but queues the file rather than playing it immediately.

Commercial Break Command

# Break :MM:SS

Triggers a commercial break of the specified duration. AutoCast pulls spots from your imported traffic log for the current hour and inserts them at this point in the log, filling up to the break duration.

# Break :02:00

This inserts a two-minute commercial break using spots from the traffic log for the current hour. Traffic logs are imported via Settings → Traffic Log Import. See Commercial Breaks & Traffic for the full workflow.

Voice Track Commands

# VT [attribute value]

Plays a voice track — a pre-recorded DJ announcement — at this point in the log. If no attribute/value pair is given, AutoCast plays the next available voice track file in sequence from the rotation.

If you specify an attribute/value pair, AutoCast searches the music library for matching files and plays the next one in rotation — cycling through all matching files before repeating any. This is typically used to specify the talkbed (music bed) to play underneath the voice track:

# VT Comment TalkBed

AutoCast finds all library entries where the Comment field equals "TalkBed," selects the next one in rotation, and plays it as the music bed under the voice track. The talkbed is ducked while the voice track plays, then fades back up as it ends. See Voice Tracks for the full picture.

Silence Sensor Control

# SS On / # SS Off

# SS Off disables the silence sensor at this point in the log — use it before any intentionally silent segment (a network feed pause, a live pause, etc.) to prevent false alarms. # SS On re-enables it afterward.

Display Commands

# ShowText /path/to/file.txt (or .rtf)

Loads the specified text or RTF file into the Message Pad. Use this to display show notes, weather summaries, liner card text, or any information the operator needs to see at a scheduled moment during the broadcast.

RTF files are rendered with full styling — bold, italic, color. Black text in RTF files is automatically converted to soft white for readability on the dark Message Pad background.

# Overlay [*:]HH:MM:SS attribute value [Duck N]

At the specified time, AutoCast finds a file in the music library matching the attribute/value pair and plays it on a separate audio channel — over the top of the main program audio. The time can be absolute (HH:MM:SS) or use a *: prefix to match any hour.

The optional Duck N parameter (where N is 0–100) ducks the main program audio by N% while the overlay plays.

# Overlay *:00:05 Comment LegalID Duck 30

At five seconds past the top of any hour, plays the next Legal ID from the library, ducking the main audio to 70% of normal.

# TimeAnnounce [/path/to/folder/]

Plays a pre-recorded time announcement. AutoCast determines the current time and looks for a WAV file named in 24-hour HHMM format: 0900.wav, 1445.wav, and so on. If a path is provided, AutoCast looks there; otherwise it uses a default location in the Station Folder.

# TempAnnounce

Plays a temperature announcement using the most recently fetched weather data from the National Weather Service. AutoCast uses pre-recorded audio files to speak the current temperature in the unit configured in Settings (°F or °C).

System Commands

# Run /path/to/app_or_script [&]

Executes an external application or shell script. Add & at the end to run it in the background (non-blocking), so AutoCast continues playback while the script runs. Without &, AutoCast waits for the process to finish before advancing.

⚠️

The # Run command executes whatever path you specify with the full permissions of the AutoCast process. Only use scripts and applications you fully understand and trust.

Switcher Commands

These commands require a Broadcast Tools audio switcher connected via serial port and configured in Settings → Switcher Configuration. They're covered in full in Hardware Switchers. Here's a quick summary:

CommandWhat It Does
# Switcher HH:MM:SS X-Y [Label]Routes audio through the switcher for a specified duration.
# Route-On X-YActivates a routing with no automatic timeout.
# Route-Off X-YDeactivates the specified routing.
# ClearSwitcherMutes all active switcher routing and restores the reserved channel.
# SendRelay NFires relay number N (1–8) on the connected switcher unit.

How AutoCast Monitors Your Log File

AutoCast watches your program log file continuously using macOS file system monitoring. The moment the file changes on disk — whether edited directly or regenerated by ClockWork — AutoCast reloads it and updates the display. You don't need to do anything; it just happens.

AutoCast handles both in-place saves (where the file is written directly) and atomic saves (where apps like BBEdit write to a temporary file and then rename it into place). Either way, the reload is seamless.

Expiring Content

Some audio files have a limited shelf life — a holiday promo, a seasonal sponsorship spot, a limited-time announcement. Rather than manually removing these from your logs when they've run their course, you can let AutoCast handle it automatically using the Expires field in your music library database.

How It Works

Add a column called Expires to your library.tsv file. For any audio file that should stop airing after a certain date, enter the expiration date in MMDDYY format. Leave the field blank for files that should play indefinitely.

When AutoCast loads a program log, it checks each audio file's Expires date against today's date. If the file has expired, AutoCast skips it automatically — the file never plays, and the next item in the log plays in its place.

What You'll See

Expired files appear in the program log display with pale red text, distinguishing them from items skipped by Time-Correct (which appear in gray). Like Time-Correct skips, expired items fade away as they approach their scheduled position in the log.

Each skipped file is logged to both the Report Log (with the message "Skipped expired content") and the Output Log (as an "Expired Skip" entry), so you have a clear record of what was passed over and why.

Tips

  • The Expires column is optional. If it doesn't exist in your library, the feature simply doesn't activate — no changes needed to existing setups.
  • The expiration check compares against the date only, not the time. A file expires at the start of the day after the date in the field. So a file with an Expires date of 031526 (March 15, 2026) will play on March 15 but not on March 16.
  • The same file can appear in multiple days' program logs. Once it expires, AutoCast skips it everywhere — you don't need to edit each log individually.
  • To "un-expire" a file, simply clear its Expires field in the library or update it to a future date.
💡

The Expires feature is ideal for seasonal content, limited-run sponsorships, dated promos, and any audio that should automatically age out of rotation without manual intervention.

The Midnight Rollover

AutoCast monitors both today's and tomorrow's program log files simultaneously. As midnight approaches, it's already aware of what's coming next. The actual transition to tomorrow's log happens during a long-enough song (at least three minutes) so there's time to reload without interrupting short items. The transition is completely automatic — your all-night automation just keeps rolling.

Next up: The Button Pad →