Quill Radio User Guide

Version 3.0.0

Quill Radio is internet radio the way a screen reader user would design it: a small window whose favorites tree has focus the instant it opens, menus that say everything they do, spoken feedback for every action, and a tray icon so the music keeps playing while you work. It runs the exact same radio code as QUILL itself and shares its data, so nothing you set up here is ever stranded.

Installing

Quill Radio comes in four downloads. Two of them are brand new in this release and much smaller than before, because Quill Radio can now share one Python engine – the QuillVille Runtime – with every other QuillVille app. The section just below explains the runtime; the one after it lays out the four downloads so you can pick the one that suits you.

If you are not sure which to choose: the full installer is the easy, recommended path for most people, and the full portable zip is the one to put on a USB stick.

The QuillVille Runtime: install the engine once, and every app starts instantly

Quill Radio is part of a small family of apps – QUILL itself, Quill Radio, Quill Weather, and QUILL Audio Studio. They are separate apps, but underneath they all run on the same Python engine.

Starting with this release, that engine is installed just once per user, as a shared component called the QuillVille Runtime, and every QuillVille app reuses it. Install any one app that carries the runtime, and every app you add afterward starts instantly, because the engine it needs is already on your PC. There is no second copy, no second long download.

The runtime looks after itself. It is reference-counted: Windows keeps track of how many QuillVille apps rely on it, and it is only removed when you uninstall the very last app that needs it. Uninstalling Quill Radio while, say, Quill Weather is still installed leaves the shared runtime in place for Weather; uninstalling the last one cleans it up for you.

The four downloads

You can install Quill Radio in whichever of these ways fits you best. In each filename, <version> is the release you are downloading, such as 3.0.0.

  1. Full portable zip – the file named Quill-Radio-Portable-<version>.zip (about 311 MB). Fully self-contained: extract it anywhere – a folder, an external drive, a USB stick – and run QuillRadio\QuillRadio.exe. There is no installation and nothing ever downloads at runtime. It carries its own genuine, unmodified copy of Python, plus the bundled ffmpeg (for recording) and mpv (for playback) engines. Its data folder keeps your favorites, history, recordings, and settings inside the app folder, so the whole radio travels with you. This is the one to reach for when you want a self-contained radio with no installer and no internet.

  2. Companion edition (new) – the file named Quill-Radio-Companion-<version>.zip (about 3 MB). Feather-light: it contains only the app itself and its documentation, and it runs on the shared QuillVille Runtime. The first time you launch it, if the runtime is not already installed, Quill Radio offers to download and install it for you – about 230 MB, once – with a fully accessible progress bar (see “Accessible progress every time” below). After that, this app and every other QuillVille app start instantly. Choose the Companion edition when you would rather download three megabytes than three hundred, and you are happy for the shared engine to be fetched once on first launch.

  3. Full installer – the file named Quill-Radio-Setup-Shared-<version>.exe. A standard Windows installer that gives Quill Radio its own Start Menu entry and an uninstaller. It installs the shared QuillVille Runtime (unless it is already present from another QuillVille app) and then the app. Your favorites, history, and settings live in the shared Quill store in your Windows profile. This is the recommended path for most people.

  4. Thin installer (new) – the “Lite” installer, a very small setup program that installs the app and downloads the shared QuillVille Runtime only if it is not already present. If you already run another QuillVille app, there is nothing large to fetch and the install finishes quickly. Choose it when you want a proper installed app but the smallest possible download.

Accessible progress every time

Whenever the QuillVille Runtime is being downloaded – whether an installer is fetching it or the Companion edition is fetching it on its own first launch – Quill Radio shows a fully accessible progress bar. It works with NVDA, JAWS, and Narrator, and progress is announced as a percentage as it climbs. You always know how far along the download is, and when it is finished.

About security software and antivirus

This release changes how Quill Radio starts, specifically to be friendlier to antivirus software.

Quill Radio’s launcher is now a genuine, tiny native program, and the Python it runs is the official, unmodified build. Earlier versions used a renamed and modified copy of Python’s own pythonw.exe as the launcher. That pattern is a common one for antivirus tools to flag, and some of them did – as a false positive, but an understandable one. That pattern is now completely gone. The result is an app that is far less likely to be mistaken for something it is not.

Releases are code-signed as of 3.0: the installers, the uninstallers, and the app itself carry a genuine Authenticode signature, so Windows can verify who built what you are running. If SmartScreen still shows a caution while a newly published release builds reputation, the signature is there to check – and the build is exactly what this repository’s source produces.

Getting started

The first time you open it

The very first launch shows a short welcome: three screens – what Quill Radio is, the three ways to find something to listen to, and how favorites work. Each one names the actual key for the thing it describes, so if you have already rebound something in the Keyboard Manager it tells you your key, not the default.

Two things to know about it:

On the second and third screens there is a Browse Stations Now… button, so you can leave the welcome and go straight to finding a station.

There is also a checkbox, Show me a tip now and then. Tips are one sentence each, shown once ever, the first time you reach somewhere that a single non-obvious fact would help – that live radio can be paused and rewound, that Quill Radio remembers a volume for each station separately, that a recording can be scheduled for a programme that has not started yet and will wake the computer to catch it. They never take the keyboard and they never repeat. Unchecking the box switches all of them off permanently.

Every launch after that

Launch Quill Radio from the Start Menu (or the portable folder’s QuillRadio.exe). The window opens with keyboard focus on your Favorite stations tree.

Everything Quill Radio announces goes through the same announcement engine QUILL uses, so it speaks through your screen reader (JAWS, NVDA, Narrator) without stealing focus.

Those announcements also go to a connected braille display, not just to speech – what’s playing, a finished directory refresh, a recording starting. Nothing is shortened, so a long track title is there in full for you to pan through, and the same message repeated within a couple of seconds does not flash the display twice (a flash message replaces whatever is under your fingers, so repeats are worse than useless). If a burst of different messages arrives at once, the first is written immediately and the rest settle to the newest, rather than each shoving the last aside faster than cell one can be read; errors always write through straight away. Braille never costs you speech: an unplugged display, or a screen reader that will not take the message, simply means it was spoken and not brailled – never silence. Turn it off with Show announcements in braille in Preferences, under Accessibility.

Your first half hour, step by step

This chapter assumes nothing. Every step says which key to press and what you should hear. If you have never used Quill Radio before, work straight down it and you will finish with a station playing, a favorite saved, a recording made, and the six keys that matter in your fingers.

If something does not happen as described, that is worth reporting rather than working around – Ctrl+Alt+F2 for Get Help from Support…, fills most of the report in for you.

Throughout: Escape always steps back out of wherever you are, and no step below can lose anything you have not deliberately saved.

Task 1: play your first station (about two minutes)

  1. Launch Quill Radio from the Start Menu, or run QuillRadio.exe from the portable folder.
  2. Wait for the window. You should hear “Favorite stations, tree” or your screen reader’s equivalent – focus lands in the favorites list on its own, and there is nothing to Tab to first. If the list is empty, that is expected on a fresh install.
  3. Press Ctrl+B. This is Browse Stations, and it opens a window with one big tree in it. You should hear “Entered Browse Stations” and land in the tree.
  4. Press Down arrow a few times. Each press reads a source: Favorites, Popular Stations, Radio Browser by Genre, Weather / NOAA, ACB Media, and so on. Nothing has loaded from the internet yet – these are just the branches.
  5. Stop on Popular Stations and press Right arrow to open it. The first time, this fetches the list, so give it a moment; Quill Radio announces when the stations arrive.
  6. Press Down arrow to move onto a station, then press Enter.
  7. You should hear “Playing” and then the station. That is the whole loop: arrow to a thing, press Enter.
  8. Press Ctrl+Down twice. Each press says the new level – “Volume 80 percent.”, then “Volume 70 percent.” Volume moves in steps of ten, and it says the number every time, in every window.
  9. Press Ctrl+P to stop, and Ctrl+P again to start. It says “Stopped.” and “Playing.” so you never have to guess which way the toggle went.

Leave the station playing for the next task.

Task 2: keep it (about one minute)

  1. Press Escape to close Browse Stations. You should hear “Exited Browse Stations”, and focus returns to the main window’s favorites list.
  2. Press Alt+F. That is the Add to Favorites button, reachable without Tabbing to it. You should hear “Added station to Favorites.”
  3. Press Down arrow in the favorites list. Your station is there.
  4. Press Enter on it. It plays. From now on this is your two-keystroke route to that station: launch, Enter.

That is the core of Quill Radio. Everything below is optional.

Task 3: work the player from anywhere (about three minutes)

The player is one object, and every window can reach it. This is the part that makes Quill Radio different from a player with a window you have to go back to.

  1. With something playing, press Ctrl+B to open Browse Stations again.
  2. Press Ctrl+Up. The volume goes up and says so – from the browse window, without going back to the main one. The same is true of Ctrl+P (play/stop), Ctrl+Shift+O (mute and unmute), and every other transport key in the reference at the end of this guide.
  3. Press Ctrl+Shift+G. This is Go to Player, and it opens the Player window. You should hear “Entered Player”. If the player is already open somewhere behind you, the same key brings it to the front instead of opening a second copy – one key, one player, always.
  4. Press Tab through it. The first thing is a read-only Now playing box saying what is on, where you are in it, how fast it is playing and how loud. After that come the buttons, in the order people reach for them: Play/Pause, Stop, Skip Back, Skip Forward, Where Am I, chapters, speed, volume, mute.
  5. Press Escape. The player closes and focus goes back to the window you came from.

The player is a real window: it stands in the Window menu and the Ctrl+Tab rotation like Browse Stations does, so you can keep it open beside whatever you are doing and flick over to it whenever you want.

Task 4: do anything by name (about one minute)

If you cannot remember a key, you never need to.

  1. Press Ctrl+Shift+P. This is the Command Palette, and it opens from every window – the main one, Browse Stations, the Favorites Manager, the Recordings list.
  2. Type a few letters of what you want – vol, or record, or chapter. The list narrows as you type.
  3. Down arrow to the command you want and press Enter. It runs, exactly as the key or the menu item would, and each entry shows its own keystroke so the palette teaches you the shortcut while you use it.

The whole player is in there, so the palette can pause what is playing, not just change a setting.

Task 5: record something (about three minutes)

  1. With a station playing, press Ctrl+R.
  2. You should hear that recording has started. The status bar’s Record cell now reads Stop Recording with the time, and the now-playing line notes the recording, so more than one place agrees it is happening.
  3. Wait ten or twenty seconds.
  4. Press Ctrl+R again to stop. Quill Radio names the file it saved.
  5. Press Ctrl+Shift+R to open the Recordings list. Your recording is at the top – newest first. (Ctrl+G now opens Go To, the list of places; Recordings is in it, so Ctrl+G then its number works too.)
  6. Press Enter on it to play it back.
  7. Press Delete to remove it. A confirmation appears; press Enter or Y for Yes. Focus lands on the recording that took its place in the list, not at the top and not nowhere.
  8. Press Escape to leave the Recordings list.

Task 6: the six keys worth memorising

Everything else is in the menus and the palette. These six carry the day:

What you want Key
Play or stop Ctrl+P
Pause or resume (recordings, podcasts, local files) Ctrl+Space
Volume up or down Ctrl+Up / Ctrl+Down
Go to the player, from anywhere Ctrl+Shift+G
Do something by name Ctrl+Shift+P
Browse for stations Ctrl+B
What is playing right now? Ctrl+T

If you get lost

The player follows you

Older versions of Quill Radio had one player and more than one place that knew how to talk to it – and only the main window had keys. Standing in Browse Stations you could hear a podcast and not change its speed, because speed lived on the main window’s menu bar and a menu accelerator only fires for the window that owns the menu bar. Half the player did not exist in the window you were standing in.

That is over. Every window Quill Radio opens answers to the whole transport:

In all of them, Ctrl+P plays or stops, Ctrl+Space pauses and resumes anything with a timeline, Ctrl+. stops outright, Ctrl+Up and Ctrl+Down move the volume, Ctrl+Shift+O mutes and unmutes, Ctrl+Shift+Left and Ctrl+Shift+Right skip, Ctrl+Shift+Up and Ctrl+Shift+Down change speed, Ctrl+Shift+, and Ctrl+Shift+. move by chapter, Ctrl+Shift+C opens the chapter list, Ctrl+Shift+W says where you are, and Ctrl+Shift+G summons the player panel.

Three things follow from having one table of keys rather than several:

Go to Player (Ctrl+Shift+G)

The Player is a small window of its own. It holds the whole transport as buttons, plus a readout of what is playing, where you are in it, the speed and the volume, and it stands in the Window menu and the Ctrl+Tab rotation like any other window.

The main window

Tab order: the now-playing line, the favorites tree, then Mute and Volume. Four stops, deliberately – this is a list you play from, not a player.

What the status line is telling you

The main window’s Now playing line (and the tray tooltip, which says the same thing) has one line for each thing a stream can be doing. They are deliberately different words, because they are different situations and only some of them are your doing:

What it says What is happening
Radio: stopped Nothing is playing.
Radio: connecting to WQXR... A station you just chose is being opened.
Radio: buffering WQXR... It was playing and ran out of audio. The stream is refilling; you did not do anything, and it usually comes back on its own within a few seconds.
Radio: playing WQXR Playing. (muted) is added when the sound is muted.
Radio: paused - WQXR You paused it. On a live station this is a real pause, and you can rewind into what you missed.
Radio: Reconnecting to WQXR. Attempt 2 of 3. The stream dropped and Quill Radio is getting it back. Each attempt is spoken as well as shown, so a long wait never sounds like the app has hung. Three attempts, at two, five and fifteen seconds; after that it stops and says so.
Radio: could not play WQXR - ... It failed, with the reason.

Buffering and reconnecting are worth telling apart. Buffering means the stream is still there and the audio ran out for a moment. Reconnecting means the connection went away and is being rebuilt. Both used to read as either “playing” or “connecting”, which was the app saying something it did not know.

Go To: one key for every place

Press Ctrl+G anywhere in Quill Radio and a short numbered list opens. Press the number, and you are there. Escape closes it and puts you back exactly where you were, on the same control.

The default list:

Key Place
1 Favorites (the main window)
2 Browse Stations
3 The Player
4 Recordings
5 Downloads
6 Manage Favorites
7 Song History
8 Listening Statistics
9 Find Stations
0 Preferences

Ten places, numbered 1 to 9 and then 0 – the number row, in the order your hand meets it.

The number never changes on its own. Recordings is 4 today and 4 next year, whether or not it is open. That is the whole point of the list, and it is what Ctrl+1 to Ctrl+9 cannot do: those reach the windows you have open, in the order you opened them, so the numbering shifts under you all day.

Each row also shows that place’s own direct shortcut, where it has one. That is deliberate: use Ctrl+G 2 for a month, read “Browse Stations, Ctrl+B” every time, and one day you will find you no longer need the list.

Making it yours

Go To Settings – the Settings button in the list, or View > Go To – chooses which places are in the menu and in what order. It is the same window as Choose Columns: two lists, one of what is in the menu and one of what is not, with Move Up and Move Down. Put what you use most at 1.

Places you can add: Scheduled Recordings, Station Catalog Status, Audio Health, Keyboard Shortcuts, and What’s Playing.

The menu holds ten because the number row does. Asking for an eleventh says so and suggests removing one first, rather than refusing silently.

An update will never renumber your list. A place added in a later version waits in the “not in the menu” list until you put it somewhere, so whatever you have learned stays true.

Windows, and moving between them

Quill Radio’s bigger surfaces – Browse Stations, Search Stations, Manage Favorites, Schedule Recording, Recordings, Downloads, Song History, the Now Playing / Station Details viewer, and the Player – open as their own windows, not dialogs. Several things follow from that, all on purpose:

A Window menu on every window lists what is open, numbered in the order you opened them. To move between windows:

Each window opens only when you ask for it, and closing a window puts focus back in the window you came from. Moving to a window with Ctrl+Tab or the Window menu drops your focus on the control you last used there – the same row of the same list – or on the window’s main control the first time. Quill Radio announces “Entered …” as a window opens and “Exited …” as it closes. (Inside QUILL itself these same surfaces open as ordinary dialogs; the multi-window model is the standalone Quill Radio experience.)

Station (Alt+S)

Added on 2026-08-26, and worth knowing about individually. Four more branches, none of which needs a key, an account, or a registration:

Some sources have options of their own. Shift+F10 on a source’s row and choose Source Options… where it appears. Radio Paradise asks which quality should be first for each channel – the row Enter lands on – from 32 kbps for a slow connection up to lossless FLAC; every other quality is still listed. SHOUTcast asks whether to show everything the directory lists (the default) or only stations somebody is listening to right now, which typically turns a 500-row genre into the forty that are actually on the air. Your answer is remembered, spoken back, and the branch reloads immediately to match.

If a branch keeps failing, it will now say so. A source that could not be reached says the same thing it always did the first time. From the second failure in a row it adds a count – “It has failed 3 times in a row – the directory itself may be down. You can hide it in Browse Sources.” – so you can tell a passing hiccup from a directory that is having a bad day. Quill Radio will not switch a source off for you: a branch that quietly disappeared would be worse than the problem, and directories come back. The tally is forgotten when you close the app.

A SHOUTcast station takes a moment to start, on purpose. What that directory publishes is a playlist holding the real address, so Quill Radio fetches the address when you press Enter rather than fetching five hundred of them to show you a list. If a station cannot be resolved it says so instead of sitting there silent – SHOUTcast lists a great many stations that are not currently on the air, which is also why every list from it is sorted with the ones people are actually listening to at the top.

Two SHOUTcast branches became one. The live Top 500 is a folder inside SHOUTcast Directory, pinned above the genres, so there is one SHOUTcast entry in the tree and the leaderboard is one Enter away from it.

Turning a source on or off takes effect straight away. Choose Browse Sources and the tree rebuilds as the dialog closes – you will hear “Browse Stations has been updated”. No restart, and no wondering whether it took.

Alt+S works now, and the reason it did not is worth one paragraph. The Station menu was never broken – a label was. The browse tree’s caption (“&Stations …”) claimed the same letter, and on Windows a control label’s Alt+letter silently outranks the menu bar’s, so Alt+S moved focus to the tree. Seventeen labels across seven windows were doing this to the very menus their windows carry. All have moved to free letters – the browse tree itself is now Alt+T, which is a fair trade: Alt+T jumps to the tree, Alt+S opens Station – and a test now forbids any label from taking a letter its window’s menus own.

Numbers in names now sort like numbers. A folder that used to read “ACB Media 1, ACB Media 10, ACB Media 2” reads 1, 2, 3 … 9, 10. Nothing was renamed to achieve it – the stations are still called what their broadcasters call them.

Search All Sources, and the Search Results branch

The Search All Sources… row at the top of the tree asks every directory at once and leaves the answer as a Search Results branch at the top of the same tree. Three things worth knowing:

Playback (Alt+P)

Every control previews live. As you move a slider or change any setting – EQ, compressor, channel mode, night mode, or broadcast polish – you hear it on what’s playing right away, without pressing OK (on the default mpv engine it applies with no interruption; on the Windows Media engine it reconnects once the change settles). OK keeps and saves the settings; Cancel (or Escape) puts everything back the way it was when you opened the dialog.

Every setting is remembered per station as well as shared. The whole dialog – EQ, compressor, channel mode, night mode, and broadcast polish – is saved per station when you open it while a favorite is playing (so one station can be routed to one ear, or given its own broadcast polish, and remembered); with nothing playing, or a non-favorite on, you are setting the shared default every other station follows. The per-station Reset to Default button and Preferences’ Reset All Stations’ Sound Enhancements both drop a station back to that shared default.

Record (Alt+R)

Scheduling a recording, step by step

The one thing to remember: you fill in the details first, then choose Add Schedule last – Add is the button that commits the entry you have just described, not a “start a new form” button.

  1. Open Record > Schedule Recording… (Alt+R, then Schedule Recording).
  2. In the Station list, pick a favorite – its name and stream URL fill in for you. (You can only choose from your favorites here; add the station to Favorites first if it is not listed. For a one-off stream, type the name and paste the URL by hand instead.)
  3. Set the time (“7:30 PM” or “19:30”, whichever you think in) and choose a time zone if the show is quoted in one other than your own (otherwise leave it at “(local time)”).
  4. Choose how often: Once (also pick a date), Daily, or Weekly (also pick the weekday).
  5. Set the length with Hours (0-24) and Minutes (0-59) – a three-hour show is just “3” and “0”.
  6. Choose Add Schedule. Your entry appears in the list (ordered by when it will next record), focus lands on it, and the form clears so you can add another the same way.

To change one later, select it and choose Edit (the button becomes Save Changes); to make a similar one, select it and choose Duplicate, adjust the fields, and choose Add Schedule again.

Recording several stations at once

Quill Radio records as many stations at the same time as you want. Start a Record Station capture, then another, then another – each records independently while you go on listening to whatever you like. Overlapping scheduled recordings all fire too: two shows booked for the same hour both record, where before only one would and the rest were dropped.

Each recording is fully self-contained – its own connection, its own reconnect-on-a-hiccup handling (below), its own crash-resume – so one recording dropping, finishing, or being stopped never affects the others. This now covers a stream that stalls – a connection that goes quiet without cleanly disconnecting (a pulled Ethernet cable, a dropped Wi-Fi adaptor) – which used to leave a recording wedged: still shown as “recording” but no longer growing. Quill Radio detects the stall within about half a minute and either reconnects and continues into a “(part 2)” file or, if reconnection is off or the show’s window has ended, stops and saves what it captured.

There is now a second check behind that one, and it does not depend on the connection reporting anything at all: Quill Radio simply watches whether the recording file is still growing. A recording that is capturing audio always grows. If the file has not gained a single byte across four checks in a row – about a minute – the stream is not recording, whatever it claims, and Quill Radio treats it exactly like a dropped connection: it reconnects and continues, or stops and saves what it has. It is deliberately patient, so a slow network or a station’s own momentary rebuffering is never mistaken for a dead one, and it is never applied to a recording you have just asked to stop (that one is meant to stop growing).

Recording filenames use your computer’s current time zone. If you change the computer’s time zone (or it shifts for daylight saving) while Quill Radio is running, new recordings are named with the new local time straight away – no restart needed.

If you would rather cap it (a slower machine, a metered connection), set Maximum simultaneous recordings in Recording Settings to a number; 0 means unlimited, which is the default. When the cap is reached, a scheduled recording that would exceed it is held pending and retried while its window is still open, rather than being lost.

To stop recordings: Record Now stops the recording of the station you are listening to; the Recordings window’s Stop Recording button stops the one you have selected there; and Stop All Recordings (Record menu, tray/status menu, or the button that appears in the Recordings window when two or more are running) stops every one at once.

Raw stream recording (lossless capture)

The Raw stream – exactly as sent, no re-encoding (lossless) format in Recording Settings saves a recording that is bit-for-bit identical to what the station broadcasts. The MP3/OGG/FLAC/WAV formats decode the incoming audio and re-encode it to your chosen format; the raw option skips all of that and copies the station’s own audio packets straight to disk, untouched. Choose it when you want the cleanest possible source to edit or convert yourself, with no quality lost to a second encoding.

Quill Radio picks the file type for you from the stream’s own format: an MP3 stream is saved as a .mp3 file, AAC as .aac, Ogg Vorbis as .ogg, Opus as .opus, FLAC as .flac. Anything unusual is saved into a Matroska .mka file, a container that holds any kind of audio losslessly and opens in players like VLC. Because nothing is being re-encoded, the Bitrate setting and Apply Sound Enhancements have no effect on a raw recording and are simply ignored. If a recording is interrupted and continues into a “(part 2)” file, that part keeps the same file type as the recording it continues.

View (Alt+V)

Help (Alt+H)

Tutorials

Help > Tutorials… (Ctrl+Alt+F1) opens 36 guided tutorials – 251 steps, about three and a half hours of material if you worked through every one – covering everything in this guide, in the order somebody would actually learn it. They are not a second copy of the guide. Three things make them different:

The Tutorials window is a peer window like Browse Stations, so you can leave it open, Ctrl+Tab into the app, do the step there, and hear the lesson move on behind you. That is the whole design.

The contents. Six tracks, in teaching order: Your first hour, Finding something to listen to, Making it yours, Recording, More than radio, and Living with it. Each row says how many steps it has, roughly how long it takes, and whether you have finished it. The filter box narrows the list – every word you type has to appear somewhere in a tutorial, so “record tuesday” finds the scheduling lesson – and typing here narrows it to the tutorials about the window you came from.

Your place is kept. Close a lesson half way through and it opens there again. Finishing one is remembered separately from where you are in it, so re-reading something you have done does not throw away the fact that you did it. Forget my progress clears the lot and changes nothing else.

Reading rather than doing. Read it all shows a whole tutorial as one page of text to arrow through, for when you would rather read than be walked. And the whole set is a document as well – docs/tutorials.md beside this guide – generated from the same lessons the window teaches from, so the two can never disagree. The document states the shipped keys; only the window can know yours.

The Station Catalog

Quill Radio 3.0 ships the whole working-station directory inside the app – more than 62,000 stations across 240 countries, plus SomaFM and the Project Gutenberg audio shelf, about seven and a half megabytes in the download – and keeps it in a catalog on your own computer. That one change is why browsing feels different in 3.0:

What is stored, and what is not

The catalog covers the station directory itself: Radio Browser’s stations and every axis through them, SomaFM, and the Project Gutenberg audiobook shelf. The rest stays live and needs the internet, each for a stated reason: Apple Podcasts (iTunes) (charts are rankings, and Apple’s terms bar storing them), TuneIn (a remote tree that may not be stored), iHeart (its terms do not allow storing its listings), the Internet Archive (collections of half a million items), LibriVox (live for now – its chapter listing alone is bigger than the rest of the catalog combined), and the music charts (stale the moment they are stored). View > Station Catalog Status… lays all of this out in plain sentences, source by source, with each one’s count and freshness. And the browse window tells you per branch: highlight one and the details panel says either “Answers from your catalog, updated 2 hours ago” or “Asks the internet each time; nothing is stored.”

How it stays fresh

Three ways, each yours to switch off in Preferences:

A directory that is down costs you its freshness, never your stations: a source that suddenly answers with nothing is treated as an outage, not the truth, and a station that disappears is hidden at once but only forgotten after two weeks. Popular and Trending stay live-first; when the directory cannot answer, the catalog’s snapshot steps in, and every one of those rows says “as of 2 hours ago” so you always know what you are hearing.

Your stations are never part of it

The catalog is a copy of public directories. Your favorites, custom stations, servers, and YouTube channels live in their own files, and no catalog operation reads or writes them. Rebuild the catalog from the shipped snapshot (a button in Station Catalog Status) and your stations are byte-for-byte untouched. Turning the catalog off entirely (Preferences) restores live-only browsing: nothing stored, no background requests of any kind. Safe Mode never refreshes the catalog, though reading it is allowed – it is local data, exactly like your favorites.

The Favorites Manager

Station > Manage Favorites… is a full organizer, keyboard-first:

Chapters, and checking a mark without losing your place

Ctrl+Shift+C opens the chapter list. It is no longer only for a video’s published chapters:

The list says which of those it is using, in its own first line.

Where the thing playing is a file on this computer, the list also offers Preview This Mark: ten seconds either side of the boundary, played through its own player. Your place does not move, so checking six marks costs nothing. Both sides, because the question a chapter mark raises is does the programme turn here – playing forward from the mark answers a different question, which is what the section is about.

Quick Actions

Station > Quick Actions… (Ctrl+Alt+Q) decides what each kind of row offers, and in what order.

There are three lists, chosen from the combo box at the top: Station actions, Recording actions, and Browse folder actions. In each, the first action is what Enter does, the first nine also answer to Ctrl+1 through Ctrl+9, and the whole list is the order of the right-click menu. Move Up, Move Down and Make Default rearrange; Reset This List puts a list back to how it shipped.

QUILL Cast has had exactly this since 1.1.0, with the same keys and the same nine, so whichever of the two you learn it in, you have learned it in both.

One thing it deliberately cannot do: it orders what a row already offers, and never adds anything. A station already in your favorites still offers Remove and not Add; a live stream still offers no Download. Putting Download at the top of your list does not make a live stream downloadable – it means Download is first on the rows that have it.

What each row says

A list is read out one column at a time, so the columns are the sentence you hear on every row. View > Choose Columns… (Ctrl+Alt+Shift+C) is where you decide it – for Find Stations results, and for the Recordings list.

The window holds two lists: Shown, in the order they are read and Hidden. Move Up and Move Down (or Alt+Up and Alt+Down) rearrange the shown ones. Hide takes a column out of the row altogether – not to the end of it, out of it, because a column that is still there is still spoken. Show puts one back where its place in the order says it belongs, so hiding something for a week and showing it again does not send it to the end.

Underneath the lists, A row will read: spells out the sentence one row will say with the settings exactly as they stand. You can hear the effect of a change before pressing OK, which is the whole point: this is a speech setting wearing a column setting’s clothes.

One column in each list is pinned – the station’s name, the recording’s name – because a row with nothing to identify it is a row you cannot act on. Asking to hide it says so and why, rather than quietly doing nothing.

Some columns are offered but start switched off, because a list that says everything says nothing. Find Stations can also show Language, Genres, Popularity and Bitrate on its own. Recordings can also show Length, which is blank wherever the number Quill Radio holds is a disk-safety cap rather than a length you chose – announcing a cap as a plan would be telling you something you never said.

Reset This List puts one list back the way it shipped. Your choice is saved per list and kept between sessions.

Listening statistics

Playback > Listening Statistics… (Ctrl+Shift+Q) answers the question the recently-played list never could: not what did I have on, but how much.

Choose a period – this week, this month, this year, or all time – and the window reports how long you listened in total, how many listening sessions that was, then a breakdown by station and by network. Durations are read as language (“3 hours, 47 minutes”), never as a clock face, because a screen reader reads 3:47:00 as a time of day.

Copy takes the whole report. Save as CSV… writes every session out for a spreadsheet. Delete My History… removes the lot, and asks first with No as the default, because there is no other copy of it anywhere.

What counts, and what does not:

Your history is kept on this computer and goes nowhere.

Handing an episode to QUILL Cast

On a subscribed show’s episode in the browse tree, alongside Play and Mark Episode as Played:

These are a handoff, not an instant change. Quill Radio notes what you asked for, and QUILL Cast carries it out the next time it opens – which is why the confirmation says so (“It will be next in the QUILL Cast queue”) rather than implying it has already happened. Both apps load and save the shared library whole, so a write from here while Cast was open would overwrite whatever Cast had done since it opened.

The Recordings list

Record > Recordings… shows the whole recording life cycle in one place. The list updates rows in place keyed by file path, so it is a no-op when nothing has changed; when something has, your selection, focus, and scroll position are preserved instead of the list rebuilding under you mid-read.

The line under the list leads with what is happening rather than with counts: “Recording, 42 min left. Next: KFI at 11:00 tomorrow. 14 recorded. In D:\Music\Quill Radio Recordings.” A recording due within the hour is given in minutes (“KFI in 12 minutes”), one further out by weekday, and a date past a week. If you have scheduled recordings but none of them can fire – every one disabled, or a one-off that already ran – it says “3 scheduled, none coming up” rather than a count that reads as cover.

The list itself holds:

The recording and scheduled counts are accurate: a schedule that is currently firing is not double-counted, and a completed one-time schedule drops out of the scheduled count rather than lingering.

Actions: Play (through the app’s own player; it reads Stop while that recording is playing), Stop Recording (stops the recording selected in the list), Stop All Recordings (appears when two or more are running – stops every one), Open in Folder, Remove (Delete key, with confirmation), Refresh. While a recording plays back, Ctrl+Up and Ctrl+Down change its volume right here, the same as they do for live radio. The tray tooltip carries “(recording)” – or “(2 recording)” while a recording is active.

Winamp keys in the Recordings list

If you came to Windows audio through Winamp, its classic-skin keys are almost certainly still in your fingers. They work here, on the letter keys you already know – no modifier, no menu:

Key What it does
X Play the selected recording (or resume a paused one)
C Pause / unpause
V Stop
Shift+V Stop (Winamp’s fade-out; this player has no fade, so it stops cleanly)
B Next recording – moves down the list and plays it
Z Previous recording
Left / Right Back / forward 5 seconds
Shift+Left / Shift+Right Back / forward 30 seconds
R Shuffle on / off
S Repeat: off, then all recordings, then this recording
Ctrl+V Stop after the current recording (a one-shot)
T Read out elapsed time, or time remaining – press again to swap
J Jump to a recording: type any part of its name
Ctrl+J Jump to a time: type 90, 1:30, or 1:02:03
L Open (plays the selected recording – the same as Play)
Ctrl+Up / Ctrl+Down Volume up / down

Every one of them says what it did, so you never have to guess whether the key landed.

Two deliberate differences from Winamp:

Seeking needs a recording with a timeline, which means the mpv playback engine; on a live stream or with the classic Windows Media engine the seek keys say why they cannot move rather than doing nothing.

Turn the letter keys off with Winamp-style playback keys in the Recordings player in Preferences (Ctrl+,) – worth doing if you would rather type a letter to jump through the list. Ctrl+Up and Ctrl+Down are unaffected either way.

Shuffle, repeat, and stop-after-current now work, because the Recordings list has a play queue. They were deliberately unbound before: all three describe a queue that did not exist, and a key that only looks like it worked is worse than a key that is not offered.

A recording that reaches its end on its own is now followed by whatever the queue says is next. Shuffle and repeat are remembered between sessions.

If the internet hiccups during a recording

ffmpeg first rides out short gaps itself (the reconnect settings in Recording Settings). If the connection truly dies, Quill Radio waits and resumes into a numbered part file, announcing each attempt. Then, when the recording finally finishes, Quill Radio stitches the pieces back into one file – so a show that dropped twice leaves you with one recording under the name you expected, not three files to find and play in order. You are told which happened: “Joined 3 parts into one recording”, or, if they could not be joined, “Kept 3 separate parts” and the reason. Three things keep that tidy:

Reconnect handling is per recording, so when several are recording at once each rides out its own hiccups without touching the others. And crash-resume covers all of them: if Quill Radio closes unexpectedly while several recordings were running, the next launch offers to resume every interrupted one – a single prompt for one recording, or one batched “Resume all?” prompt when there were several.

Output filenames are never silently overwritten: a pattern that produces the same name twice gets " (2)", " (3)" appended instead of clobbering the earlier file, and part files keep the original start timestamp in their name so they group together. And on Windows, the FFmpeg child is tied to Quill Radio’s lifetime through a job object, so a crashed or killed Quill Radio takes it down rather than stranding a bare recording writing to your temp folder.

If a recording was in progress when Quill Radio quit or crashed

A recording used to be lost the moment Quill Radio quit or crashed. It now remembers an in-progress recording and offers to pick it back up. On the next launch it first tidies the temp folder (any finished orphan file is moved to your recordings folder; a file still being written is left untouched), then, if a recording was in progress and is still within a 10-minute grace window, asks once in an accessible dialog:

A recording of WQXR was in progress until 9:00 AM. Resume it for the remaining 12 minute(s)?

Resume (Enter) restarts the recording for the remaining minutes only. Skip (Escape) leaves it as it is. A Don’t ask me again checkbox remembers your choice – always resume, or never ask – changeable later in Preferences. Nothing happens when nothing was in progress, and a corrupt marker is discarded rather than driving a bogus resume.

Spotify (experimental)

Quill Radio can search Spotify, browse your library and playlists, and play through Spotify’s own playback engine. This is an experimental capability: it ships in the app, but it needs setting up first. Nothing reaches Spotify until you deliberately connect an account.

Does a free Spotify account work?

Yes for finding things; no for playing them inside Quill Radio. That distinction matters, because it is easy to hear “Premium required” and assume a free account is useless here. It is not.

On a free account you can:

On a free account you cannot:

Why, and what this is not. This is not “free accounts cannot play Spotify music” – of course they can, and millions of people do every day, in Spotify’s own app, where the advertising that funds the free tier lives. The restriction is about where the audio plays, not whether you may listen. Spotify does not license other applications to stream free-tier audio, and says so in its own developer documentation. There are exactly two ways another app could play a Spotify track, and both are closed to free accounts:

So with a free account, the sensible way to use this is to let Quill Radio do the finding – which is the part that is genuinely awkward with a screen reader – and play what you find in the Spotify app.

Quill Radio tells you which kind of account you signed in with straight away, so you are never left wondering why a track will not start.

For the same reason, a Spotify selection can never be recorded or downloaded on any account, unlike every other station in the app: the audio is copy-protected.

What you need

Requirement Why it is needed
A Spotify account Free or Premium. Free searches and browses; only Premium plays (see above).
Your own Spotify Client ID Quill Radio does not ship a Spotify app identity; you supply your own, so nothing of yours passes through anyone else’s. The steps are below. There is no client secret to copy – Quill Radio signs in with the modern Authorization Code with PKCE flow, which needs only the Client ID.
Windows with the Edge WebView2 runtime Spotify audio is copy-protected and can only be played by Spotify’s own Web Playback engine, which runs inside a hidden Microsoft Edge WebView2 component. The WebView2 runtime is part of current Windows (it ships with Microsoft Edge), so it is normally already present.

Getting your Client ID, step by step

  1. Go to the Spotify Developer Dashboard at https://developer.spotify.com/dashboard and sign in with your ordinary Spotify account. There is no charge, and this works with a free account.
  2. Choose Create app.
  3. Give it any App name and App description you like – they are only for you. “Quill Radio” is fine.
  4. In Redirect URI, enter exactly http://127.0.0.1:43217/callback and press Add. It must match character for character, including the port number. That address is how Spotify hands the finished sign-in back to your own computer; nothing leaves your machine through it.
  5. Under Which API/SDKs are you planning to use?, tick Web API and Web Playback SDK.
  6. Accept the terms and choose Save.
  7. Open your new app’s Settings. Your Client ID is shown there – copy it. You will also see a Client secret: you do not need it, and you should not paste it anywhere.

Where to put it in Quill Radio

Unless you are in Safe Mode, two items sit in the Help menu: Connect to Spotify… and Browse Spotify… If you would rather not see them at all, turn Spotify off in Manage Individual Features and they disappear.

Choose Station > Connect to Spotify…, paste your Client ID into the Client ID field, and choose Connect. You do this once.

Connecting to Spotify

Choose Station > Connect to Spotify… to open an accessible sign-in dialog. Enter your Client ID and start the sign-in: your web browser opens to Spotify’s own approval page, you approve access, and Spotify sends you back to a tiny local address on your own machine (127.0.0.1) that Quill Radio is listening on for exactly that one moment. Quill Radio captures the result and stores your sign-in tokens in the Windows credential vault – never in a plain file, never in podcasts.json or a log. Your Client ID is stored alongside them so the whole connection lives in one place and clears together.

Browsing and playing

Choose Station > Browse Spotify… to open an accessible search box with a results list. Type what you are looking for, arrow to a result, and press Enter to play it. A Spotify item plays through the hidden Web Playback engine, which coexists with Quill Radio’s normal mpv and Windows Media engines – a Spotify selection is routed to it automatically, and everything you already know keeps working: the one transport control (Play/Stop), volume, the status-bar mini-player, the tray, and any system-wide Global Hotkeys you have assigned all drive Spotify playback exactly as they drive a normal station.

What Spotify playback cannot do

Hardware media keys

If your keyboard has media keys, Play/Pause and Stop control Quill Radio system-wide while it runs – even from the tray. Keys another app already owns are left alone.

Finding an episode inside one show

Find in this folder (Ctrl+F) searches the rows under the folder you are on, and it matches a row’s description as well as its name. On a podcast show’s branch that is episode search: the episodes are the rows, and their show notes are searched with them – which is what a show that numbers its episodes and puts the subject in the notes needs.

The search is scoped to the folder you are in and bounded, and it always says how many matched. Clear the box to return to the folder.

Taking back the last thing you did

Press Ctrl+Z (Edit > Undo Last Action) and the last destructive thing you did comes back: an unsubscribe, a Remove All Episodes, a Remove All Downloads, a Mark All as Played, a deleted recording. It says what it brought back – “Undid Unsubscribe. Brought back The Daily, with 412 episodes and 3 downloaded files.”

Three things worth knowing.

It is one step, not a stack. Undoing twice in a row does nothing the second time; you get one, and the app says “Nothing to undo” rather than quietly rewinding something older that you had forgotten about. If you have to count how many times to press Ctrl+Z, you have been given a puzzle rather than an undo.

Deleted files come back, not just the intent to fetch them. A file this app deletes on your behalf is moved aside first, so an undo restores the bytes themselves. Once you do the next destructive thing, the one before it is gone for good – which is what makes a single step safe to offer without asking you first.

Anything it cannot bring back, it says so in the same breath. A private feed’s saved password, for instance, is deleted deliberately when you unsubscribe; the undo brings the subscription back and tells you the password has to be entered again.

Every action that can be undone ends its own announcement with “Ctrl+Z undoes this”, so you never have to remember whether this particular verb was one of them.

Why a menu item is dimmed

A greyed menu item used to be a dead end: a screen reader says “dimmed” and stops, and the item itself says nothing about what would un-dim it. Every dimmed item now carries its reason, which the status bar shows and which readers that voice menu help speak:

Pressing a Quick Action number on a dimmed row says the same thing, rather than the old “that Quick Action is not available”. So does the command palette (Ctrl+Shift+P), where an unavailable command reads its reason instead of a bare “(unavailable)”.

Items dim rather than disappear on purpose: a verb the row genuinely owns is better as a state you can hear than as something that comes and goes.

Recent Problems

Help > Recent Problems… (Ctrl+Alt+Shift+P) is a list of what has failed recently – feeds that could not be read, downloads that died, streams that dropped – each with its reason and the time it happened.

It exists because announcements are transient. That is right almost always, and wrong the one time the sentence you needed went past while you were in another window: before this list, a spoken failure that was missed was gone for good.

Retry tries the highlighted row again. Copy All takes the list as text, which is what to paste into a bug report – it contains addresses and error messages, never passwords. Clear List empties it, and does not fix anything or stop the same problem being recorded again next time it happens.

Nothing in the list leaves this computer.

Quiet hours

Help > Quiet Hours… (Ctrl+Alt+Shift+Z) sets a window – 22:00 to 07:00 by default, and a window may cross midnight – in which the app stops speaking on its own.

What that means precisely, because the name invites two wrong readings:

There is one override: reminders can be let through anyway, since an alarm clock is a reason to set one.

The window is shared with the other Quill listening apps, so you set it once.

Moving your setup to another machine

Help > Export My Setup… (Ctrl+Alt+Shift+X) writes one file – a .quillsetup – carrying what you have built up: your subscriptions, folders and playlists, your favorite stations and saved places, your settings, your Go To order, your Quick Action order, your scheduled recordings, your bookmarks and any keys you rebound. Help > Import My Setup… (Ctrl+Alt+Shift+N) puts them on the other machine.

An OPML export moves subscriptions and nothing else. This moves the rest.

Three things about the file:

Close and reopen the app after an import, so everything is read back in.

Checking your subscribed podcasts for new episodes

Quill Radio used to read a show’s feed only when you opened that show, which meant the unheard count on a show you had not opened was as old as the last time you opened it, and “what is new?” could only be answered by walking the Subscriptions branch and opening everything.

Ask once, for everything. Check All Feeds Now, on the Subscriptions branch and on any podcast folder in it, asks every subscribed show at once. It checks shows you have paused as well: a pause means leave this show alone – no checking on a timer, no downloading by itself – and it must never come to mean the show is out of reach. That it costs nothing you cannot undo with one keystroke on the row in front of you is what makes a pause safe to use freely. Refresh on a single show is the same question about one show.

Or have Radio ask on its own. Preferences (Ctrl+,) holds two settings for this: how often to check – from every 15 minutes to once a day, plus Manually only – and whether to check once at launch. Both are off to begin with, on purpose: an app that starts reaching the network on a schedule nobody chose is spending somebody else’s data allowance.

What an automatic check does, exactly:

If you also run QUILL Cast, the two apps will not ask the same publisher twice. Each keeps its own cadence deliberately – one shared switch would mean turning the check on in Cast turned it on here too, with no way to say “let Cast do it” – but they share the record of when a check happened, so whichever app goes first, the other finds the work already done and stays quiet. There is nothing to set up and nothing to notice.

What the main window shows

View > Main Window Shows (Ctrl+Shift+1 to Ctrl+Shift+5), or Preferences. Five choices:

Whichever you choose, the frame around it does not move: the menu bar, the now-playing line at the top, Mute and Volume, and the status bar are the same in every one. That is the point. Before this, choosing “open Browse at startup” opened Browse as a second window on top of the main one – so you had two windows before pressing anything, and the one you actually wanted was the one without the menu bar on it. Now the surface you live in is the one that has the menus.

If you had that setting turned on, your main window now opens showing Browse, and nothing else opens by itself.

Everything is still a window of its own on demand: Ctrl+B still opens Browse, Ctrl+F still opens Search. The one difference is that pressing them while that surface is already your main window takes you there rather than opening a second copy on top of the one in front of you.

The choice takes effect at once – you do not have to restart – and it is remembered. A view you have visited keeps its state, so switching away from Browse and back finds your tree still expanded.

The ACB Media schedule

Community > ACB Media Schedule… (Ctrl+Shift+N) lists everything ACB has published for the ten ACB Media channels: one list, oldest first, each row carrying its own date, both its times, its programme and its channel – “Tuesday 4 August, 8:00 AM to 9:30 AM, Herbie’s Community Cooking Corner, ACB Media 5”. It opens on the next programme still to come, so you arrive at what is coming rather than at the start of a fortnight that may already have finished. The one programme on air right now ends with “on now”.

It moved off the Station menu on 24 August 2026 and it stopped being a week. Both changes have the same cause, and it is worth knowing about because it will otherwise look like a fault: ACB publishes a fortnight of listings at a time and then stops. For much of any given month there is nothing posted for today at all. Shown as a calendar, that read as an app with no data in it. As a list with a sentence above it, it reads as what it is.

The line above the list always says how far the published schedule runs. It is a read-only edit field rather than a label, so you can tab to it and arrow through it a word at a time if you missed it as it was spoken. It reads – “49 programmes published. The published schedule runs 1 August to 15 August.” – and says so plainly when that is already behind us: “Nothing is published for today or later – ACB last posted a schedule through 15 August.” If that is what you see, nothing is broken; there is simply nothing yet to show. Press Refresh once ACB posts more.

And it always says when this copy was pulled from ACB, with a clock time: “Pulled from ACB just now, at 9:47 AM”, or “Pulled from ACB 3 hours ago, at 6:47 AM”. That sentence is there because of a fault reported on 25 August 2026: a successful Refresh used to rewrite the line to a sentence identical to the one already there, so there was no way to tell a refresh that fetched something new from a button that had done nothing at all. Now the time changes when the fetch lands, and does not when it does not.

And it says whose clock the times are on. ACB publishes its schedule in US Central time; Quill Radio converts every programme to your own clock, so what you read is when it starts where you are. That conversion is right and it used to be invisible, which is worse than it sounds – shown a bare “7:00 AM” you have no way to tell a correct conversion from a missing one. So the line adds “Times are shown in US Mountain Standard Time. ACB publishes in US Central time.” when the two differ, and says nothing at all when you are already on Central. It matters most where the gap moves: Arizona keeps Mountain Standard Time all year, so it runs two hours behind Central in summer and one in winter, and you should not have to work that out to trust the window.

Finding something. Three filters, all of which narrow what is listed and change nothing about what is playing:

Clearing any of them puts the whole published schedule back.

Moving around. Next Programme puts the cursor on the next thing that has not finished. Refresh reads the schedule from ACB again. Export… writes what you are looking at – the filters included – to a Markdown file, grouped by date.

Three ways to re-read the schedule, because one was not enough. The Refresh button is one; Shift+F10 (or the Applications key) on the list now offers Refresh the Schedule as well, and it is offered even when nothing is selected – an empty or wrong-looking list is exactly when you want to re-read it and exactly when there is no row to right-click. And Community > Refresh the Schedule (F5) works from anywhere in Quill Radio, with the window open or shut: with it open it reloads the window, and with it shut it fetches quietly and speaks the result. All three ignore every cached copy, this computer’s and any in between.

What you can do to a programme

Six things, and each is reachable three ways: from the context menu (Shift+F10 or the Applications key), from the buttons below the list in the same order, and – for Play – by pressing Enter on the row.

A verb that cannot run is dimmed and says why. A programme whose listing names no channel has nothing to play; one that finished this morning cannot be recorded.

What is on now

Community > What Is On Now (Ctrl+Alt+H) answers in one sentence, across all ten channels, without opening anything. It answers from the stored schedule, so it answers straight away – this is the one schedule surface that still prefers the stored copy, because a key that spends four seconds on a feed before speaking is a key nobody presses twice. Press F5 first if you want it to go and look.

Working offline

The schedule is kept on this computer. It is read again every time you open the window, and whenever you refresh – never on a background timer. It used to honour the stored copy for an hour on open, which meant that somebody who saw ACB move a programme, closed Quill Radio and opened it again got the same old listings back with nothing on screen admitting it (reported and fixed on 25 August 2026). Opening the window is you asking for the schedule, so that is now when it goes and asks. The stored copy still answers What Is On Now, which has to answer instantly, and it is still what you get when there is no connection. With no connection the window opens from what it has and tells you how old that is, rather than presenting three-day-old listings as though they were current. If the schedule cannot be read at all you get an empty list and a sentence saying so, and the reason is written into Recent Problems.

On the first of a month whose listings ACB has not posted yet, the window shows the previous month’s rather than nothing – with the same line above it saying how far those listings actually run, so an older schedule is never presented as a current one.

One quirk worth knowing about, because it is theirs rather than ours: ACB’s schedule sometimes lists the same programme twice – the same title, at the same time, on the same channel, under two different internal ids. Quill Radio shows it once. If you compare the window to their website and count differently, that is why.

Repeating programmes. ACB’s schedule currently writes out every occurrence separately, so a daily show simply appears once a day. If they ever define a series as a series instead, Quill Radio expands it – daily, weekly (including several days a week), fortnightly, monthly or yearly, with any cancelled dates left out. Each occurrence is its own row, so a reminder set on next Tuesday stays on next Tuesday rather than attaching itself to the whole series.

Reminders and Upcoming

Setting one. Any programme in the schedule, and any station, recording or saved row in the browse tree, offers Set a Reminder… on its context menu (Shift+F10, or the Applications key). Once a row has one, the same slot offers Remove Reminder instead – a menu that cannot tell you what you already did is a menu you have to remember for, which is exactly the job a reminder exists to take off you.

The dialog asks three things:

When one comes due, Quill Radio plays the reminder sound – three rising bell tones, unlike anything else in the app – then says what it is and when it starts, and shows a desktop notice with a Go There button that opens whatever it was about. The sound comes first on purpose: if you know it, you have already turned your attention by the time the sentence begins.

A reminder that came due while the app was closed is still said when you next open it, as long as that was within the last couple of hours. Being told at breakfast about something that ended at midnight is noise, not a reminder.

Quiet hours can hold a reminder back, and holding it back does not end it. A withheld reminder stays due, is said when the quiet window ends, and shows in Upcoming as waiting in the meantime.

Preferences (Ctrl+,) holds two reminder settings: the lead time new reminders start on – every reminder still asks, this just makes the usual answer one keystroke shorter – and whether the reminder sound plays. That sound has its own switch, separate from the general per-event sound list, because turning most earcons off is not the same as wanting to miss the one thing you asked to be interrupted by.

Community > Upcoming… (Ctrl+Alt+Shift+F) is everything Quill Radio has planned – your reminders and your scheduled recordings, together, soonest first, with the kind written on every row. Snooze pushes a reminder out by 5, 10 or 30 minutes counted from now, and Dismiss forgets it.

Both of those work on reminders only. A scheduled recording is cancelled in Schedule Recording, where it was made and where the confirmation lives – Dismiss on a reminder and Dismiss on a recording would mean two very different mornings, so they are not the same button.

Bookmarks: keeping a moment

Bookmark This Moment (Playback menu, or Ctrl+Alt+A) marks where you are, in one keystroke, on whatever is playing: a station, a recording, a saved YouTube row, or an episode from your subscriptions. Bookmarks… (Help menu, or Ctrl+Alt+Shift+J) opens the list.

No note is required. “I was here” is the commonest kind of bookmark, and having to stop and type a sentence for it is how a bookmark does not get made. Add the note later from the list, with Edit Note, if it turns out there was something to say.

In the list, Enter goes to the highlighted bookmark. The other verbs:

A live station’s bookmark is honest about being one. Live radio has no timeline anybody else shares: ten minutes in meant ten minutes into your listening, and tomorrow it means something else entirely. So a station bookmark records the station and the elapsed time you made it at, and Go There tunes in now rather than pretending to seek to a moment that has gone. A recording, a video and a podcast episode all do seek, because they have a timeline to seek in.

The list is shared with QUILL Cast. A bookmark you make here is in Cast’s Bookmarks window, and one made there is here – no sync, no account, the same way your place in an episode already travels. A row this app cannot open, such as a bookmark Cast made on something Radio has no way to play, still appears with Go There dimmed and a reason; hiding it would leave you wondering where your bookmark went.

Your place follows you between Quill Radio and QUILL Cast

Both apps can play the same subscribed episode, and they now share one place per episode on this computer. Pause an episode in one, open it in the other, and it picks up where you left off – and says so: “Picking up where you left off in Quill Radio, at 1 hour 2 minutes 3 seconds.”

The later decision wins, not the furthest through the episode. If you skipped to the outro to check something and then went back to the middle, the middle is where you are; an app that dragged you forward again on the grounds that it was further in would be overruling you with arithmetic.

An episode either app has finished stays finished.

Skip Silence, and a speed that sticks

Two things the playback engine could always do and Quill Radio never offered outside podcasts.

Skip Silence (Playback > Skip Silence, Ctrl+Shift+9) shortens the long pauses in a recording, a YouTube row or a podcast episode as it plays. It takes effect on what is already playing, with no interruption. It has no effect on live radio – a broadcast plays at broadcast speed, and its pauses have already gone out – and it says so if you turn it on while a station is playing, rather than appearing to do nothing.

Play Faster is remembered. A speed you choose while a recording plays now applies to every recording; a speed you choose on a YouTube row applies to YouTube rows. Per kind rather than per row, because what somebody means by “1.5x for recordings” is every recording, and being asked to set it again for each captured hour is the same feature with the cost moved onto you. Podcast episodes keep their own per-show speed, which they always had.

Global hotkeys and keyboard shortcuts

Quill Radio’s shortcuts are now yours to change, and its playback controls can reach across your whole desktop.

Keyboard Shortcuts (Help > Keyboard Shortcuts…) opens the Keyboard Manager: a searchable, conflict-aware list of every Quill Radio command and the key assigned to it. Find a command, assign a new key (it warns you if the key is already in use, or is a risky one such as a plain letter or an arrow key), clear it, or restore the defaults. The keymap is shared with QUILL and QUILL Cast – the same %APPDATA%\Quill data store described below – so a shortcut you change here changes it in the editor too, and vice versa. One note: a few commands whose default is a two-key chord (the media transport keys) or uses a comma (Preferences on Ctrl+,) keep their built-in shortcut until you next launch Quill Radio; a plain single-key command such as the Command Palette takes effect immediately.

Quick-play your favorites. Ten commands – Play Favorite 1 through Play Favorite 10 – play the first ten stations in your favorites list directly, without opening a menu or arrowing the list. They default to Ctrl+Alt+Shift+1 through Ctrl+Alt+Shift+0 (the plain number keys are already taken by window switching, headings, and the copy tray, so these use a free combination), and they appear on the Command Palette. Rebind them here to Alt+1 through Alt+0 if you would rather have the shorter keys.

Global Hotkeys (Help > Global Hotkeys…) lets you give a system-wide key to Quill Radio’s transport actions – Play/Pause, Stop, Mute, Volume Up, Volume Down, and Show/Hide to the tray – so you can, for example, pause the radio without leaving the program you are working in. Only these safe playback and window commands can be assigned a global key; a global hotkey can never trigger anything that changes a document or a file. None are set by default. The first time you assign one, Quill Radio reminds you that a system-wide key may override the same key in another program; as with the media keys and the Ctrl+Alt+Shift+R show/hide chord, a key another app already owns is left alone. (Windows only.)

Quillins in Quill Radio

Quill Radio can now run Quillins – QUILL’s small, sandboxed, permission-gated add-ons – from its own Quillins menu, not just inside the editor. A Quillin says in its manifest which apps it is for (its targets), so only add-ons written for Quill Radio appear here. The bundled radio-community-directory sample shows the idea: it contributes an extra station directory that appears alongside RadioBrowser and the others when you Find Stations. Quillins are off in Safe Mode. (Third-party Quillins remain disabled in this release; the bundled ones are the foundation.)

The system tray

Closing the window keeps Quill Radio available in the notification area with its own icon, announced by name. Right-click (or keyboard-invoke) the tray icon for: Show, the live now-playing line, a single Play/Stop item whose label is always current, Mute/Unmute, your Favorite Stations (nested by folder) and Recently Played submenus, Record Now/Stop Recording, Schedule Recording, Recording Settings, Browse Stations, and Exit. Double-click brings the window back.

Show or hide Quill Radio from any program with Ctrl+Alt+Shift+R. This is a system-wide hotkey – like the hardware media keys above, it works even when another app has focus, so you never have to hunt for Quill Radio’s window first. Press it while the window is showing and Quill Radio tucks itself into the tray (it says “hidden to the tray”); press it again and the window returns and takes focus (it says “shown”). Playback and any recording keep running the whole time. If another app has already claimed Ctrl+Alt+Shift+R, Quill Radio simply does not take it – there is no error, and you still show and hide the window with the tray icon and the “Alt+F4 minimizes to the system tray” preference. Each app in the family uses its own chord so they never clash: QUILL is Ctrl+Alt+Shift+Q and Quill Weather is Ctrl+Alt+Shift+W. (Windows only.)

Sharing data with QUILL

Quill Radio reads and writes the same data store as QUILL and QUILL Cast (%APPDATA%\Quill): favorites (folders, custom names, and per-station volumes included), history, recordings, schedules, timers, and settings. A station you favorite here is a favorite in QUILL’s radio; the wake-up timer you set in QUILL fires here. Uninstalling Quill Radio never deletes that shared data.

Dependencies, honestly stated

If one of those bundled tools goes missing. Both mpv and ffmpeg ship inside every Quill Radio installer, so a missing one means a damaged installation rather than something you never bought – antivirus quarantine and a half-finished update are the two usual causes. Quill Radio now says so, once, at launch: one sentence naming which tool is gone, what it costs you, and what to do. It does not repeat on every launch, but it will say it again if a second tool goes missing later.

A healthy installation says nothing at all about any of this, which is the point.

Weather

Weather is its own app – Quill Weather – and this Weather section lives in the Quill Weather User Guide (../../weather/docs/userguide.md), its own home.

Quill Radio no longer has a Weather menu at all: forecasts, alerts, and background alert monitoring belong to Quill Weather, which you can open from the QuillVille menu. What stays in Quill Radio is the radio part of weather – the Weather / NOAA branch of Browse Stations, with every NOAA Weather Radio transmitter that has an internet feed, still searchable by call sign, SAME code, or “County, ST”.

Television

Quill Radio plays television the way it plays everything else: pick a channel, press Enter, and the video opens with the same captions, audio-track selection and transport every stream gets. Finding a channel is the new part.

Television (iptv.org) sits in Browse Stations just above YouTube. It is built on the iptv.org community catalog – the open, keyless index of publicly available TV streams, roughly 9,300 playable channels after Quill Radio’s own filtering. What is filtered out, so you know what you are not seeing: channels flagged adult, channels that have closed, channels with no stream, and streams that only answer a disguised browser identity and would therefore fail the moment you pressed Enter.

Your own TV guide

Drop an XMLTV programme guide named tv_guide.xml into your Quill Radio data folder and every channel the guide covers gains a line in its details: “Now: … Next: …”. There is no one TV-guide feed for the world – guides are published per country, per provider, and by projects like iptv-org/epg that can generate one for the channels you care about – so the file is yours to choose. It is read locally, works offline, is re-read automatically when you replace it, and is never fetched from anywhere. Delete the file and the guide lines simply disappear.

Quillin station sources

A Quillin (extension) can now contribute a whole station source, not only search results. When one is installed and enabled, a Quillin Sources branch appears in Browse Stations – it is simply absent otherwise – with one folder per contributed source: its categories, its stations, playable and favouritable like anything else, and searched by Search All Sources with everything else. The bundled Radio Community Directory sample shows Quillin authors the whole shape, including a station whose address is only worked out at the moment you play it.

Keyboard reference

Every menu item shows its own shortcut. You never have to walk a menu to find out whether there is a faster way in – if there is a key, the item says so, right there in the menu. And where an item has a shortcut you can change, the menu shows the key you actually have bound: rebind it in Help > Keyboard Shortcuts… and the menu updates to match. The table below is the short list of the ones worth memorising; the menus carry the rest.

For the whole list at once, without opening six menus: Help > Keyboard Shortcuts Sheet… (Ctrl+Alt+Shift+K). It is built from the menu bar in front of you, so it always shows the keys you have – including anything you rebound, which is more than this table can promise.

The Station menu travels with you

Since 2026-08-26 every radio window also carries a &Station menu – so Alt+S opens the same commands in Browse Stations, Find Stations, the Player, Favorites Manager, Recordings, Downloads, Schedule, Song History and Now Playing that it opens in the main window: Browse Stations, Search Stations, Manage Favorites, Recordings, and Preferences, each showing the key you actually have bound. Two small courtesies: a window never lists itself (Browse Stations does not offer to open Browse Stations), and a window never steals its own keys (inside Browse Stations, Ctrl+F still goes to the Find box, so Search Stations rides on the menu without a conflicting shortcut).

Which Alt key opens the menu in this window

Quill Radio’s windows are peers, not dialogs, and each one carries its own single menu – so the letter that opens a menu depends on where you are standing. Alt+S is the Station menu in the main window, the Search menu in Find Stations, and nothing at all in Browse Stations, which is the one thing about a window nobody can discover by looking.

Window Menu key The menu
Main window Alt+S Station (and Alt+P Playback, Alt+A Audio, Alt+D Video, Alt+R Record, Alt+C Community, Alt+V View, Alt+H Help)
Browse Stations Alt+B, Alt+S Browse; Station
Find Stations Alt+S Search
Player Alt+P Player
Favorites Manager Alt+F Favorites
Recordings Alt+R Recordings
Downloads Alt+D Downloads
Schedule Recording Alt+S Schedule
Song History Alt+S Songs
Now Playing Alt+V View

Two of these were wrong until 2026-08-26 and are worth knowing about if you ever tried them: Quillins asked for Alt+Q, which QuillVille already had, so it never opened – it is Alt+N now. (In QUILL Audio Studio, Voices and View were the same story; Voices is now Alt+I.) There is now a check that stops any menu in the family shipping without an Alt key, or sharing one with its neighbour.

Every one of these is also in the Keyboard Shortcuts Sheet (Ctrl+Alt+Shift+K), listed under the window it works in, so the answer is one keystroke away from wherever you are.

Action Key
Browse Stations Ctrl+B
What Is This? (context help for the focused control) F1
Tutorials (guided, step by step) Ctrl+Alt+F1
User Guide Ctrl+F1
Keyboard Shortcuts Sheet (every key, filterable) Ctrl+Alt+Shift+K
Audio Health (can this installation play and record?) Ctrl+Alt+Shift+M
Find Stations Ctrl+F
Manage Favorites Ctrl+Shift+M
Recordings Ctrl+Shift+R
Go To (a numbered list of places) Ctrl+G
Record Now / Stop Recording Ctrl+R
Schedule Recording Ctrl+Shift+S
Play / Stop Ctrl+P
Stop outright, whatever is happening Ctrl+. or Ctrl+Alt+P
Play Last Station Ctrl+L
Mute / Unmute Ctrl+M (main window) or Ctrl+Shift+O (anywhere)
Volume up / down (steps of 10) Ctrl+Up / Ctrl+Down
Go to Player (opens the player window, or brings it to the front) Ctrl+Shift+G
Volume Boost Ctrl+Shift+B
Output Device Ctrl+Shift+D
Rewind / Forward 30 seconds Ctrl+Shift+Left / Ctrl+Shift+Right
Back to Live Ctrl+Shift+L
Chapters (finished video) Ctrl+Shift+C
Go to Position (finished video) Ctrl+Alt+J
Next / previous chapter Ctrl+Shift+. / Ctrl+Shift+,
Play faster / slower / normal speed Ctrl+Shift+Up / Ctrl+Shift+Down / Ctrl+Shift+0
Where am I? (position, length, chapter) Ctrl+Shift+W
Show or hide the video Ctrl+Shift+V
Captions on or off Ctrl+Shift+K
Video information Ctrl+Shift+I
Full screen F11
Audio and Described Audio Ctrl+Shift+A
Play Described Audio Ctrl+Alt+D
Transcript (read what a video says) Ctrl+Shift+T
What’s Playing? Ctrl+T
Sound Enhancements (EQ, compressor, channel mode) Ctrl+E
Song History Ctrl+Shift+H
Play favorites 1-10 directly Ctrl+Alt+Shift+1 … Ctrl+Alt+Shift+0
Send to tray Ctrl+W
Show / hide from any app (system-wide) Ctrl+Alt+Shift+R
Next / previous window Ctrl+Tab / Ctrl+Shift+Tab
Jump to window 1-9 Ctrl+1 … Ctrl+9
Close the window you are in (Browse, Player, the managers) Escape, Ctrl+W, or Ctrl+F4
Preferences Ctrl+,
New Folder Ctrl+Shift+E
Command Palette Ctrl+Shift+P
Play selected favorite Enter (in the list)
Focus the status bar (a second press returns) F6
Rename (manager) F2
Remove (manager / recordings) Delete
Reorder selected favorite Alt+Shift+Up / Alt+Shift+Down
Station menu Alt+S
Playback menu Alt+P
Record menu Alt+R
View menu Alt+V
Community menu Alt+C
Help menu Alt+H

The transport keys work in every window, not only the main one – Browse Stations, Find Stations, Manage Favorites, the Recordings list, Song History, the chapter list, Now Playing, the download queue and the player panel all answer to Play/Stop, volume, mute, skip, speed, chapters, Where Am I, Go to Player and the Command Palette. They come from one shared table, so a key means the same thing and moves the same distance wherever you press it.

Nothing here sits on Ctrl+Alt+arrow. That block belongs to JAWS’s and NVDA’s table navigation, and a transport key there works everywhere except while somebody is reading a table. Speed and chapters used to be on it; in 3.0 they moved to Ctrl+Shift+Up/Down and Ctrl+Shift+comma/period, and a build check now fails if anything lands back on that block. If you have notes from an earlier version, those four keys are the ones that changed.

These keys belong to Quill Radio’s own menus and are kept separate from QUILL’s keymap, so nothing here collides with editor shortcuts.

Getting help

Support is run by Community Access. Write to support@community-access.org with questions, problems, or ideas – a person reads it, and replies come back by email. Get Help from Support… (Ctrl+Alt+F2, on the Help menu) writes that email for you, with the app’s name and version filled in; writing to the address yourself works exactly as well.

Troubleshooting