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:
A note about ClockWork commands. If your logs are built by ClockWork, you may know events like Random, Rotate, Fill and FrontSell from ClockMaker's format clocks. Those are resolved by ClockWork's TuneStacker engine into specific songs when it builds the log, so they never appear in the program log AutoCast plays — AutoCast just sees the finished list. They're described in ClockWork's Playback Events reference.
## 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:
| Field | What It Is |
|---|---|
| File Path | Full path to the audio file on disk. |
| Duration | Total length of the file in seconds. |
| EOM | End-of-Message point in seconds — where the next song's crossfade begins. If 0, the universal overlap setting is used instead. |
| Cue | Cue point in seconds — where playback of this file begins (skips dead air at the start). |
| Ramp | Ramp point in seconds — where the vocals begin. Used for voice track talkbed timing. |
| Artist | Artist name, shown in the program log and on the deck display. If a song has no Artist tag in your library, AutoCast displays "AutoCast" in the Artist column rather than leaving the field blank — keeps the log tidy and visually consistent. |
| Title | Song title. |
| Album | Album 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
# 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.
Network Relay Commands
# Relay-For [+vol] HH:MM:SS URL [label]
Relays a network audio stream — a news feed, a syndicated program, any URL an AVPlayer can play — directly into your program log for an exact duration, then closes it automatically and resumes normal automation. It's the network-stream equivalent of # Live-For: same idea, but the source is a URL instead of your live mic input.
| Parameter | What It Is |
|---|---|
+vol / -vol | Optional. Volume adjustment in dB, same convention as # Live-For and # GetPlay. +6 roughly doubles the perceived volume. Useful when an incoming feed runs quieter or louder than your normal program level. |
HH:MM:SS | How long to hold the relay open before automatically closing it and returning to the log. |
URL | The network stream to relay — an HTTP/HTTPS audio stream URL. |
label | Optional. Everything after the URL, joined with spaces — no quoting needed. Shown on the deck display while the relay is active. |
# Relay-For +6 00:05:02 http://www.fsnradionews.com/FSNNews/FSNWorldNews.mp3 FSN News
This opens the FSN World News feed, boosted +6dB, holds it for 5 minutes and 2 seconds, then closes it and continues the log — with "FSN News" shown on the deck for the duration.
A relay plays out through the same physical audio output your program audio uses, so it sounds seamless to your listeners — no separate device routing to configure.
AutoCast automatically suppresses its normal silence sensor for the duration of a relay (the same way it does for # Live-For) and instead watches the incoming stream's own audio level directly. If the upstream feed itself goes dead — the remote server stalls or drops to silence — AutoCast's dedicated relay watchdog still detects it and recovers, using the same threshold and duration settings as your regular silence sensor.
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:
| Token | Replaced With |
|---|---|
%D | Today's date (in the format used by your scheduling system) |
%H | Current 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.
# PlayFolder /path/to/folder/
Plays every audio file in a folder, back to back, in alphanumeric order by filename. It's a handy "instant show producer": drop a pre-produced show, a block of promos, or a set of overnight music into a folder, and put one line in the log.
Because numbers sort before letters, numbering your files is the easiest way to control the order:
01 - The Big Show - Open.wav 02 - The Big Show - Segment One.wav 03 - Station Promo.wav 04 - The Big Show - Segment Two.wav 05 - The Big Show - Close.wav
AutoCast reads the folder shortly before the item is due to play, so you can add, remove, or rename files at any time without touching the program log. Files that aren't audio are ignored, and if the folder is missing or empty, the line is skipped.
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:
| Command | What It Does |
|---|---|
# Switcher HH:MM:SS X-Y [Label] | Routes audio through the switcher for a specified duration. |
# Route-On X-Y | Activates a routing with no automatic timeout. |
# Route-Off X-Y | Deactivates the specified routing. |
# ClearSwitcher | Mutes all active switcher routing and restores the reserved channel. |
# SendRelay N | Fires 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.
Flipping to a Specialty Log
AutoCast 1.0.937 and later, with specialty logs built in ClockWork 1.1.164 or later.
Sometimes a day's regular program log isn't what you want on the air — a live sports broadcast, election-night coverage, a holiday special. For those occasions you can build a specialty log in ClockWork's TuneStacker (see Specialty Logs) and flip AutoCast over to it.
Flipping
- Right-click the program log and choose Flip to Another Log….
- Pick the specialty log from the list — double-click it, or select it and click Flip.
AutoCast switches to that log for the rest of today and joins it at the current time of day. If the event is hours away, AutoCast waits quietly in the log's placeholder hours until the event's hour arrives.
Flipping Back
Right-click the program log and choose Flip Back to Regular Programming; the menu item shows the name of the regular log you'll be returning to. If you do nothing, AutoCast returns to regular programming by itself at midnight. Your regular program log is never modified, and a flip survives relaunching AutoCast or restarting the computer later the same day.
What a Specialty Log Must Contain
AutoCast finds its place in a log by its hour markers, so a partial-day log would leave it disoriented. Before flipping, AutoCast checks the specialty log and refuses to flip unless:
- the log has an
# Hourmarker for every hour, 0 through 23; - every hour has something scheduled in it; and
- every indefinite
# Pause-For 99:00:00is ended by an# Interruptbefore the next hour begins.
For hours with no programming, ClockWork's Placeholder Hour format clock takes care of all three at once. It is just:
# Pause-For 99:00:00 # Interrupt@:59:59 0
Assign it to every unused hour of the specialty master log in MasterBuilder, and TuneStacker writes the hour markers and placeholder lines for you. See Unused Hours: Use the Placeholder Hour Clock in the ClockWork help.
If AutoCast Won't Flip
| Message | What to do |
|---|---|
| No # Hour marker for… / Nothing scheduled in… | The specialty log is missing an hour, or an hour is empty. Assign the Placeholder Hour clock to those hours in its master log, then regenerate the log in TuneStacker. |
| # Pause-For 99:00:00 is never ended by an # Interrupt… | A placeholder is missing its Interrupt line, so the pause would never end. Use ClockWork's Placeholder Hour clock, which includes it. |
| Can't flip to “…” right now | A Live-For, Relay-For, or Pause-Until event is running in that log at this moment, and AutoCast can't join one part-way. Try again after it ends, or turn Auto off first. |
| No other program logs were found | There is nothing to flip to. Generate a specialty log in TuneStacker first. |
Next up: The Button Pad →