- Check whether Jamendo songs are streamable before enqueuing them
- Docker setup works with arbitrary container names
- Simplified client streaming settings
- Client streaming configurable from docker setup
- Playlists are not suggested if the platform is not available
- Fixed apt dependencies during install
- Don't crash the install when admin files are already present
- Different Levels of interactivity can be set in the settings: Full Control, Full Voting, Upvotes only, No Control
- Added option to enqueue songs at the top of the queue rather than the bottom
- Fixed a bug where the main page could not be loaded when no song provider was enabled
- Dynamic streaming possible with Youtube songs
- Added song cooldown option that prevents a song from being enqueued again for a given time
- Added buzzer success probability option. Custom sounds can be provided in
resources/sounds/yes
andresources/sounds/no
. - Dropdown icons have descriptions
- Removed link to /stream from dropdown
- Added button to send feedback
- Moved "Delete Current Song" button to Queue Control, which is available on docker setup
- Visualization correctly works on big screens. Previously, a scaling would lead to an only partially visible visualization.
- Prevent hashtag scrolling for distances < 1 pixel
- Fixed bug where the is-service-active check would crash for uninstalled services
- Do nothing if the currently active task strategy is requested
- Hotspot status shows whether it would start without homewifi instead of whether it is currently enabled
- Changed message when no online suggestions are returned
- Each section in settings can be collapsed, making them much more usable
- PYTHONOPTIMIZE set to 1. pycparser has problems with level 2.
- Refactoring: mypy and pylint run without complaining
- Simplified control flow, added type hints, sorted imports, etc.
- Added instructions to CONTRIBUTING.md
- Reordering songs works from mobile devices
- The host that is used to check internet connectivity can be configured
- New music only mode: removed suggestions for playlists, no "Error" suggestions are shown
- manage.py celery is now manage.py startcelery
- celery module renamed, update your docker-compose.yml. systemd service is updated automatically
- Sites other than
/musiq
are not tracked for user activity anymore - Filepaths are quoted, allowing for more obscure filenames in the local library (#126)
- PYTHONOPTIMIZE is set in production, stripping docstrings and skipping asserts
- Include resources folder in PyPi package
- Big visualization rework:
- Visualization is more robust and more performant
- A Pi 4 can comfortably render HD@30fps, before performance always degraded significantly
- Switched library from pi3d (Python) to glium (Rust)
- Moved the code into its own repository: https://github.com/raveberry/visualization
- Optimized for tile-based GPUs: render directly to framebuffer, smaller and less complex shaders, less draw calls, moved computation to the CPU
- Programs are loaded dynamically, new shaders will show up as new programs
- UPS and resolution can be can be configured in
/lights
- X resolution is adjusted to adapt to performance fluctuations
- Instead of a white xterm, the Raveberry logo is shown when no screen program is active
- Added new screen program that loops through a colored Raveberry logo
- Removed old code and dependencies
- Hide programs that require cava if it is not installed
-
Raveberry exits explicitly when restarting. Sometimes, it needed to wait for a timeout, now restarts are much faster.
-
Task strategy can be switched between celery and threads for low memory devices
-
Visualization is possible from docker setup
-
Added environment variable for docker setup to deal with CSRF issue
-
Host and IP for all services can be set via environment variables
-
Merged
icecast.docker-compose.yml
anddocker-compose.yml
, only the latter one exists now -
MOPIDY_OUTPUT
can now contain slashes, e.g. for paths of filesinks -
Created dedicated resources folder for images/videos/sounds
-
raveberry system-install
is now justraveberry install
-
Added
raveberry install --use-default-password-i-promise-ill-change-it
to allow easier scripted installs -
Move to actively developed PCA library for the led strip
-
Problematic python dependencies are forced to be install from wheels, speeding up installation
-
Install cava from apt instead of building from source, speeding up installation
-
Simplified cava config
-
Changed message when there are no hashtags
-
Removed unused scripts
-
Buzzer cooldown is a float
-
Ansible warning silenced
- Restructured code into a backend folder to clean up the root folder
- Added link to new discord server into readme
- Debug setup uses threads instead of celery, speeding up reload significantly
- Docker images are tagged with the version
- Lights worker flushes the settings cache before loading settings. Program changes apply immediately.
- Big suggestion improvements:
- Trigram similarity is used instead of full text search
- Now Raveberry can provide suggestions for substrings, stop words (and, a, the etc.) and typos
- This is slower, but GIN indexes and config tweaking minimize overhead
-
Song metadata is cached in the database. Suggestions are now faster than before, despite the slower query.
-
Directly after the update, durations are shown incorrectly. Either wait until metadata is synced automatically overnight, or run:
-
sudo -u www-data python3 /opt/raveberry/manage.py syncsongmetadata
-
Upgraded to Django 4.0. This was necessary to use functional indexes.
-
Django 2.2 would be out of support soon anyway, so now was a good time.
-
Python 3.8 or higher is now required.
-
The main reason for not upgrading was that multiple asgi-requests could not be processed in parallel since Django 3.0.
-
In 4.0, context-aware
sync_to_async
removes this issue, finally allowing the upgrade without usability impact. -
When checking whether voting is allowed on server side, a redis transaction is used to reduce performance impact.
-
Settings are cached for a short time, removing load from tasks that query settings often when they change very rarely.
-
Only some instead of all urls are used to measure activity (page loads, voting and musiq requests) to decrease performance impact.
-
Switched from youtube-dl to yt-dlp, significantly increasing download speed.
- Fixed bug where color definitions got lost in the css minification process
- Tapping an "error" suggestion does nothing
- Buttons for queue control are further apart (and thus harder to mis-select)
- Suggestions are much more responsive:
- The first line (the query itself) is shown immediately
- Offline suggestions are shown as soon as they are ready and don't wait for the online suggestions
- Placeholders for online suggestions until they are available
- Different platforms (e.g. Youtube and Spotify) are queried in parallel
- Increase dhcp ip range for hotspot
- Bluetooth scanning and connecting does not spit a huge error anymore. Cause was that requests were sent twice.
- Song duration is shown in song info modal. Current song duration can now be determined
- Ring visualization improved
- The Raspberry Pi's internal pwr led (red) is disabled when the ring is active
- The internal act led (green) indicates active Raveberry requests
- Add option for server-side vote duplication checking by IP
- Use session keys instead of IPs to link requests logs
- Most active device entry is sorted correctly in analysis section
- Page does not scroll on mobile after clearing the input field
- Old hashtag doesn't start scrolling when adding a new one
- Correct QR code is shown for hotspot wifi on
/network-info
- Improve documentation for remote feature
- Pin postgres version in docker-compose files
- Admin page in docker container looks fine now
- Frontend files are shipped with the pypi package
- Long modals are scrollable (e.g. changelog, upgrade confirmation dialog)
- Bind address can be specified for reverse ssh tunnel
- If specified, remote ssh key is always overwritten, even if one already exists (#118)
- Allowed discord bot to receive the queue key of requested songs
- System install is tested in CI
- Database is registered correctly in celery workers. New songs will directly appear in suggestions again.
- Current song can be deleted in settings to help recover from disconnection problems (#116)
- Add donation link to readme
- Moved from travis to github actions
- Songs with identical suggestions show their duration for disambiguation in suggestions
- Arrow to insert suggestion into search input field is only shown for online suggestions
- Clearing the song input field is easier, the x has a bigger interaction area
- Analysis results are shown again
- Error message when there are no songs to analyze
- Red and blue colors are more prominent in rainbow LED visualization
- Fix installation issue by quoting rsync argument and pinning ansible (#115).
- Mopidy container also loads jamendo client id from environment.
-
Big Architecture rewrite:
-
State is not kept in a single god-object, but stored in Redis and the database
-
Celery is used for long-running tasks
-
As a result, playback starts with the server, not with the first request
-
redis-server is required for the development server (
raveberry run
) as well -
Pause times are stored in the database, resulting in less mopidy queries
-
Additionally, restarting the server after seeking a song now correctly resumes playback
-
Voting and lights setting changes are possible during alarm
-
Renamed internal name of voting mode, needs to be set again in settings
-
Got rid of
DJANGO_MOCK
andDJANGO_POSTGRES
environment variables. Only "runserver" and "daphne" start Raveberry, other commands don't need extra env vars anymore. -
After login, users are redirected to the page they tried to access
-
Login errors are less ugly
-
Player errors are indicated. Player can be restarted in settings.
-
Removed gunicorn, wasn't supported for a long time anyway
-
Docker container does not run as root
-
Adjusting the screen temporarily stops visualization, because it restarts the worker task
-
Daphne (finally) does not log into syslog anymore
-
Smaller audio files are used for testing
- Big performance improvement: reverted a dependency upgrade that made the server effectively single-threaded
- The embedded speaker icon can now provide
/stream
as well - Pin psycopg2 (fixes #111)
- Made new config key optional
- New feature: the alarm can be triggered anytime by connecting two pins on the Pi, e.g. with a buzzer. Enable in raveberry.yaml with "buzzer" key.
- Fixed youtube autoplay
- Queue updates show instantly instead of after an animation. Updates sometimes got lost when no animation was triggered. Some songs seemed to be downloading forever.
- Added option to disable duplicating audio into cava (only takes effect if any visualization is installed). Due to the large buffer size the playback sometimes gliched.
- Placeholders are correctly linked
- All
/lights
settings are stored in the database
- Migrate databases during setup
- Failing to applay homewifi does not stop setup
- Script that sets output during setup is provided with all credentials
- Voting correctly uses the key of a queued song
- Introducing https://raveberry.party/
- Jamendo support
- Added option to limit queue length
- Added option to not show hashtags by default
- Added option to embed the stream in the mainpage, clients stream the music directly from the service (currently only Jamendo)
- Cleaned up docker-compose file
- No more snake_case for frontend: camelCase for js and kebab-case for css and html
- Fixed shareberry link
-
New shuffle all button for the admin that reorders the whole queue (Finally generically implementing reordering animations pays off) (#80)
-
Playlists can be created from songs played during a given time span (#106)
-
snapcast support
-
icecast and snapcast can be selected as a sound output
-
As a side effect, icecast streaming is not reset to be disabled every mopidy config update
-
The Shareberry endpoint tries to extract a url from the received query, fixing Spotify and Soundcloud sharing
-
Disconnected banner does not show when reloading or leaving the page
-
Only one state update handler is registered per page (instead of every handler on every page)
-
The base state is not updated twice every update
-
Disable timer based scheduling in pulseaudio (fixes hdmi sound quality issues, #104)
-
Made documentation regarding system install clearer
-
Reactive lighting starts on a different offset on the LED ring (it was remounted)
-
Removed a lot of code duplication, making new functions a lot easier to implement (hopefully):
- Url patterns are generated dynamically from backend functions
- Ajax endpoints are injected into the html via templating
- Default behavior is added to html elements corresponding to ajax endpoints
- These elements are also generically updated during state updates
- Raveberry is upgraded by a system service, making it finish reliably
- Remove false positives for new versions (pip changed its interface)
- Testing in CI is done in a separate folder, .pyc files are not packaged anymore
- Search engine is only initialized in new databases, speeding up installation
- Due to issues during pairing, devices are connected to directly
- Tested HiFiBerry (it works)
- Config file can be specified in remote installs
- Log to console when testing
- Use svg graphics
- Use localStorage instead of cookies
- Removed some unnecessary state updates
- Youtube playlists, radio and autoplay work again
- Spotify can play albums and artist's top tracks
- Download limit applies to spotify songs
- Keyword filter is applied to artist and in suggestions, instead of only to the title
- Keyword filter is applied to youtube and local requests
- Tools for normalization are installed from packages instead of built from source (speeds up system installation)
- Docker version can normalize m4a files
- Dependencies container uses piwheels, significantly speeding up cross-architecture buidl
- python3 is used by bin/raveberry, even without ansible.cfg
-
Big installation rewrite: ansible is used
-
Update through the webinterface is possible, but it will take some time. See the log in
/var/www
. -
Config is now in .yaml format. Your old config is automatically migrated.
-
Dependencies: Package size reduced.
- Spotify, YouTube and Soundcloud can be specified during install.
- Unavailable platforms are marked in /settings.
- Install and run dependencies separated.
-
mopidy config is not overwritten during install. Spotify credentials are kept across updates.
-
homewifi is respected during install.
-
CSS is minified.
-
QR codes are readable again (styles are not purged anymore).
-
Bluetooth scanning happens in a background thread, server does not hang anymore.
-
Icecast is enabled even if not configured during its install.
-
Key for remote access is stored in a static location.
-
raveberry run
waits for mopidy before starting. -
Visualization:
- Can be installed on systems with desktop environment, open a window.
- The window is closable. Closing will disable the screen program.
- Checking the latest version does not prevent websockets from being opened
- Songs are sortable again when not voting (library was missing)
- Menu slide and modal background are not stripped from css anymore
- Thumbnails of songs from youtube are embedded again
- Linted typescript code
- Reduced size of frontend bundle
- Use less and smaller js libraries
- Only ship used css and fonts
- gzip enabled in nginx
- docker: only nginx contains frontend code
- Bugfix: state was only updated on musiq page
- Huge frontend rework
- Migration to Typescript
- Testing
- Reduced the size of the raveberry package
- The total time of the queue is shown to users with moderator privileges.
- A default favicon is specified, eliminating a 404.
- A backup stream can be provided in the settings that is played whenever the queue is empty
- There should be no more notifications about updates when none are available (sorry)
- Remove CSRF checks for voting methods, as the Discord bot needs to access them.
- Stick to django channels 2.2
- youtube-dl struggles with playlist downloading
- IP of the hotspot is shown in
/network_info
.
- The admin is informed about new versions.
/network_info
now shows info for both networks if the hotspot is enabled.- The button that toggles repeat mode is not hidden in voting mode.
- Added two new options in the settings that modify search behavior.
- Additional keywords can be specified that are added to every query.
- A list of keywords can be given that will be used to filter results. No song containing any of these words will be enqueued (Only for Spotify and Soundcloud).
- Added a "new music only" mode. No suggestions are given and only songs that have never been played are accepted.
- Added local music as a new platform, so local songs can be searched for.
- All superusers act as admin, regardless of username.
- Added a necessary dependency for cava install.
- Fixed install when no hotspot ssid is given.
- Add WLED support.
- Removed the pad.
- Overwrite Youtube's cookie file if it is empty.
- Less verbose CSRF error.
- Add
--local
option toraveberry
command to use a local raveberry copy instead of the installed package. - Hide shuffle and repeat buttons in voting mode as they have no effect anyway when voting.
- Added the
/network_info
page that shows wifi and ip information and allows people to connect with the shown qr codes. - Swapped the pad icon with the qr icon linking to the new page.
- Accessing the
/settings
without being logged in redirects you to the login page. - Light mode works on every page, not just
/musiq
. - Added a shutdown button in
/settings
. - Hide all passwords in
/settings
.
- Fixed a bug where migrations where not performed during install, making it impossible to run Raveberry.
- Credentials can now be passed to the mopidy container via environment variables.
- Disabling stream authentication is now simpler in the docker setup.
- Javascript files are copied into the nginx container. This removes the need of the shared static folder.
DJANGO_MOCK
always uses the debug database, unless otherwise specified withDJANGO_POSTGRES
. It also mocks all url patterns instead of just faking them.
- Clicking the current songs shows further information as well (like it does for songs in the queue)
- Since the little cross at the right end of the input field is a little small, the cursor now moves to the right of the text when tapped. Then, the text can be deleted with the keyboard.
- In voting mode, the voting buttons are now shown to logged in users as well.
- Allow users to upgrade from a config where no hotspot ssid was specified.
- settings.py (the previously largest file) was split into smaller files.
- player.py was split into playback.py and controller.py
- In suggestions, playcount is fetched from the database to avoid presenting stale information.
- Code was made more mypy and pylint compliant.
- The number of suggestions that is shown when searching can be customized.
- The number of online suggestions can be changed for each service individually.
- The name of the WiFi created by Raveberry can be changed in the config file.
- Due to a bug in youtube-dl, it currently crashes during thumbnail embedding. Thus, it was temporarily disabled.
- The config file is persisted during system installation. Now a custom config can be used during upgrade.
- css files are published, removing the need of building them on device.
- Dependencies were cleaned up.
- Packages that control leds are not required anymore (as one of them caused a segfault).
- libsass was removed, speeding up the docker build.
- Users can vote 10 times in 30 seconds instead of once every 5 seconds
- Unavailable options are greyed out in settings
- Requesting archived musiq also toggles the upvote button
- If more than one backend is configured, only one online suggestion per service is displayed
- watson is used to search the database for suggestions
- Bump django to 2.2.13
- Started keeping this changelog.
- Songs are now upvoted automatically after requesting. This required removing the placeholders as a special queue instance. Now, every request results in a persisted queue entry that is removed on error. The db-key of this queue entry is handed back to the client for upvoting. As a side effect, the new placeholders can be reordered, voted for and even removed. This required some refactoring, but now the request process is a little less convoluted.
- Decreased the number of votes required to kick a song to 2, as every song starts out with 1 now.
module-bluetooth-policy
is loaded on boot, which is needed by some devices.- Added version information in the settings.
- Added option to upgrade raveberry in the settings.