Releases: Community-Access/quill-radio
Release list
Quill Radio 2.1.2
Quill Radio 2.1.2 is a fast-follow that fixes three reported issues -- two of them from 2.1.1 itself. Thank you for the fast, specific reports.
Fixes
- "Install and restart" works again (#1183). One-click updating failed with a "decompression bomb" error and sent you off to update by hand. The update installer's safety guard against oversized archives was sized for documents (512 MB), but a whole Quill Radio -- Python, ffmpeg, and the mpv engine, all bundled -- legitimately unpacks past that, so the guard was turning away the real update. It now allows a full app-sized download (it only ever runs on Quill's own verified release, and still rejects a genuinely abnormal archive), so Install and restart applies the update and relaunches, keeping your favorites, recordings, and settings.
- Favorites keep the order you gave them (#1168, #1178). After updating, a hand-sorted favorites list could snap into A-Z on the next launch. The sort-order setting added in 2.0.2 was reading an older, orderless favorites file as "Ascending." Quill Radio now reads a pre-2.0.2 file as Unsorted, so your order carries across the upgrade. And if an earlier update already rearranged you, your original order is still there underneath -- choose Unsorted in Preferences (Ctrl+,) and it comes right back.
- A shared Speech Hub crash is fixed and regression-locked. Opening Dictation (Offline) in the Speech Hub could crash on an older build; it was already fixed, and now has a test standing guard so it cannot return.
Also: the user guide now clarifies that Play/Stop holds your place only on the mpv playback engine (the default) -- on the classic Windows Media engine, resuming rejoins live.
Install
Two flavors, both fully bundled (ffmpeg and the mpv engine included; nothing downloads at runtime):
- Installer:
Quill-Radio-Setup-2.1.2.exe - Portable:
Quill-Radio-Portable-2.1.2.zip-- extract anywhere and runQuillRadio\QuillRadio.exe.
Windows SmartScreen may warn on first run (not code-signed); choose "More info" -> "Run anyway".
Quill Radio 2.1.1
Quill Radio 2.1.1 turns the Weather / NOAA experience into a real, authoritative directory, adds a new Radio Reading Services category for blind and print-disabled listeners, brings iHeart into Browse Stations, and adds a scoped "Find in this folder" search. Everything ships a bundled snapshot, so the new directories work completely offline. All of it lives in the shared quill package, so QUILL gets it too.
New
- NOAA Weather Radio is now an authoritative directory, not a name search. The Weather / NOAA branch in Browse Stations is powered by the WeatherIndex directory (api.wxindex.org) of actual NWR transmitters. Browse state by state — each state lists its real transmitters, named with call sign and frequency ("KHB36 162.550 MHz Manassas") — and press Enter to play the best available internet re-stream. Favorites, recording, and scheduling all work unchanged.
- Search understands weather-radio geography. A search that looks like a SAME code (the 6-digit county code), a call sign (
KHB36), or a "County, ST" / state name returns exact transmitters, blended into the normal results. - Your local NOAA Weather Radio, one keypress. Weather menu → Listen to your Local NOAA Weather Radio resolves the transmitter covering your saved Weather location (county first, then nearest by coordinates) and plays it.
- Works offline, and survives the API going away. A three-tier resolver (live API → app-data cache → a bundled snapshot of all 1,035 transmitters) keeps every NOAA feature working with no network. Weather menu → Update NOAA Weather Radio Directory pulls the newest data on demand; the bundled floor is never overwritten.
- New: Radio Reading Services — the human newspaper, on the radio. A new Radio Reading Services branch lists the audio information services that read newspapers and local print aloud for people who are blind or print-disabled — WRBH, Sun Sounds of Arizona, CRIS Radio, the Connecticut Radio Information System, KPBS/WKAR reading services, ACB Media 1–5, the NFB Radio Network, Voice Corps, and more. 20 vetted services are bundled (offline-ready) and blended into Search; Station → Update Radio Reading Services refreshes from RadioBrowser.
- iHeart joins Browse Stations. A new iHeart branch groups iHeart's live stations by genre, and each genre by an A-Z sub-directory, every level loading lazily.
- Find in this folder. Browse Stations gains a search box that searches from the folder you're on downward only — one genre, one state, one source — so results stay small. Type a name, press Enter, and matches appear as a flat list under that folder; Clear returns you to the folder you searched from.
Fixes
- The Source filter in Search Stations now shows a station under every directory it appears in (a SomaFM channel RadioBrowser also carries is no longer hidden under the SomaFM filter).
- NOAA Weather Radio Browse no longer shows empty states online — it reads each state's playable transmitters from the full directory and lists only states that actually have a re-streamed transmitter, with a playable count.
- Radio Reading Services always shows the full curated bundle, with any live-discovered services added on top.
- iHeart genre A-Z ordering (0–9 before A, alphabetised within each letter), and a favorite added while Browse Stations is open now appears in its Favorites branch immediately.
Install
Two flavors, both fully bundled (ffmpeg and the mpv engine included; nothing downloads at runtime):
- Installer:
Quill-Radio-Setup-2.1.1.exe— Start Menu entry and uninstaller; data lives in the shared Quill store in your Windows profile. - Portable:
Quill-Radio-Portable-2.1.1.zip— extract anywhere (even a USB stick) and runQuillRadio\QuillRadio.exe; itsdatafolder travels with it.
Windows SmartScreen may warn on first run because this build is not code-signed; choose "More info" → "Run anyway". The build is exactly what this repository's source produces.
Quill Radio 2.1.0
Quill Radio 2.1.0 adds a top-level Weather menu, a whole new way to browse stations, one-click updating, and a round of fixes from live feedback -- all in the shared quill package, so QUILL gets them too.
Highlights
- A new Weather menu -- official weather as delightful, fully spoken text on free, no-account sources (National Weather Service, Open-Meteo, OpenStreetMap). Search a location by ZIP, city, county, or address and pick from a list; Weather Now reads active warnings first, then complete current conditions (temperature, feels-like, humidity, dew point, wind and gusts, cloud cover, pressure, visibility, sunrise, sunset, ultraviolet index, air quality -- each toggleable), the forecast, and an extended daily outlook up to 16 days. Quick Weather speaks a one-line summary. It is an additional accessible tool, never a replacement for a NOAA Weather Radio, Wireless Emergency Alerts, or local emergency instructions.
- A whole new way to browse -- Browse Stations is its own search-free tree of every source: Favorites, Popular, Weather/NOAA, ACB Media, NFB Radio, SomaFM, TuneIn (its real folder tree), Community M3U genres, and the Xiph/Icecast directory. Enter plays; Shift+F10 opens a rich menu.
- Update in one click -- Quill Radio installs the update and restarts itself, keeping every favorite, recording, and setting.
- Reorder favorites from the keyboard with Alt+Shift+Up/Down.
- Fixes: no second copy on relaunch (#1152), the Record button shows recording state, quiet volume changes (#1154), the Country list keeps focus, the raw-stream format hides its bitrate (#1155), search finds stations by branding and call sign (#1156), and the "impossible to exit after recording" report is confirmed fixed and regression-locked (#1153).
See CHANGELOG.md and the in-app Release Notes for the full list.
Downloads
- Quill-Radio-Setup-2.1.0.exe -- system installer.
- Quill-Radio-Portable-2.1.0.zip -- portable (keeps its data next to the app).
Everything is bundled; no downloads are needed at first run.
Quill Radio 2.0.2
Quill Radio 2.0.2 — the recorder goes parallel, and Sound Enhancements come alive.
Highlights
- Record as many stations at once as you like. Overlapping scheduled shows all capture now, instead of one winning and the rest being dropped, and you can start Record Station after Record Station while you keep listening. Each recording is independent — its own reconnect handling and crash-resume. Stop one (Stop Recording), or Stop All. A new "Maximum simultaneous recordings" setting caps it if you want (0 = unlimited, the default).
- Sound Enhancements preview live, and every setting is per-station. Move any control — EQ, Even Out Volume, Channel mode, Night mode, or the new broadcast polish — and you hear it on what's playing immediately, no OK required (live on the default engine; one reconnect on Windows Media once it settles). OK keeps and saves; Cancel reverts. And every one of those settings is now remembered per station as well as shared.
- Broadcast polish (OptiLab). A one-touch broadcast-processing section with three modes — Podcast Leveler (speech), Stream Polish (music), Smooth Limiter (clean peak control) — plus an Input trim (0 dB by default), an Auto-Adapt amount, and a bypass checkbox. Adapted with thanks from OptiLab Core by dgl1984 (https://github.com/dgl1984/optilab, Apache-2.0); a faithful adaptation of its three modes reproduced as cross-platform ffmpeg chains, not the plugin binary.
Also in 2.0.2
- Channel mode Left/Right truly plays in one ear only — the whole stereo mix to one ear, the other silenced (the 2.0.1 fix).
- Favorites sort — Ascending, Descending, or Unsorted, for the whole list or per folder, re-sorting as you add.
- Import stations from an M3U/M3U8 playlist into a folder you choose (creating one at any depth), with duplicate handling.
Everything lands in the shared Quill codebase, so QUILL gets it too. See the full release notes in the app (Help > Release Notes) or docs/release-notes-2.0.md.
Downloads
- Windows Installer: Quill-Radio-Setup-2.0.2.exe
- Windows Portable (zip): Quill-Radio-Portable-2.0.2.zip
Both bundle FFmpeg and the mpv engine — no downloads needed.
Quill Radio 2.0.1
Quill Radio 2.0.1 is a fast follow-up to 2.0.0 from the first round of live feedback.
- A recording no longer stops after a minute on a transient hiccup. With auto-reconnect on, a momentary 403 Forbidden (an expiring/rotating stream token) or other brief 4xx used to be treated as fatal, so a recording ended instead of reconnecting. Now only genuinely-terminal outcomes (disk full, HTTP 404/410/451) stop a recording; everything else reconnects, and an error ffmpeg already recovered from can no longer strand a later drop.
- It is now obvious when recording has begun. Record Now / Record Station announce "Recording started: ".
- Review and copy What's Playing. A new "What's Playing - Review and Copy..." command opens a small accessible dialog with the current title and artist in a read-only, selectable field you can arrow through character by character, with a Copy button. A separate "Copy What's Playing" command copies it straight to the clipboard.
- Channel mode: Stereo, Mono, Left only, or Right only. Send the radio to one ear while your screen reader uses the other. Set it as your shared default or, like the equalizer, per station.
- Turn a recording down while it plays back. Ctrl+Up / Ctrl+Down now adjust playback volume inside the Recordings window.
All of this lands in the shared quill package, so QUILL gets it too. See the bundled release notes for the full 2.0 story.
Not code-signed yet: Windows SmartScreen may warn on first run - choose More info, then Run anyway.
Quill Radio 2.0.0
Quill Radio 2.0 -- Release Notes
Quill Radio 2.0 is about one thing done thoroughly: recordings you can trust. Version 1.1.0 rebuilt the sound -- a new playback engine, every stream format, live rewind, richer Sound Enhancements. 2.0 turns that same care on the recorder, closing a reported round of recording bugs and adding the one piece that was always missing: a recording that survives a restart. If you schedule shows, leave long recordings running unattended, or have ever come back to find a capture cut short or gone entirely, this release is for you.
It also widens the net for finding stations: iHeart and TuneIn now join the search, so two of the biggest directories on the internet are searchable and playable right inside Browse Stations. More on that below.
As always, everything below also lands in QUILL itself. Quill Radio and QUILL share one codebase and one data store, so these fixes arrive in both at once -- nothing here is vendored into the Quill Radio wrapper.
The headline: recordings you can trust
A recording in progress now survives a restart -- and Quill Radio asks before resuming
This is the one that hurt. You set a recording going, the app quits or crashes (or Windows does), and the recording is just gone -- the FFmpeg process it had started keeps writing to a temp file nobody would ever find.
Quill Radio now remembers an in-progress recording. It writes a small marker when a recording starts and clears it on a clean stop, so a crash leaves a breadcrumb. On the next launch it first tidies the temp folder -- any finished orphan file is moved into your recordings folder where you'll actually find it, while a file still being written is left untouched -- and then, if a recording was in progress and is still within a 10-minute grace window, it asks you, once, in a proper 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 -- not a fresh full duration. Skip (Escape) leaves it as it is. A Don't ask me again checkbox remembers your choice -- always resume, or never ask -- and you can change it later in Preferences. Nothing happens when nothing was in progress, and a marker file that has gone corrupt is thrown away rather than driving a bogus resume.
Scheduled recordings fire reliably throughout their window, not just at the exact minute
The scheduler used to match the exact start minute. So a recording set for 8:00 that Quill Radio only reached at 8:01 -- a slow launch, a brief stall, the tray icon taking a moment -- silently never fired, and a start that failed still burned the whole occurrence for the day.
The scheduler now treats an entry as due from its start time through the end of its duration, so a late arrival starts with the remaining minutes and catch-up on launch is free. Last-fired is stamped only on a successful start (a failure retries on the next poll while the window is still open), one-time entries auto-disable once they've fired, and when two schedules are due in the same minute while the recorder is busy, the second is held and announced instead of being burned. The scheduler thread itself is now lock-guarded and wrapped so it can no longer die silently.
The Recordings list stops flickering and keeps your place
The Recordings list used to rebuild itself on every refresh, snapping a screen reader back to the top and losing whatever you'd selected. It now updates rows in place, keyed by file path: a no-op when nothing has changed, and when something has, your selection, focus, and scroll position are all preserved instead of the list rebuilding under you mid-read.
The counts are honest now, too. The active recording is counted from the recorder itself, so a recording writing to a temp folder is no longer invisible in the list; a firing schedule is no longer double-counted; and completed one-time entries drop out of the scheduled count. The active row shows a live elapsed time, scheduled entries show their zone-labeled times, and the tray tooltip carries "(recording)" while a capture is running.
Recordings harden against dropped connections, dead streams, and a crashed host
Four pipeline fixes that together make a long unattended recording far more likely to come out whole.
- A reconnect records only the remaining time, not a fresh full duration. A 60-minute show that drops at minute 50 records a roughly 10-minute continuation, not another 60.
- Filenames are never silently overwritten. The old unconditional overwrite is gone; a filename pattern that would produce the same name twice gets
" (2)"," (3)"appended instead of clobbering an earlier recording, and continuation parts keep the original start timestamp in their name so they group together. - A drop is classified before any reconnect attempt is spent. A fatal failure -- your disk is full, or the server took the stream down with an HTTP 4xx such as a 404 or 410 -- stops trying, because the stream is gone and reconnecting would only spam continuation files. A transient drop (a network hiccup or a 5xx) is retried as before.
- A crashed host no longer strands a recording. 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 with it instead of leaving a bare FFmpeg writing to your temp folder. And the stop-and-wait fallback moved off the UI thread, so closing the window never hangs on a slow FFmpeg shutdown.
More stations to find: iHeart and TuneIn now in the search
Browse Stations used to search the community RadioBrowser directory and the free SomaFM directory. 2.0 adds two of the largest directories on the internet -- iHeart and TuneIn -- blended into the same results list, so a search for a call sign, a city, or a show now reaches far more of the stations people actually ask for. Every result is labeled with where it came from (iHeart, TuneIn, RadioBrowser, SomaFM), and you play it the same way you always have.
Both are keyless and need no account. iHeart is read straight from its public station sitemap -- a two-request directory index -- and a station's real stream is resolved on demand from its own page the moment you play it, never by bulk-fetching thousands of pages. TuneIn goes through RadioTime's open OPML directory (the same service TuneIn's own web player uses): search returns matching stations and the stream address is looked up only for the ones about to play. To keep a single search from turning into dozens of network round trips, iHeart and TuneIn each resolve a small, capped handful of the most relevant matches per search -- enough to add immediately-playable results without slowing the list down -- while RadioBrowser keeps paging as before. A Refresh button re-fetches the iHeart directory index (it is cached once per Browse Stations session; TuneIn and RadioBrowser are always live).
With four directories in one list, Browse Stations gained the controls to steer it. A Source dropdown lets you narrow the search to just one directory -- All sources, RadioBrowser, iHeart, TuneIn, SomaFM, ACB Media, or Website -- when you already know where a station lives. And the old free-text tag and country boxes are now proper dropdowns: a Tag/genre list and a Country list, filled in from the directory itself, so you pick "jazz" or "United Kingdom" from a list instead of guessing the exact spelling, and choosing one runs the search right away.
TuneIn also feeds Find Streams from a Website: paste a TuneIn station page and Quill Radio resolves its real playable stream, the same on-demand lookup the directory search uses. Find Streams now also recognizes an iHeart or TuneIn page directly rather than handing back a page address that will not play.
Like every other network feature, iHeart and TuneIn are off in Safe Mode, HTTPS-only, and inventoried in QUILL's network-egress audit. This lands in the shared quill package (core/radio/iheart.py, core/radio/tunein.py, core/radio/directory_search.py), so QUILL and QUILL Cast gain the same reach.
Scheduling recordings gained real editing
The Schedule Recording dialog was capture-and-forget: add an entry, and your only other move was to delete it. 2.0 makes the schedule something you can actually manage.
- Edit an existing entry -- change its station, time, or duration without deleting and re-adding it.
- Duplicate an entry -- a fast way to set up the same show on another day, or a second time slot for the same station.
- Enable or disable an entry without losing it -- turn a weekly recording off for a week and back on, instead of deleting and rebuilding it. A disabled entry reads as "(disabled)" in the list and simply does not fire.
- Type the time your way -- "7:30 PM" or "19:30", whichever you think in; both are understood.
- Pin an entry to a time zone -- each schedule entry carries its own zone (defaulting to your local time), so a show quoted in Eastern records at the right moment wherever you are, and the list shows each entry's time with its zone.
What's Playing reaches more stations
When a station will not answer the usual title request -- and after Quill Radio has already tried the playback engine's own title channel -- it now takes one more step: it reads the station's own public "now playing" status page (the Icecast or SHOUTcast status endpoint the stream's own server publishes) and pulls the current title from there. It only ever talks to the same server you are already listening to, and it is off in Safe Mode. The practical result is a real "Now playing" on a batch of stations that used to answer with silence.
For troubleshooting: verbose logging and a log folder you choose
Two additions for when something needs diagnosing. Preferences (Ctrl+,) gained a Verbose logging checkbox that turns on detailed debug l...
Quill Radio 1.1.0
What's new in 1.1.0
- A new heart: the mpv playback engine. Quill Radio 1.1.0 ships a second audio engine -- mpv, the same engine trusted by media players everywhere -- and uses it automatically. You don't have to know or care, but it's the reason almost everything else on this list exists. The classic Windows Media engine is still right there: Preferences (Ctrl+,) > Playback engine > "Windows Media (classic)" is exactly the pre-1.1 behavior, byte for byte. Best of both: whichever engine is playing, a station it can't open is quietly retried once on the other before you ever hear an error.
- Every stream format, finally. This is the consequence you'll feel immediately: Quill Radio now plays effectively every station format in real-world use -- MP3, AAC and HE-AAC (AAC+), Ogg Vorbis, Opus, FLAC streams, and HLS (m3u8). Ogg Vorbis, Opus, and HLS were simply undecodable before (Windows Media cannot play them), and they're everywhere among community, independent, and international stations: a whole class of "found it in the directory but it won't play" stations just started working. Raw recording keeps pace -- each format is captured to its natural file type (
.ogg,.opus,.aac, and so on). - Send the radio to a second sound card. The classic radio setup, finally: Preferences (Ctrl+,) gained Radio output device. Route the radio to a USB headset or a second sound card and keep your screen reader, and Quill Radio's own sounds, on the main one. Unplug that USB card and your choice is remembered, not silently reset; if the device can't be used the radio plays through the default and says so.
- Pause live radio. Rewind it. Quill Radio now keeps a rolling buffer of the live stream -- roughly 45 minutes at typical bitrates. Pause for the doorbell and resume where you left off. Missed a sentence? Rewind 30 Seconds (Ctrl+Shift+Left). Catch back up with Forward 30 Seconds (Ctrl+Shift+Right) or jump straight to Back to Live (Ctrl+Shift+L). Every move tells you how far behind live you are.
- Volume Boost. Some stations just broadcast quiet. Ctrl+Shift+B amplifies up to 50% past full volume -- and your normal volume scale, per-station volume memories, and mute all behave exactly as before.
- Sound, shaped your way -- instantly. Sound Enhancements grew from an EQ-and-compressor into a proper listening toolkit. New: Combine channels into mono -- with single-sided hearing or one earbud, a station that hard-pans a voice to the other channel simply loses it; mono blends both channels so nothing disappears. New: Night mode -- real-time loudness evening that lifts quiet passages, the natural partner to Even Out Volume taming loud ones; late-night listening without riding the volume keys. Two new quick presets, Small Speakers and Late Night, join the family, the three-band EQ and per-station memories are untouched -- and on the mpv engine, every change now applies live, mid-song, with no reconnect at all. Recordings with "Apply Sound Enhancements" capture the new options too.
- What's Playing, on more stations. When a station refuses the usual title request -- or streams over HLS, which has no title channel at all -- Quill Radio now reads the track title straight out of the playback engine, so Ctrl+T has an answer far more often.
- "Buffering..." instead of silence. When the network hiccups mid-song, Quill Radio now says what's happening while the engine rides it out.
- Alt+F4, your way. For some of us Alt+F4 is muscle memory -- and half the time you didn't mean to kill the radio, just get it out of the way. A new Preferences checkbox, Alt+F4 minimizes to the system tray (off by default), does exactly that: the window tucks away, the music keeps playing, and the tray icon has everything. The titlebar X and Station > Exit still follow your "When closing the window" choice, so a deliberate exit is still one keystroke away.
- Record the raw stream, exactly as sent. Recording Settings' Format list gained Raw stream -- exactly as sent, no re-encoding (lossless) next to MP3, OGG, FLAC, and WAV. Those four decode the incoming audio and re-encode it to the format you picked; the raw option does neither -- it copies the station's own audio packets straight to disk, so the file that lands is bit-for-bit what the server broadcast. It's the cleanest possible starting point if you want to do your own editing or convert it yourself, with nothing lost to a second pass through an encoder. Quill Radio names the file from the stream's own format for you -- an MP3 stream becomes a
.mp3, AAC a.aac, Ogg Vorbis a.ogg, Opus a.opus, FLAC a.flac; anything out of the ordinary is tucked into a Matroska.mkafile, which holds any audio losslessly and opens in players like VLC. Bitrate and Sound Enhancements don't touch a raw recording -- there's nothing being re-encoded for them to shape -- so they're quietly skipped, and if a recording rides out a dropped connection into a "(part 2)" file, that part keeps the same file type. Straight from a listener request: a recording mode that saves the raw stream as captured, as losslessly as possible. - Stations that used to fail now heal themselves. Here's the one that started it: Magic 104.1 (KMGL) in Oklahoma City turns up in the directory, you press play, and... nothing. The real stream lives behind a JavaScript player on the station's site, so the listed address is a dead end, and the only way through was to open the website, find the "Listen Live" link, follow it, and dig the actual stream out of the player by hand. Quill Radio now does that digging for you. When a stream won't play it works down a ladder: re-resolve the address if it's a StreamTheWorld player that just moved servers, refresh the address from the directory, and -- if you leave it on -- scan the station's own website, following its "Listen Live"/"Play"/"Tune In" link into the player page and reading a Triton player straight off it. Find one clear stream and it just plays it (and remembers it for that favorite); find several and it tells you and sends you to Find Streams to pick. The website step is one checkbox in Preferences (on by default, off in Safe Mode); the quick re-resolves always run. It tries once per station per session, so a truly dead station never spins. A dead station is no longer a dead end.
- What's Playing, the way you'd actually say it. Some stations don't send a clean "Artist - Title" -- their broadcast systems cram a pile of catalog codes into the track name, and What's Playing (Ctrl+T) read the whole thing aloud:
title="YOUR SONG",artist="Elton John",url="song_spot="F" MediaBaseId="0".... Now Quill Radio finds the title and the artist in that noise and just says "Now playing: YOUR SONG by Elton John." Better still, you decide the wording: Preferences (Ctrl+,) has a "What's Playing announcement" box where you write a short template with{title}and{artist}-- wrap optional words in[square brackets]so they disappear when there's nothing to fill them (the default{title}[ by {artist}]quietly drops the " by" when a stream sends no artist). Prefer "Elton John: YOUR SONG"? Type{artist}: {title}. Want the raw feed for a station you're curious about?{raw}gives you everything. Blank restores the default. - The whole dial, not just the first 50. Browse Stations used to stop at 50 results -- so a search for "news," with hundreds of stations out there, looked like it only had 50 in the world. Now you get up to 200 at once, most-listened first, and when there are still more a More Stations button loads the next page and drops your cursor right on the first new arrival. The summary even tells you when there's more to reach for, and nudges you to add a tag or country when you'd rather narrow than page. Under the hood this pages the RadioBrowser directory properly, so the long tail is finally within reach.
- Volume keys, fixed again -- this time in Browse Stations. Search for a station, press Enter to play it, then reach for Ctrl+Down to bring the volume down... and nothing happened. Browse Stations is its own window, so the Playback menu's volume shortcut never reached it, and the station results list had already claimed the plain arrow keys for moving between rows. Now Ctrl+Up and Ctrl+Down work from anywhere in that window -- the results list, the volume slider, a button -- turning the same radio volume you'd change anywhere else, sliding the window's own volume control to match, and speaking the new level. Plain arrow keys still move you between stations, untouched. (Version 1.0.2 fixed exactly this on the main window's Favorites list; this reaches the Browse Stations window that fix didn't.)
- Find Streams now reaches the stations that hid behind a Play button. A whole class of broadcast stations -- thousands of them, and the entire
player.listenlive.conetwork -- put their "Listen Live" on a modern JavaScript player (Triton Digital / StreamTheWorld). Those players build the stream address in code the moment you press Play, so it is written nowhere on the page for a scanner to read. Point the old Find Streams at one and it came back empty, even with a Play button sitting right there on the screen. No longer: Quill Radio now recognizes the player, reads the station's call letters straight off the page, and looks up the real, playable stream through the station provider's own public address service -- no embedded browser, no guessing at URLs. When a station offers both an MP3 and an AAC feed, you get both to choose from. It only ever does this for pages that really are these players and only for call letters the service confirms, so it never hands you a wrong stream; ordinary pages behave exactly as before, and the lookup happens as part of the same Scan you already press (and stays off in Safe Mode). One real report --player.listenlive.co/34461, "Magic 104.1" -- tur...
Quill Radio 1.0.2
What's new in 1.0.2
- Fixed: Ctrl+Up/Ctrl+Down (Volume Up/Down) did nothing from the Favorites tree, which has focus by default on launch -- the tree's own arrow-key handling was silently swallowing the shortcut before it ever reached the Playback menu.
- Fixed: starting a stream (or pausing and resuming one) could reset the volume to 100, discarding a level you'd just set and, for a favorite station, silently overwriting its own remembered volume. A favorite now reliably comes back at its own remembered volume; a level you set with nothing memorized yet stays put.
- Fixed: Sound Enhancements' EQ sliders now announce a real accessible name to screen readers.
- The Recording Settings, Wake-Up Timer, and Add Station dialogs' affirmative button is now labeled "OK" instead of "Save," matching standard Windows dialog convention.
- Sound Enhancements gained a "Reset to Default" button, clearing a station's own EQ/compressor override so it goes back to following the shared default. Preferences (Ctrl+,) gained "Reset All Stations' Sound Enhancements..." to clear every station's override at once.
- Sound Enhancements is now a real three-band equalizer: Bass, Mid, and Treble sliders (-12 to +12 dB), each freely adjustable. The old presets (Flat/Bass Boost/Voice Clarity/Podcast) still work as a "Quick preset" shortcut that sets all three sliders at once.
- Sound Enhancements can now be remembered per station: open it while a favorite station is playing to give that station its own EQ and compressor, distinct from the shared default. Adjust it with nothing playing (or a non-favorite station on) to change the shared default that every other station follows.
- Closing the window (the titlebar X, Alt+F4, or Station > Exit) now asks what to do when something is playing or recording: Exit, Minimize to Tray, or Cancel, with a "Don't ask me again" checkbox -- previously it always exited immediately, silently stopping an in-progress recording. Preferences (Ctrl+,) gained a matching "When closing the window" setting to change your answer later.
- Check for Updates (Help menu) now shows a real dialog when you're already up to date, instead of only a spoken announcement that was easy to miss.
- Preferences (Ctrl+,) gained "Announce dialog transitions" (off by default) to reduce alert noise -- previously every dialog always spoke "Entered/Exited" cues with no way to turn it off.
- Help menu gained User Guide, Release Notes, and Product Requirements items, opening the bundled documentation right in your browser.
- Sound Enhancements (Playback > Sound Enhancements...): an equalizer preset (Flat/Bass Boost/Voice Clarity/Podcast) plus a compressor ("Even Out Volume"), applied live via ffmpeg -- no new audio engine, no new install step. Off by default; needs FFmpeg (Help > Get FFmpeg...) the same way recording already does.
- Recording Settings gained "Apply Sound Enhancements to recordings" -- off by default (an unfiltered archival copy, unchanged behavior), turning it on records the filtered audio instead for every recording method (Record Now, Record Station, and scheduled recordings).
- Browse Stations search now also checks SomaFM (a free, curated internet-radio directory) alongside RadioBrowser, blended into the same results list.
- Automatic Check for Updates: a throttled, silent check once a day on launch -- quiet unless a real update is found.
- Preferences... (Ctrl+,): a small dialog for Resume Last Station on Launch and the new automatic update check.
See the full release notes for more detail.
Quill Radio 1.0.1
Maintenance release.
- Fixed: Check for Updates, the in-app update download, and Help > Get FFmpeg failed with an internal error ("unexpected keyword argument cancellation_token") in 1.0.0.
- Both flavors as always: the system installer and the truly portable zip (its data folder keeps your whole radio on the stick). Everything bundled, no downloads.
Note: releases are not yet code-signed; Windows SmartScreen may warn on first run. Choose More info, then Run anyway.
Quill Radio 1.0.0
Quill Radio 1.0 -- Release Notes
The radio, on its own -- and finished. Quill Radio takes the internet radio QUILL users already know, gives it a window, a menu bar, a tray icon, and its own icon, and then goes further than the embedded radio ever has. Everything below also landed in QUILL itself: the two share one codebase and one data store, so features arrive everywhere at once.
Highlights
- Your folders, on the front page. The main window is your favorites tree -- the same nested folders you build in the manager, with a full context menu (Play/Stop, Rename, Move to Folder, Remove, New Folder) one Shift+F10 away. Create folders exactly where you want them with New Folder (Ctrl+Shift+E); they exist immediately, stations or not. An Add to Favorites button keeps whatever is playing, and flips to Remove when it's already saved.
- Favorites first, radio as an appliance. The app opens with your favorites focused; Enter plays. Play Last Station (Ctrl+L) resumes whatever you had on, and Resume Last Station on Launch makes launching the app all you ever do. A Recently Played menu keeps your last fifteen stations one keystroke deep.
- A real Favorites Manager. Folders of any depth (News/Morning style), live search across names, countries, tags, and folders, Move Up/Down, and Mark-and-Move for long hops. Rename any station to what you call it; rename folders with F2; deleting a folder walks its stations safely back to the top level -- never out of your collection.
- What's Playing. Ctrl+T speaks the current track or show title straight from the stream's metadata; an optional check item announces titles as they change.
- Recording, grown up. Record what you're hearing, record a different station while you listen to something else, or schedule shows once, daily, or weekly -- picking straight from your favorites, no typing. The new Recordings list shows everything -- recording now (size growing live), recorded, and scheduled -- with Play (Stop while it plays), Stop Recording, Open in Folder, and Remove. And recordings now survive dropped connections: ffmpeg rides out short gaps, and a true drop resumes into a numbered part file, with attempts and spacing yours to tune.
- Wake up with the radio. The sleep timer got its twin: pick a favorite, a time, once or every day. (The app must be running -- the tray counts.)
- Never double-plays. Starting any stream silences whatever else was playing, radio or podcast, in every app.
- Per-station volume memory. Every favorite remembers the volume you gave it.
- Hardware media keys control the app system-wide, even from the tray.
- The Command Palette (Ctrl+Shift+P), scoped to exactly this app's commands.
- One data store. Favorites (folders, names, volumes), history, recordings, timers, settings -- shared with QUILL and QUILL Cast. Set it up once, have it everywhere.
- Two flavors, everything bundled. A system installer and a truly portable zip whose
datafolder keeps your whole radio on the stick. ffmpeg included, its own app icon, no downloads ever -- and if ffmpeg somehow goes missing, Help > Get FFmpeg... restores it from the official source. In-app Check for Updates knows which flavor you run and downloads the matching artifact with spoken progress, offering Install now. - Report a Bug, built in. Files an issue straight from the Help menu, no GitHub account needed, stamped with Quill Radio's own version.
- Spoken feedback everywhere, through JAWS, NVDA, or Narrator, without stealing focus.
Known notes for this release
- Releases are not yet code-signed: Windows SmartScreen may warn on first run. Choose More info, then Run anyway. Signing is planned.
What Quill Radio deliberately is not
It is not QUILL minus some menus -- it is the radio, period. The editor, AI, transcription, braille, and speech-synthesis stacks are not installed at all.
Not a fork -- a guarantee
Quill Radio runs the exact same radio feature code as QUILL, from the same upstream package. Fixes land once and reach QUILL, Quill Radio, and QUILL Cast together. This repository carries only the wrapper, the installer, the icon, and these docs.
Dependencies
Playback uses Windows' built-in media engine; recording uses the bundled ffmpeg; station search uses the community RadioBrowser directory; the ACB Media directory is bundled. Every network call the app can make is inventoried in QUILL's public network-egress audit.
Requirements
Windows 10 or 11, x64 (or ARM64 under emulation). No Python installation required.