🆕 New Features and Important Changes
Auto-Assign Folders to Playlists : If you select a folder in the Music Files manager and add it to one or more playlists, any songs uploaded inside that folder (via the web interface or SFTP) will automatically be added to that playlist. If the files in the folder are also in other playlists, they won't be removed from those playlists, just added to the folder's playlists.
⏱ Streamer Schedules : You can now set scheduled times when streamers are supposed to be broadcasting. You can choose to "enforce" this schedule, which means that the streamer/DJ can only connect during their scheduled time and no other times.
⏱ Schedule View : Now that both playlists and streamers are scheduled, you can use AzuraCast to produce a full schedule lineup for your station including both upcoming scheduled playlists and scheduled DJ/streamers. We have created new schedule API endpoints to facilitate this, and added a new "Schedule" section to station profiles.
Record Live Broadcasts : Thanks to several improvements within AzuraCast, we now track the start and end times for every DJ/streamer broadcast. You can view the full history for each streamer by clicking the "Broadcasts" button next to their name. We also now offer the ability to automatically record live broadcasts; the recording of each given broadcast can be viewed in the same "Broadcasts" panel. Also, when viewing the song playback timeline, you will be able to see which DJ/streamer was live when a particular track was broadcast.
🔧 Advanced Liquidsoap Configuration Editor : We've replaced the single "Advanced Custom Configuration" field in the station profile with a newer, much more powerful editor tool for directly editing Liquidsoap configuration. This editor shows the automatically generated configuration alongside your custom code, and allows you to inject custom code in multiple new places.
Visual Cue Point Editor : Thanks to a pull requested contribution from Bjarn Bronsveld, you can now edit a music file's cue-in/cue-out/fade-in/fade-out points with a rich, interactive waveform viewer that shows markers for each of the specified points. This offers a significantly improved experience over the previous timestamp input fields (which can still be manually edited if necessary).
🆕 New IP Geolocation Options : With the changes to the MaxMind GeoLite database, we've abstracted out how we perform IP geolocation. By default, all Docker installations come with the DBIP lookup tool, which is suitable for a majority of use cases. If you prefer GeoLite for its result accuracy, you can enter a license key acquired from their web site and AzuraCast will download and use the GeoLite database instead.
🐛 Bug Fixes and Minor Improvements
azuracast_web_v2Docker image is now directly tied to the main code repository, so rolling-release updates are much faster and involve far less load time.
Multiple playlists can now have the same name (#2281).
💻 The "Prefer Browser URL" and "Enable SFTP Server" settings have been tweaked so they will behave more sensibly, and will not interfere with portions of AzuraCast's web interface that make API calls.
⚡️ Several sections of AzuraCast (including, notably, the Duplicate Songs report and Radio Automation code) have been heavily optimized to avoid memory overflow with very large music libraries. (#2003)
⚡️ Liquidsoap has been updated to version 1.4.1.
Quotas are now enforced within the built-in SFTP server. (#2315).
You can now directly provide an amplification value that Liquidsoap will use on each track from the media manager. (#2334)
⏱ The AzuraCast AutoDJ's scheduling code has been significantly overhauled to be easier to maintain and to fix a number of "edge case" scenarios; you should now see much more accurate track selection that more reliably avoids duplicate artists/tracks while still preferring higher weighted playlists.
In situations where files are served directly from the filesystem, we now take advantage of nginx's built-in
X-Accel-Redirectfunctionality to instruct nginx to serve the file directly from disk instead of passing it through PHP; this results in much faster and more reliable downloads for media previewing, album art, historical broadcasts, backups, and more.
In newer Vue components (i.e. the media manager, playlist manager, streamer manager) modal dialog boxes will autofocus on the relevant input, and the enter key will submit the modal dialog's form as expected (#2449).
👀 When previewing a music track or other finite-length file within the AzuraCast web interface, you can seek through the file using a new progress slider alongside the player controls in the header menu.
You can now make the Listener map fullscreen if desired.
🆕 New Features
⚡️ Updated to Liquidsoap 1.4.0 : Both Ansible and Docker installations have been updated to version 1.4.0 of Liquidsoap. This new version introduces smarter crossfading, better UTF-8 support and a number of quality-of-life improvements. Some of the syntax of the new version is not backwards-compatible with the previous versions, so updating is highly recommended for all users to avoid errors.
🆕 New Playlist Manager : Alongside the new Media Manager released in the previous version, we have also rebuilt the Playlist manager to be a fully interactive Vue.js component. This allows for inline editing, reordering, and removal of playlists, and support for the new scheduling features detailed below.
⏱ Playlist Scheduling Improvements : All playlist types can now be scheduled, and any single playlist can now have multiple schedule entries. Schedule entries can also have a start and end date, for limited-time announcements or seasonal content.
🐛 Bug Fixes/Updates
- ⏱ Increased the timeout allotted to backups (#2149, #1717) and backup restoration (#2166).
- 🐳 The built-in Docker FTP service will now use the correct external IP for PASV connections, so it will be compatible with significantly more clients.
- When specifying times for media fade-in/fade-out/cue-in/cue-out, you can specify the time in mm:ss format rather than in total seconds if you prefer (#2117).
- Various accessibility improvements across the system.
- 👷 Saving playlists will no longer block the web request, and will be handled instead by a separate worker process, allowing for larger playlists to be saved more frequently (#2068).
- ✅ Modified the way we check for the latest CA certificates to avoid stability issues.
- 🛠 Fixed a bug where clicking breadcrumb navigation in the Media Manager would show all files as "not processed" (#2086).
- Avoid writing to a temporary directory in cases where a song is already locally stored on the server, which should cut down significantly on temporary directory sizes.
🚀 This release includes some infrastructural changes to the application, along with several bug fixes.
⚡️ Updated to PHP 7.4: With the general availability of the latest version of PHP, version 7.4, we wanted to update as soon as possible to take advantage of the performance improvements and new code features available. All installations running this version or later will be on PHP 7.4 or newer.
Switched Built-in FTP Service to SFTP: We encountered a number of issues with our previous built-in FTP service, from trouble with the passive IP range to issues forwarding traffic and some problems with incomplete files being uploaded. These are all resolved with our switch to SFTP, which uses one port (by default, 2022, though this is modifiable by changing/adding
.envon the host) to handle all incoming connections, is a more modern and secure specification, and supports so-called "atomic" copies, where files are only moved into the destination folder after they are fully uploaded, preventing partial processing errors. The only change from a user experience is that now you must create one or more SFTP-specific accounts for each station rather than using your existing AzuraCast credentials.
GeoLite IP Geolocation Database Changes: The provider of the free GeoLite database, MaxMind, decided to change (with very short notice to users) how they supply the GeoLite IP geolocation databases that we use to add listener location and map coordinates to our Listeners report. This means we can no longer automatically package it with our installations. Instead, if you want to use the Listeners mapping feature, you must visit the new "Install GeoLite Database" page in system administration and supply a license key, available for free from the MaxMind site. We will then automatically download the latest GeoLite database, and keep it updated for you.
The mini music player inside the AzuraCast interface is now inline with the header menu instead of accessed via a dropdown menu.
/frontendfolder. This should have no impact on a vast majority of users, but if you are looking to make custom changes to how the application is styled, be aware that those files are now located somewhere new.
🐛 Bug Fixes
- ⚡️ Updated the Total Listener Hour calculation to be much smarter about overlaps. #2186
- 🛠 Fixed an issue where filenames, once converted from Unicode, were longer than 255 characters and broke things. #2205
- 🛠 Fixed some issues with automatically assigned custom fields. #2207
- 🛠 Fixed localization not working properly on several new frontend Vue components. #2252
- 🛠 Fixed a bug preventing stations from being cloned with SFTP users. #2276
- 🛠 Fixed a minor bug where "Please wait..." still showed if you restarted broadcasting on some pages. #2262
🚀 Note: It is recommended not to install AzuraCast via the GitHub release assets listed below. Follow our update instructions to update your installation to the latest version.
🆕 New Features
🆕 New Media Manager : The Media Manager is one of the core parts of the AzuraCast experience, and we want it to be as smooth and usable as possible, so we rebuilt it from the ground up using the Vue frontend framework. The new media manager features snappier response times, tooltips on buttons, a new "add to playback queue" button, inline renaming of directories, and a brand new inline media editor and album art manager that lets you customize tracks without ever leaving the main media manager page.
🐳 You can now customize even more of the AzuraCast Docker installation parameters by modifying configuration lines in your local azuracast.env file.
🐛 Bug Fixes
⚡️ We have resolved a major issue with one of our third-party libraries that causes "No valid bundles" errors to appear any time AzuraCast attempts to connect to a secure URL. This can happen even on pages that don't seemingly make any external connections (i.e. the media manager), because these pages depend on third-party services (i.e. IP address resolution) to display some part of their data. Updating is strongly recommended to resolve this issue.
⚡️ An issue causing updates to fail because of outdated cached Doctrine configuration has been resolved.
⚡️ Several parts of the system have been optimized to handle large library sizes without running out of memory. This is an ongoing project that will require more time to complete.
- ⚡️ This version includes a significant number of code quality improvements under the hood. You won't notice many of these changes (including optimized Redis session handling, new dependency-injected CLI commands and entity repositories), but they are meant to make AzuraCast's code much more consistent and easier to maintain, which means faster bug fixes and more new features!
🚀 This is a minor version release that includes updated Packagist dependencies and resolves issues that prevented Ansible ("Traditional") installations from proceeding. Updating to at least version 0.9.7 is recommended for all users, and 0.9.7.1 is necessary for new users installing via the (mostly unsupported) Ansible installation method.
🚀 It's only been just over a month since AzuraCast 0.9.5.1 was released, but we've made some very significant, very important updates to the software in that time, especially in the fields of reliability and performance.
🆕 New Features
The AzuraCast AutoDJ is Back : A few versions ago, we had attempted to switch entirely to using Liquidsoap for our AutoDJ. We've come to realize in the months since then that we actually need our own AutoDJ management component for important reasons, so we brought it back. It's also been improved to include a few new features. Benefits of using the AzuraCast AutoDJ include:
- Being able to see the next song that will play in the queue,
- Applying playlist changes without reloading all of AzuraCast, and
- Avoiding songs playing back-to-back with either the same title or the same artist using our duplicate prevention system.
Introducing AzuraRelay : This version of AzuraCast has built-in support for our new "relay-in-a-box" software AzuraRelay. Simply drop AzuraRelay onto a server that can run Docker, answer a few quick questions, and it will automatically connect to AzuraCast, detect all stations, and relay them all. It will also list itself as a relay on the "host" AzuraCast station, and report back listener and client details as well.
Two New NowPlaying API Sources : Our most powerful and comprehensive set of data is all compiled into what we call the "Now Playing" API, which is a rich summary of the state of a radio station at the moment. To improve performance of more popular stations using our software, we've introduced two new methods of accessing this data: a static JSON file and a live Websocket/EventSource-driven plugin. You can read more on our new Now Playing Data APIs Guide.
🐛 Bug Fixes and Minor Updates
- ⚡️ Icecast has been updated to 2.4.0-kh12.
- 🐳 By default, the Docker installation has ports open for the first 50 stations, up from the first 10.
- 🛠 Fixed an issue with automatic port assignment not working in some cases.
- 🍱 Fonts are now locally hosted along with other static assets, which makes the entire installation self-contained.
- The currently playing song is written atomically to
/var/azuracast/stations/(station_name)/nowplaying.txt, which is particularly useful for our radio-video-stream example project.
- ⚡️ The Docker update script will now check for differences between the latest Docker Compose file and your local copy and only prompt if they're different, and will pull new images before bringing down existing ones, reducing station downtime during updates.
- ⚡️ Updated Ansible installation to ensure it works with Raspberry Pi 3/ARM64 devices.
- If you are leaving a page with a form on it that has unsaved changes, you will be prompted to confirm leaving the page.
- 🐎 Web servers will now more aggressively cache the hashed static assets used in AzuraCast, improving performance.
- ➕ Added a new default album art image.
- Re-added the "clear playlists" button on media management, which does the same thing as clicking "Set Playlists" with songs selected, selecting no playlists, and clicking "Save".
🚀 This incremental minor version release adds support for AzuraCast's built-in FTP server on Docker installations, which allows you to use your AzuraCast credentials to log in and manage media via a high-performance FTP server.
🚀 This is a minor incremental release that offers some bug fixes and improvements to the 0.9.6 version release.
Notable changes include:
- 🛠 Fixed an issue with remote-only streams not properly showing their now-playing data.
- 🛠 Fixed a bug where media deleted via FTP/SFTP wouldn't be cleared from playlists.
- 👌 Improve performance of the Redis cache by consolidating to a single active database connection.
- 🐎 Further improve Redis performance by preventing unnecessary session creation under the hood.
- 👉 Make the Statistics Overview page use the station's time zone.
- ➕ Add support for the Turkish locale.
- ➕ Add localization to API responses and CLI commands, where possible.
🚀 This is a minor release to ensure that all users are on the latest version. It includes a few new features and several bug fixes from version 0.9.6.
🆕 New Features
🌲 Audit Log : We now keep track of changes made to important database tables (stations, users, settings, mount points, relays, custom fields, etc.) and log them, along with the specific changes made and the user who made them, in a special reports table. You can view this report via the "Audit Log" link in the global system administration.
Per-Mount/Relay Listeners : We have expanded our listener metrics to show the listener count associated with each individual mount point and remote relay on your station, so you can see which of your mounts/relays are generating the most traffic.
Total Listener Hours/Listener CSV Export : We have added a "Total Listener Hours" calculation to our Listeners report, along with the ability for you to export the report's contents to a CSV file. Many areas use TLH as a measurement of radio royalty payments instead of the Actual Total Performances used by SoundExchange. Check with your local jurisdiction to determine the best way to report listeners for royalty payments.
🐛 Bug Fixes/Other Updates
0️⃣ By default, the new websocket/eventsource-driven "now playing" API is disabled on new installations, as it has been known to have some issues in certain hosting scenarios. You can always turn it on via the system-wide Settings panel, and if your installation is serving a large number of radio listeners, you are strongly encouraged to do so.
The public radio player will now show a live DJ's name if one is live.
👉 Tweaked the AzuraCast AutoDJ's duplicate artist/title prevention algorithm to be more forgiving of playlists that either have no artist or have the same artist on all tracks.
⬆️ Under the hood, we have upgraded our underlying PHP framework (Slim) to version 4, which brings us into much closer compliance with a number of PHP Standards Recommendations, or PSR, specifications.
The application has been almost completely translated into Russian.
⚡️ Updated our PLS/M3U file generation to properly include remote relays and show stream names on clients like VLC.
🛠 Fixed a scenario where hundreds of "zombie processes" were being created by AzuraCast sending notification messages to the nchan websocket now-playing service.
🛠 Fixed a bug where AzuraRelay relays kept being newly recreated every time the relay sent its "Now Playing" update to the parent server.
👀 Relays themselves (which were previously seen by the system as standard listeners) are now excluded from both listener reports and the total listener count.
When determining your external-facing IP address (which requires pinging a service that's not located on your installation, one of the few times we do this), we have switched to using our own AzuraCast Central server for this service, so that we can avoid sending your IP to any third-party services. This service simply echoes back your external IP to you via JSON, and the IP isn't used for anything else.
🚀 Work on AzuraCast never stops, and with the project increasing in popularity, we've been even busier than before. A lot of new improvements have rolled out over the last month, along with a ton of bug fixes. This point release includes:
🆕 New Features
Theme Improvements : We've made some changes to our theme to make it more intuitive, easier to use and more accessible for mobile phone users. Buttons are bigger and clearer, forms are organized in a more concise way, and the station's profile page now gives you direct access to important functions.
⏱ Schedule Overhaul : Previously, each user had their own time zone on their profile, and the system had a default time zone setting, but schedules were based on UTC and constantly had to be converted back and forth from the user's local time. This conversion caused a number of problems. To address them, we completely restructured the time zone system. Now, each station has its own time zone, and all scheduled playlists are based on this time zone. Liquidsoap and Icecast/SHOUTcast are also run in this time zone, so schedule times (and logs) will always be consistent.
API Parity : We've done a lot of work to make all of the core functionality of AzuraCast available via our REST API, and we're pleased to announce that as of this release, all major functions are possible entirely via API calls, both for global administration and per-station management functions. As a reminder, you can visit
your-azuracast-url/apifor API documentation specific to your installed version that you can test in-browser against your own installation.
A Prettier Public Player : Our public player has been rewritten as a standalone Vue component (so you can use it for your own custom players, too), and it got a big design update as part of that process. The biggest new feature is the ability to switch between available mount points and remote streams. The player is also now much more resilient to disconnection and will intelligently reconnect after a few seconds.
🐎 Station cloning has been rebuilt from the ground up to fix a number of issues and to improve its performance with large music libraries.
🚚 The "Reorder Playlist" page now includes buttons to manually move playlist items up and down, making the page accessible for those using screen readers.
🐛 Bug Fixes
Per #1400, the Streamers/DJs page will not let you use certain characters in your DJ passwords that are known to cause problems with Liquidsoap authentication.
🛠 Fixed #1405 and other bugs related to the new Liquidsoap AutoDJ process that prevented AzuraCast from getting proper "rich metadata" about the currently playing song (i.e. duration, source playlist, etc).
🛠 Fixed #1499 and #1459, bug reports relating to the default settings used for AAC and OPUS streams in Liquidsoap. We also added the
libsampleratelibrary to Liquidsoap, which greatly improves conversion from one sample rate to another (as is often necessary with OPUS streams).
🚀 As of this release, we are no longer supporting new installations via the Ansible ("Traditional" or "Bare-metal") installation type. These installation types have represented a disproportionate amount of support issues, and have put a very heavy toll on our volunteer support team, so we have removed the Ansible installation instructions from our homepage completely. We will continue to distribute updates to existing users, and we will make our best efforts to continue feature parity between both installation types.
⏱ You can now set playlist schedule times on a per-minute basis via HTML5
<input type="time">fields, instead of the 15-minute increment dropdowns.
⏱ The "Once per Day" playlist schedule type has been merged into the main "Scheduled" type. Just set the start and end times to be the same to achieve the same effect. Existing playlists were converted to this format automatically.
🚦 If you have "Normalization and Compression" turned on, this will now use a slightly different function inside Liquidsoap, which produces a cleaner, crisper audio signal.
If AzuraCast detects that you've modified your installation locally (specifically your Ansible/"Traditional" installation), error reports won't be sent to our Sentry service even if it's turned on. We were getting a huge number of error reports about code we didn't write!