kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
1264 wiersze
41 KiB
Plaintext
1264 wiersze
41 KiB
Plaintext
Changelog
|
||
=========
|
||
|
||
You can subscribe to release announcements by:
|
||
|
||
- Following `funkwhale@mastodon.eliotberriot.com <https://mastodon.eliotberriot.com/@funkwhale>`_ on Mastodon
|
||
- Subscribing to the following Atom feed: https://code.eliotberriot.com/funkwhale/funkwhale/commits/develop?format=atom&search=tag
|
||
|
||
This changelog is viewable on the web at https://docs.funkwhale.audio/changelog.html.
|
||
|
||
.. towncrier
|
||
|
||
0.14.1 (2018-06-06)
|
||
-------------------
|
||
|
||
Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html
|
||
|
||
Enhancements:
|
||
|
||
- Display server version in the footer (#270)
|
||
- fix_track_files will now update files with bad mimetype (and not only the one
|
||
with no mimetype) (#273)
|
||
- Huge performance boost (~x5 to x7) during CLI import that queries MusicBrainz
|
||
(#288)
|
||
- Removed alpha-state transcoding support (#271)
|
||
|
||
Bugfixes:
|
||
|
||
- Broken logging statement during import error (#274)
|
||
- Broken search bar on library home (#278)
|
||
- Do not crash when importing track with an artist that do not match the
|
||
release artist (#237)
|
||
- Do not crash when tag contains multiple uuids with a / separator (#267)
|
||
- Ensure we do not store bad mimetypes (such as application/x-empty) (#266)
|
||
- Fix broken "play all" button that played only 25 tracks (#281)
|
||
- Fixed broken track download modal (overflow and wrong URL) (#239)
|
||
- Removed hardcoded size limit in file upload widget (#275)
|
||
|
||
|
||
Documentation:
|
||
|
||
- Added warning about _protected/music location in nginx configuration (#247)
|
||
|
||
|
||
Removed alpha-state transcoding (#271)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
A few months ago, a basic transcoding feature was implemented. Due to the way
|
||
this feature was designed, it was slow, CPU intensive on the server side,
|
||
and very tightly coupled to the reverse-proxy configuration, preventing
|
||
it to work Apache2, for instance. It was also not compatible with Subsonic clients.
|
||
|
||
Based on that, we're currently removing support for transcoding
|
||
**in its current state**. The work on a better designed transcoding feature
|
||
can be tracked in https://code.eliotberriot.com/funkwhale/funkwhale/issues/272.
|
||
|
||
You don't have to do anything on your side, but you may want to remove
|
||
the now obsolete configuration from your reverse proxy file (nginx only)::
|
||
|
||
# Remove those blocks:
|
||
|
||
# transcode cache
|
||
proxy_cache_path /tmp/funkwhale-transcode levels=1:2 keys_zone=transcode:10m max_size=1g inactive=7d;
|
||
|
||
# Transcoding logic and caching
|
||
location = /transcode-auth {
|
||
include /etc/nginx/funkwhale_proxy.conf;
|
||
# needed so we can authenticate transcode requests, but still
|
||
# cache the result
|
||
internal;
|
||
set $query '';
|
||
# ensure we actually pass the jwt to the underlytin auth url
|
||
if ($request_uri ~* "[^\?]+\?(.*)$") {
|
||
set $query $1;
|
||
}
|
||
proxy_pass http://funkwhale-api/api/v1/trackfiles/viewable/?$query;
|
||
proxy_pass_request_body off;
|
||
proxy_set_header Content-Length "";
|
||
}
|
||
|
||
location /api/v1/trackfiles/transcode/ {
|
||
include /etc/nginx/funkwhale_proxy.conf;
|
||
# this block deals with authenticating and caching transcoding
|
||
# requests. Caching is heavily recommended as transcoding
|
||
# is a CPU intensive process.
|
||
auth_request /transcode-auth;
|
||
if ($args ~ (.*)jwt=[^&]*(.*)) {
|
||
set $cleaned_args $1$2;
|
||
}
|
||
proxy_cache_key "$scheme$request_method$host$uri$is_args$cleaned_args";
|
||
proxy_cache transcode;
|
||
proxy_cache_valid 200 7d;
|
||
proxy_ignore_headers "Set-Cookie";
|
||
proxy_hide_header "Set-Cookie";
|
||
add_header X-Cache-Status $upstream_cache_status;
|
||
proxy_pass http://funkwhale-api;
|
||
}
|
||
# end of transcoding logic
|
||
|
||
|
||
0.14 (2018-06-02)
|
||
-----------------
|
||
|
||
Upgrade instructions are available at
|
||
https://docs.funkwhale.audio/upgrading.html
|
||
|
||
Features:
|
||
|
||
- Admins can now configure default permissions that will be granted to all
|
||
registered users (#236)
|
||
- Files management interface for users with "library" permission (#223)
|
||
- New action table component for quick and efficient batch actions (#228) This
|
||
is implemented on the federated tracks pages, but will be included in other
|
||
pages as well depending on the feedback.
|
||
|
||
|
||
Enhancements:
|
||
|
||
- Added a new "upload" permission that allows user to launch import and view
|
||
their own imports (#230)
|
||
- Added Support for OggTheora in import.
|
||
- Autoremove media files on model instance deletion (#241)
|
||
- Can now import a whole remote library at once thanks to new Action Table
|
||
component (#164)
|
||
- Can now use album covers from flac/mp3 metadata and separate file in track
|
||
directory (#219)
|
||
- Implemented getCovertArt in Subsonic API to serve album covers (#258)
|
||
- Implemented scrobble endpoint of subsonic API, listenings are now tracked
|
||
correctly from third party apps that use this endpoint (#260)
|
||
- Retructured music API to increase performance and remove useless endpoints
|
||
(#224)
|
||
|
||
|
||
Bugfixes:
|
||
|
||
- Consistent constraints/checks for URL size (#207)
|
||
- Display proper total number of tracks on radio detail (#225)
|
||
- Do not crash on flac import if musicbrainz tags are missing (#214)
|
||
- Empty save button in radio builder (#226)
|
||
- Ensure anonymous users can use the app if the instance is configured
|
||
accordingly (#229)
|
||
- Ensure inactive users cannot get auth tokens (#218) This was already the case
|
||
bug we missed some checks
|
||
- File-upload import now supports Flac files (#213)
|
||
- File-upload importer should now work properly, assuming files are tagged
|
||
(#106)
|
||
- Fixed a few broken translations strings (#227)
|
||
- Fixed broken ordering in front-end lists (#179)
|
||
- Fixed ignored page_size paremeter on artist and favorites list (#240)
|
||
- Read ID3Tag Tracknumber from TRCK (#220)
|
||
- We now fetch album covers regardless of the import methods (#231)
|
||
|
||
Documentation:
|
||
|
||
- Added missing subsonic configuration block in deployment vhost files (#249)
|
||
- Moved upgrade doc under install doc in TOC (#251)
|
||
|
||
|
||
Other:
|
||
|
||
- Removed acoustid support, as the integration was buggy and error-prone (#106)
|
||
|
||
|
||
Files management interface
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
This is the first bit of an ongoing work that will span several releases, to
|
||
bring more powerful library management features to Funkwhale. This iteration
|
||
includes a basic file management interface where users with the "library"
|
||
permission can list and search available files, order them using
|
||
various criterias (size, bitrate, duration...) and delete them.
|
||
|
||
New "upload" permission
|
||
^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
This new permission is helpful if you want to give upload/import rights
|
||
to some users, but don't want them to be able to manage the library as a whole:
|
||
although there are no controls yet for managing library in the fron-end,
|
||
subsequent release will introduce management interfaces for artists, files,
|
||
etc.
|
||
|
||
Because of that, users with the "library" permission will have much more power,
|
||
and will also be able to remove content from the platform. On the other hand,
|
||
users with the "upload" permission will only have the ability to add new
|
||
content.
|
||
|
||
Also, this release also includes a new feature called "default permissions":
|
||
those are permissions that are granted to every users on the platform.
|
||
On public/open instances, this will play well with the "upload" permission
|
||
since everyone will be able to contribute to the instance library without
|
||
an admin giving the permission to every single user.
|
||
|
||
Smarter album cover importer
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
In earlier versions, covers where only imported when launching a YouTube import.
|
||
Starting from this release, covers will be imported regardless of the import mode
|
||
(file upload, youtube-dl, CLI, in-place...). Funkwhale will look for covers
|
||
in the following order:
|
||
|
||
1. In the imported file itself (FLAC/MP3 only)
|
||
2. In a cover.jpg or cover.png in the file directory
|
||
3. By fetching cover art from Musibrainz, assuming the file is tagged correctly
|
||
|
||
This will only work for newly imported tracks and albums though. In the future,
|
||
we may offer an option to refetch album covers from the interface, but in the
|
||
meantime, you can use the following snippet:
|
||
|
||
.. code-block:: python
|
||
|
||
# Store this in /tmp/update_albums.py
|
||
from funkwhale_api.music.models import Album, TrackFile
|
||
from funkwhale_api.music.tasks import update_album_cover
|
||
|
||
albums_without_covers = Album.objects.filter(cover='')
|
||
total = albums_without_covers.count()
|
||
print('Found {} albums without cover'.format(total))
|
||
for i, album in enumerate(albums_without_covers.iterator()):
|
||
print('[{}/{}] Fetching cover for {}...'.format(i+1, total, album.title))
|
||
f = TrackFile.objects.filter(track__album=album).filter(source__startswith='file://').first()
|
||
update_album_cover(album, track_file=f)
|
||
|
||
Then launch it::
|
||
|
||
# docker setups
|
||
cat /tmp/update_albums.py | docker-compose run --rm api python manage.py shell -i python
|
||
|
||
# non-docker setups
|
||
source /srv/funkwhale/load_env
|
||
source /srv/funkwhale/virtualenv/bin/activate
|
||
cat /tmp/update_albums.py | python manage.py shell -i python
|
||
|
||
# cleanup
|
||
rm /tmp/update_albums.py
|
||
|
||
.. note::
|
||
|
||
Depending on your number of albums, the previous snippet may take some time
|
||
to execute. You can interrupt it at any time using ctrl-c and relaunch it later,
|
||
as it's idempotent.
|
||
|
||
Music API changes
|
||
^^^^^^^^^^^^^^^^^
|
||
|
||
This release includes an API break. Even though the API is advertised
|
||
as unstable, and not documented, here is a brief explanation of the change in
|
||
case you are using the API in a client or in a script. Summary of the changes:
|
||
|
||
- ``/api/v1/artists`` does not includes a list of tracks anymore. It was to heavy
|
||
to return all of this data all the time. You can get all tracks for an
|
||
artist using ``/api/v1/tracks?artist=artist_id``
|
||
- Additionally, ``/api/v1/tracks`` now support an ``album`` filter to filter
|
||
tracks matching an album
|
||
- ``/api/v1/artists/search``, ``/api/v1/albums/search`` and ``/api/v1/tracks/search``
|
||
endpoints are removed. Use ``/api/v1/{artists|albums|tracks}/?q=yourquery``
|
||
instead. It's also more powerful, since you can combine search with other
|
||
filters and ordering options.
|
||
- ``/api/v1/requests/import-requests/search`` endpoint is removed as well.
|
||
Use ``/api/v1/requests/import-requests/?q=yourquery``
|
||
instead. It's also more powerful, since you can combine search with other
|
||
filters and ordering options.
|
||
|
||
Of course, the front-end was updated to work with the new API, so this should
|
||
not impact end-users in any way, apart from slight performance gains.
|
||
|
||
.. note::
|
||
|
||
The API is still not stable and may evolve again in the future. API freeze
|
||
will come at a later point.
|
||
|
||
Flac files imports via upload
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
You have nothing to do to benefit from this, however, since Flac files
|
||
tend to be a lot bigger than other files, you may want to increase the
|
||
``client_max_body_size`` value in your Nginx configuration if you plan
|
||
to upload flac files.
|
||
|
||
Missing subsonic configuration bloc in vhost files
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
Because of a missing bloc in the sample Nginx and Apache configurations,
|
||
instances that were deployed after the 0.13 release are likely to be unable
|
||
to answer to Subsonic clients (the missing bits were properly documented
|
||
in the changelog).
|
||
|
||
Ensure you have the following snippets in your Nginx or Apache configuration
|
||
if you plan to use the Subsonic API.
|
||
|
||
Nginx::
|
||
|
||
location /rest/ {
|
||
include /etc/nginx/funkwhale_proxy.conf;
|
||
proxy_pass http://funkwhale-api/api/subsonic/rest/;
|
||
}
|
||
|
||
Apache2::
|
||
|
||
<Location "/rest">
|
||
ProxyPass ${funkwhale-api}/api/subsonic/rest
|
||
ProxyPassReverse ${funkwhale-api}/api/subsonic/rest
|
||
</Location>
|
||
|
||
|
||
0.13 (2018-05-19)
|
||
-----------------
|
||
|
||
Upgrade instructions are available at
|
||
https://docs.funkwhale.audio/upgrading.html
|
||
|
||
Features:
|
||
|
||
- Can now import and play flac files (#157)
|
||
- Simpler permission system (#152)
|
||
- Store file length, size and bitrate (#195)
|
||
- We now have a brand new instance settings interface in the front-end (#206)
|
||
|
||
|
||
Enhancements:
|
||
|
||
- Disabled browsable HTML API in production (#205)
|
||
- Instances can now indicate on the nodeinfo endpoint if they want to remain
|
||
private (#200)
|
||
|
||
|
||
Bugfixes:
|
||
|
||
- .well-known/nodeinfo endpoint can now answer to request with Accept:
|
||
application/json (#197)
|
||
- Fixed escaping issue of track name in playlist modal (#201)
|
||
- Fixed missing dot when downloading file (#204)
|
||
- In-place imported tracks with non-ascii characters don't break reverse-proxy
|
||
serving (#196)
|
||
- Removed Python 3.6 dependency (secrets module) (#198)
|
||
- Uplayable tracks are now properly disabled in the interface (#199)
|
||
|
||
|
||
Instance settings interface
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
Prior to this release, the only way to update instance settings (such as
|
||
instance description, signup policy, federation configuration, etc.) was using
|
||
the admin interface provided by Django (the back-end framework which power the API).
|
||
|
||
This interface worked, but was not really-user friendly and intuitive.
|
||
|
||
Starting from this release, we now offer a dedicated interface directly
|
||
in the front-end. You can view and edit all your instance settings from here,
|
||
assuming you have the required permissions.
|
||
|
||
This interface is available at ``/manage/settings` and via link in the sidebar.
|
||
|
||
|
||
Storage of bitrate, size and length in database
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
Starting with this release, when importing files, Funkwhale will store
|
||
additional information about audio files:
|
||
|
||
- Bitrate
|
||
- Size (in bytes)
|
||
- Duration
|
||
|
||
This change is not retroactive, meaning already imported files will lack those
|
||
informations. The interface and API should work as before in such case, however,
|
||
we offer a command to deal with legacy files and populate the missing values.
|
||
|
||
On docker setups:
|
||
|
||
.. code-block:: shell
|
||
|
||
docker-compose run --rm api python manage.py fix_track_files
|
||
|
||
|
||
On non-docker setups:
|
||
|
||
.. code-block:: shell
|
||
|
||
# from your activated virtualenv
|
||
python manage.py fix_track_files
|
||
|
||
.. note::
|
||
|
||
The execution time for this command is proportional to the number of
|
||
audio files stored on your instance. This is because we need to read the
|
||
files from disk to fetch the data. You can run it in the background
|
||
while Funkwhale is up.
|
||
|
||
It's also safe to interrupt this command and rerun it at a later point, or run
|
||
it multiple times.
|
||
|
||
Use the --dry-run flag to check how many files would be impacted.
|
||
|
||
|
||
Simpler permission system
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
Starting from this release, the permission system is much simpler. Up until now,
|
||
we were using Django's built-in permission system, which was working, but also
|
||
quite complex to deal with.
|
||
|
||
The new implementation relies on simpler logic, which will make integration
|
||
on the front-end in upcoming releases faster and easier.
|
||
|
||
If you have manually given permissions to users on your instance,
|
||
you can migrate those to the new system.
|
||
|
||
On docker setups:
|
||
|
||
.. code-block:: shell
|
||
|
||
docker-compose run --rm api python manage.py script django_permissions_to_user_permissions --no-input
|
||
|
||
On non-docker setups:
|
||
|
||
.. code-block:: shell
|
||
|
||
# in your virtualenv
|
||
python api/manage.py script django_permissions_to_user_permissions --no-input
|
||
|
||
There is still no dedicated interface to manage user permissions, but you
|
||
can use the admin interface at ``/api/admin/users/user/`` for that purpose in
|
||
the meantime.
|
||
|
||
|
||
0.12 (2018-05-09)
|
||
-----------------
|
||
|
||
Upgrade instructions are available at
|
||
https://docs.funkwhale.audio/upgrading.html
|
||
|
||
Features:
|
||
|
||
- Subsonic API implementation to offer compatibility with existing clients such
|
||
as DSub (#75)
|
||
- Use nodeinfo standard for publishing instance information (#192)
|
||
|
||
|
||
Enhancements:
|
||
|
||
- Play button now play tracks immediately instead of appending them to the
|
||
queue (#99, #156)
|
||
|
||
|
||
Bugfixes:
|
||
|
||
- Fix broken federated import (#193)
|
||
|
||
|
||
Documentation:
|
||
|
||
- Up-to-date documentation for upgrading front-end files on docker setup (#132)
|
||
|
||
|
||
Subsonic API
|
||
^^^^^^^^^^^^
|
||
|
||
This release implements some core parts of the Subsonic API, which is widely
|
||
deployed in various projects and supported by numerous clients.
|
||
|
||
By offering this API in Funkwhale, we make it possible to access the instance
|
||
library and listen to the music without from existing Subsonic clients, and
|
||
without developping our own alternative clients for each and every platform.
|
||
|
||
Most advanced Subsonic clients support offline caching of music files,
|
||
playlist management and search, which makes them well-suited for nomadic use.
|
||
|
||
Please head over :doc:`users/apps` for more informations about supported clients
|
||
and user instructions.
|
||
|
||
At the instance-level, the Subsonic API is enabled by default, but require
|
||
and additional endpoint to be added in you reverse-proxy configuration.
|
||
|
||
On nginx, add the following block::
|
||
|
||
location /rest/ {
|
||
include /etc/nginx/funkwhale_proxy.conf;
|
||
proxy_pass http://funkwhale-api/api/subsonic/rest/;
|
||
}
|
||
|
||
On Apache, add the following block::
|
||
|
||
<Location "/rest">
|
||
ProxyPass ${funkwhale-api}/api/subsonic/rest
|
||
ProxyPassReverse ${funkwhale-api}/api/subsonic/rest
|
||
</Location>
|
||
|
||
The Subsonic can be disabled at the instance level from the django admin.
|
||
|
||
.. note::
|
||
|
||
Because of Subsonic's API design which assumes cleartext storing of
|
||
user passwords, we chose to have a dedicated, separate password
|
||
for that purpose. Users can generate this password from their
|
||
settings page in the web client.
|
||
|
||
|
||
Nodeinfo standard for instance information and stats
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
.. warning::
|
||
|
||
The ``/api/v1/instance/stats/`` endpoint which was used to display
|
||
instance data in the about page is removed in favor of the new
|
||
``/api/v1/instance/nodeinfo/2.0/`` endpoint.
|
||
|
||
In earlier version, we where using a custom endpoint and format for
|
||
our instance information and statistics. While this was working,
|
||
this was not compatible with anything else on the fediverse.
|
||
|
||
We now offer a nodeinfo 2.0 endpoint which provides, in a single place,
|
||
all the instance information such as library and user activity statistics,
|
||
public instance settings (description, registration and federation status, etc.).
|
||
|
||
We offer two settings to manage nodeinfo in your Funkwhale instance:
|
||
|
||
1. One setting to completely disable nodeinfo, but this is not recommended
|
||
as the exposed data may be needed to make some parts of the front-end
|
||
work (especially the about page).
|
||
2. One setting to disable only usage and library statistics in the nodeinfo
|
||
endpoint. This is useful if you want the nodeinfo endpoint to work,
|
||
but don't feel comfortable sharing aggregated statistics about your library
|
||
and user activity.
|
||
|
||
To make your instance fully compatible with the nodeinfo protocol, you need to
|
||
to edit your nginx configuration file::
|
||
|
||
# before
|
||
...
|
||
location /.well-known/webfinger {
|
||
include /etc/nginx/funkwhale_proxy.conf;
|
||
proxy_pass http://funkwhale-api/.well-known/webfinger;
|
||
}
|
||
...
|
||
|
||
# after
|
||
...
|
||
location /.well-known/ {
|
||
include /etc/nginx/funkwhale_proxy.conf;
|
||
proxy_pass http://funkwhale-api/.well-known/;
|
||
}
|
||
...
|
||
|
||
You can do the same if you use apache::
|
||
|
||
# before
|
||
...
|
||
<Location "/.well-known/webfinger">
|
||
ProxyPass ${funkwhale-api}/.well-known/webfinger
|
||
ProxyPassReverse ${funkwhale-api}/.well-known/webfinger
|
||
</Location>
|
||
...
|
||
|
||
# after
|
||
...
|
||
<Location "/.well-known/">
|
||
ProxyPass ${funkwhale-api}/.well-known/
|
||
ProxyPassReverse ${funkwhale-api}/.well-known/
|
||
</Location>
|
||
...
|
||
|
||
This will ensure all well-known endpoints are proxied to funkwhale, and
|
||
not just webfinger one.
|
||
|
||
Links:
|
||
|
||
- About nodeinfo: https://github.com/jhass/nodeinfo
|
||
|
||
|
||
0.11 (2018-05-06)
|
||
-----------------
|
||
|
||
Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html
|
||
|
||
Special thanks for this release go to @renon:matrix.org (@Hazmo on Gitlab)
|
||
for bringing Apache2 support to Funkwhale and contributing on other issues.
|
||
Thank you!
|
||
|
||
Features:
|
||
|
||
- Funkwhale now works behind an Apache2 reverse proxy (!165)
|
||
check out the brand new documentation at https://docs.funkwhale.audio/installation/index.html#apache2
|
||
if you want to try it!
|
||
- Users can now request password reset by email, assuming a SMTP server was
|
||
correctly configured (#187)
|
||
|
||
Enhancements:
|
||
|
||
- Added a fix_track_files command to run checks and fixes against library
|
||
(#183)
|
||
- Avoid fetching Actor object on every request authentication
|
||
- Can now relaunch errored jobs and batches (#176)
|
||
- List pending requests by default, added a status filter for requests (#109)
|
||
- More structured menus in sidebar, added labels with notifications
|
||
- Sample virtual-host file for Apache2 reverse-proxy (!165)
|
||
- Store high-level settings (such as federation or auth-related ones) in
|
||
database (#186)
|
||
|
||
|
||
Bugfixes:
|
||
|
||
- Ensure in place imported files get a proper mimetype (#183)
|
||
- Federation cache suppression is now simpler and also deletes orphaned files
|
||
(#189)
|
||
- Fixed small UI glitches/bugs in federation tabs (#184)
|
||
- X-sendfile not working with in place import (#182)
|
||
|
||
|
||
Documentation:
|
||
|
||
- Added a documentation area for third-party projects (#180)
|
||
- Added documentation for optimizing Funkwhale and reduce its memory footprint.
|
||
- Document that the database should use an utf-8 encoding (#185)
|
||
- Foundations for API documentation with Swagger (#178)
|
||
|
||
|
||
Database storage for high-level settings
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
Due to the work done in #186, the following environment variables have been
|
||
deprecated:
|
||
|
||
- FEDERATION_ENABLED
|
||
- FEDERATION_COLLECTION_PAGE_SIZE
|
||
- FEDERATION_MUSIC_NEEDS_APPROVAL
|
||
- FEDERATION_ACTOR_FETCH_DELAY
|
||
- PLAYLISTS_MAX_TRACKS
|
||
- API_AUTHENTICATION_REQUIRED
|
||
|
||
Configuration for this settings has been moved to database, as it will provide
|
||
a better user-experience, by allowing you to edit these values on-the-fly,
|
||
without restarting Funkwhale processes.
|
||
|
||
You can leave those environment variables in your .env file for now, as the
|
||
values will be used to populate the database entries. We'll make a proper
|
||
announcement when the variables won't be used anymore.
|
||
|
||
Please browse https://docs.funkwhale.audio/configuration.html#instance-settings
|
||
for more information about instance configuration using the web interface.
|
||
|
||
|
||
System emails
|
||
^^^^^^^^^^^^^
|
||
|
||
Starting from this release, Funkwhale will send two types
|
||
of emails:
|
||
|
||
- Email confirmation emails, to ensure a user's email is valid
|
||
- Password reset emails, enabling user to reset their password without an admin's intervention
|
||
|
||
Email sending is disabled by default, as it requires additional configuration.
|
||
In this mode, emails are simply outputed on stdout.
|
||
|
||
If you want to actually send those emails to your users, you should edit your
|
||
.env file and tweak the EMAIL_CONFIG variable. See :ref:`setting-EMAIL_CONFIG`
|
||
for more details.
|
||
|
||
.. note::
|
||
|
||
As a result of these changes, the DJANGO_EMAIL_BACKEND variable,
|
||
which was not documented, has no effect anymore. You can safely remove it from
|
||
your .env file if it is set.
|
||
|
||
|
||
Proxy headers for non-docker deployments
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
For non-docker deployments, add ``--proxy-headers`` at the end of the ``daphne``
|
||
command in :file:`/etc/systemd/system/funkwhale-server.service`.
|
||
|
||
This will ensure the application receive the correct IP address from the client
|
||
and not the proxy's one.
|
||
|
||
|
||
0.10 (2018-04-23)
|
||
-----------------
|
||
|
||
Features:
|
||
|
||
- Can now import files in-place from the CLI importer (#155)
|
||
|
||
|
||
Enhancements:
|
||
|
||
- Avoid downloading audio files multiple times from remote libraries (#163)
|
||
- Better file import performance and error handling (#144)
|
||
- Import job and batch API and front-end have been improved with better
|
||
performance, pagination and additional filters (#171)
|
||
- Increased max_length on TrackFile.source, this will help when importing files
|
||
with a really long path (#142)
|
||
- Player is back in Queue tab (#150)
|
||
|
||
|
||
Bugfixes:
|
||
|
||
- Fail graciously when AP representation includes a null_value for mediaType
|
||
- Fix sidebar tabs not showing under small resolution under Chrome (#173)
|
||
- Fixed broken login due to badly configured Axios (#172)
|
||
- Fixed broken playlist modal after login (#155)
|
||
- Fixed queue reorder or track deletion restarting currently playing track
|
||
(#151)
|
||
- Radio will now append new track if you delete the last track in queue (#145)
|
||
- Reset all sensitive front-end data on logout (#124)
|
||
- Typos/not showing text due to i18n work (#175)
|
||
|
||
|
||
Documentation:
|
||
|
||
- Better documentation for hardware requirements and memory usage (#165)
|
||
|
||
|
||
In-place import
|
||
^^^^^^^^^^^^^^^
|
||
|
||
This release includes in-place imports for the CLI import. This means you can
|
||
load gigabytes of music into funkwhale without worrying about about Funkwhale
|
||
copying those music files in its internal storage and eating your disk space.
|
||
|
||
`This new feature is documented here <https://docs.funkwhale.audio/importing-music.html#in-place-import>`_
|
||
and require additional configuration to ensure funkwhale and your webserver can
|
||
serve those files properly.
|
||
|
||
**Non-docker users:**
|
||
|
||
Assuming your music is stored in ``/srv/funkwhale/data/music``, add the following
|
||
block to your nginx configuration::
|
||
|
||
location /_protected/music {
|
||
internal;
|
||
alias /srv/funkwhale/data/music;
|
||
}
|
||
|
||
And the following to your .env file::
|
||
|
||
MUSIC_DIRECTORY_PATH=/srv/funkwhale/data/music
|
||
|
||
**Docker users:**
|
||
|
||
Assuming your music is stored in ``/srv/funkwhale/data/music``, add the following
|
||
block to your nginx configuration::
|
||
|
||
location /_protected/music {
|
||
internal;
|
||
alias /srv/funkwhale/data/music;
|
||
}
|
||
|
||
Assuming you have the following volume directive in your ``docker-compose.yml``
|
||
(it's the default): ``/srv/funkwhale/data/music:/music:ro``, then add
|
||
the following to your .env file::
|
||
|
||
# this is the path in the container
|
||
MUSIC_DIRECTORY_PATH=/music
|
||
# this is the path on the host
|
||
MUSIC_DIRECTORY_SERVE_PATH=/srv/funkwhale/data/music
|
||
|
||
|
||
0.9.1 (2018-04-17)
|
||
------------------
|
||
|
||
Bugfixes:
|
||
|
||
- Allow null values for musicbrainz_id in Audio ActivityPub representation
|
||
- Fixed broken permission check on library scanning and too aggressive page
|
||
validation
|
||
|
||
|
||
0.9 (2018-04-17)
|
||
----------------
|
||
|
||
Features:
|
||
|
||
- Add internationalization support (#5)
|
||
- Can now follow and import music from remote libraries (#136, #137)
|
||
|
||
|
||
Enhancements:
|
||
|
||
- Added a i18n-extract yarn script to extract strings to PO files (#162)
|
||
- User admin now includes signup and last login dates (#148)
|
||
- We now use a proper user agent including instance version and url during
|
||
outgoing requests
|
||
|
||
|
||
Federation is here!
|
||
^^^^^^^^^^^^^^^^^^^
|
||
|
||
This is for real this time, and includes:
|
||
|
||
- Following other Funkwhale libraries
|
||
- Importing tracks from remote libraries (tracks are hotlinked, and only cached for a short amount of time)
|
||
- Searching accross federated catalogs
|
||
|
||
Note that by default, federation is opt-in, on a per-instance basis:
|
||
instances will request access to your catalog, and you can accept or refuse
|
||
those requests. You can also revoke the access at any time.
|
||
|
||
Documentation was updated with relevant instructions to use and benefit
|
||
from this new feature: https://docs.funkwhale.audio/federation.html
|
||
|
||
Preparing internationalization
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
Funkwhale's front-end as always been english-only, and this is a barrier
|
||
to new users. The work make Funkwhale's interface translatable was started
|
||
in this release by Baptiste. Although nothing is translated yet,
|
||
this release includes behind the stage changes that will make it possible in
|
||
the near future.
|
||
|
||
Many thank to Baptiste for the hard work and for figuring out a proper solution
|
||
to this difficult problem.
|
||
|
||
Upgrade path
|
||
^^^^^^^^^^^^
|
||
|
||
In addition to the usual instructions from
|
||
https://docs.funkwhale.audio/upgrading.html, non-docker users will have
|
||
to setup an additional systemd unit file for recurrent tasks.
|
||
|
||
This was forgotten in the deployment documentation, but recurrent tasks,
|
||
managed by the celery beat process, will be needed more and more in subsequent
|
||
releases. Right now, we'll be using to clear the cache for federated music files
|
||
and keep disk usage to a minimum.
|
||
|
||
In the future, they will also be needed to refetch music metadata or federated
|
||
information periodically.
|
||
|
||
Celery beat can be enabled easily::
|
||
|
||
curl -L -o "/etc/systemd/system/funkwhale-beat.service" "https://code.eliotberriot.com/funkwhale/funkwhale/raw/develop/deploy/funkwhale-beat.service"
|
||
# Also edit /etc/systemd/system/funkwhale.target
|
||
# and ensure the Wants= line contains the following:
|
||
# Wants=funkwhale-server.service funkwhale-worker.service funkwhale-beat.service
|
||
nano /etc/systemd/system/funkwhale.target
|
||
# reload configuration
|
||
systemctl daemon-reload
|
||
|
||
Docker users already have celerybeat enabled.
|
||
|
||
|
||
0.8 (2018-04-02)
|
||
----------------
|
||
|
||
Features:
|
||
|
||
- Add a detail page for radios (#64)
|
||
- Implemented page title binding (#1)
|
||
- Previous Track button restart playback after 3 seconds (#146)
|
||
|
||
|
||
Enhancements:
|
||
|
||
- Added credits to Francis Gading for the logotype (#101)
|
||
- API endpoint for fetching instance activity and updated timeline to use this
|
||
new endpoint (#141)
|
||
- Better error messages in case of missing environment variables (#140)
|
||
- Implemented a @test@yourfunkwhaledomain bot to ensure federation works
|
||
properly. Send it "/ping" and it will answer back :)
|
||
- Queue shuffle now apply only to tracks after the current one (#97)
|
||
- Removed player from queue tab and consistently show current track in queue
|
||
(#131)
|
||
- We now restrict some usernames from being used during signup (#139)
|
||
|
||
|
||
Bugfixes:
|
||
|
||
- Better error handling during file import (#120)
|
||
- Better handling of utf-8 filenames during file import (#138)
|
||
- Converted favicon from .ico to .png (#130)
|
||
- Upgraded to Python 3.6 to fix weird but harmless weakref error on django task
|
||
(#121)
|
||
|
||
|
||
Documentation:
|
||
|
||
- Documented the upgrade process (#127)
|
||
|
||
|
||
Preparing for federation
|
||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
Federation of music libraries is one of the most asked feature.
|
||
While there is still a lot of work to do, this version includes
|
||
the foundation that will enable funkwhale servers to communicate
|
||
between each others, and with other federated software, such as
|
||
Mastodon.
|
||
|
||
Funkwhale will use ActivityPub as it's federation protocol.
|
||
|
||
In order to prepare for federation (see #136 and #137), new API endpoints
|
||
have been added under /federation and /.well-known/webfinger.
|
||
|
||
For these endpoints to work, you will need to update your nginx configuration,
|
||
and add the following snippets::
|
||
|
||
location /federation/ {
|
||
include /etc/nginx/funkwhale_proxy.conf;
|
||
proxy_pass http://funkwhale-api/federation/;
|
||
}
|
||
|
||
location /.well-known/webfinger {
|
||
include /etc/nginx/funkwhale_proxy.conf;
|
||
proxy_pass http://funkwhale-api/.well-known/webfinger;
|
||
}
|
||
|
||
This will ensure federation endpoints will be reachable in the future.
|
||
You can of course skip this part if you know you will not federate your instance.
|
||
|
||
A new ``FEDERATION_ENABLED`` env var have also been added to control whether
|
||
federation is enabled or not on the application side. This settings defaults
|
||
to True, which should have no consequences at the moment, since actual
|
||
federation is not implemented and the only available endpoints are for
|
||
testing purposes.
|
||
|
||
Add ``FEDERATION_ENABLED=false`` to your .env file to disable federation
|
||
on the application side.
|
||
|
||
To test and troubleshoot federation, we've added a bot account. This bot is available at @test@yourinstancedomain,
|
||
and sending it "/ping", for example, via Mastodon, should trigger
|
||
a response.
|
||
|
||
|
||
|
||
0.7 (2018-03-21)
|
||
----------------
|
||
|
||
Features:
|
||
|
||
- Can now filter artists and albums with no listenable tracks (#114)
|
||
- Improve the style of the sidebar to make it easier to understand which tab is
|
||
selected (#118)
|
||
- On artist page, albums are not sorted by release date, if any (#116)
|
||
- Playlists are here \o/ :tada: (#3, #93, #94)
|
||
- Use django-cacheops to cache common ORM requests (#117)
|
||
|
||
|
||
Bugfixes:
|
||
|
||
- Fixed broken import request admin (#115)
|
||
- Fixed forced redirection to login event with
|
||
API_AUTHENTICATION_REQUIRED=False (#119)
|
||
- Fixed position not being reseted properly when playing the same track
|
||
multiple times in a row
|
||
- Fixed synchronized start/stop radio buttons for all custom radios (#103)
|
||
- Fixed typo and missing icon on homepage (#96)
|
||
|
||
|
||
Documentation:
|
||
|
||
- Up-to-date and complete development and contribution instructions in
|
||
README.rst (#123)
|
||
|
||
|
||
0.6.1 (2018-03-06)
|
||
------------------
|
||
|
||
Features:
|
||
|
||
- Can now skip acoustid on file import with the --no-acoustid flag (#111)
|
||
|
||
|
||
Bugfixes:
|
||
|
||
- Added missing batch id in output during import (#112)
|
||
- Added some feedback on the play button (#100)
|
||
- Smarter pagination which takes a fixed size (#84)
|
||
|
||
|
||
Other:
|
||
|
||
- Completely removed django-cachalot from the codebase (#110). You can safely
|
||
remove the CACHALOT_ENABLED setting from your .env file
|
||
|
||
|
||
0.6 (2018-03-04)
|
||
----------------
|
||
|
||
Features:
|
||
|
||
- Basic activity stream for listening and favorites (#23)
|
||
- Switched to django-channels and daphne for serving HTTP and websocket (#34)
|
||
|
||
Upgrades notes
|
||
**************
|
||
|
||
This version contains breaking changes in the way funkwhale is deployed,
|
||
please read the notes carefully.
|
||
|
||
Instance timeline
|
||
^^^^^^^^^^^^^^^^^
|
||
|
||
A new "Activity" page is now available from the sidebar, where you can
|
||
browse your instance activity. At the moment, this includes other users
|
||
favorites and listening, but more activity types will be implemented in the
|
||
future.
|
||
|
||
Internally, we implemented those events by following the Activity Stream
|
||
specification, which will help us to be compatible with other networks
|
||
in the long-term.
|
||
|
||
A new settings page has been added to control the visibility of your activity.
|
||
By default, your activity will be browsable by anyone on your instance,
|
||
but you can switch to a full private mode where nothing is shared.
|
||
|
||
The setting form is available in your profile.
|
||
|
||
Switch from gunicorn to daphne
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
This release include an important change in the way we serve the HTTP API.
|
||
To prepare for new realtime features and enable websocket support in Funkwhale,
|
||
we are now using django-channels and daphne to serve HTTP and websocket traffic.
|
||
|
||
This replaces gunicorn and the switch should be easy assuming you
|
||
follow the upgrade process described bellow.
|
||
|
||
If you are using docker, please remove the command instruction inside the
|
||
api service, as the up-to-date command is now included directly in the image
|
||
as the default entry point:
|
||
|
||
.. code-block:: yaml
|
||
|
||
api:
|
||
restart: unless-stopped
|
||
image: funkwhale/funkwhale:${FUNKWHALE_VERSION:-latest}
|
||
command: ./compose/django/gunicorn.sh # You can remove this line
|
||
|
||
On non docker setups, you'll have to update the [Service] block of your
|
||
funkwhale-server systemd unit file to launch the application server using daphne instead of gunicorn.
|
||
|
||
The new configuration should be similar to this:
|
||
|
||
.. code-block:: ini
|
||
|
||
[Service]
|
||
User=funkwhale
|
||
# adapt this depending on the path of your funkwhale installation
|
||
WorkingDirectory=/srv/funkwhale/api
|
||
EnvironmentFile=/srv/funkwhale/config/.env
|
||
ExecStart=/usr/local/bin/daphne -b ${FUNKWHALE_API_IP} -p ${FUNKWHALE_API_PORT} config.asgi:application
|
||
|
||
Ensure you update funkwhale's dependencies as usual to install the required
|
||
packages.
|
||
|
||
On both docker and non-docker setup, you'll also have to update your nginx
|
||
configuration for websocket support. Ensure you have the following blocks
|
||
included in your virtualhost file:
|
||
|
||
.. code-block:: txt
|
||
|
||
map $http_upgrade $connection_upgrade {
|
||
default upgrade;
|
||
'' close;
|
||
}
|
||
|
||
server {
|
||
...
|
||
proxy_http_version 1.1;
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection $connection_upgrade;
|
||
}
|
||
|
||
Remember to reload your nginx server after the edit.
|
||
|
||
|
||
0.5.4 (2018-02-28)
|
||
------------------
|
||
|
||
Features:
|
||
|
||
- Now stop running radio when clearing queue (#98)
|
||
|
||
Bugfixes:
|
||
|
||
- Fixed queue skipping tracks (#91)
|
||
- Now loop properly on queue when we only have one track (#95)
|
||
|
||
|
||
0.5.3 (2018-02-27)
|
||
------------------
|
||
|
||
Features:
|
||
|
||
- Added admin interface for radios, track files, favorites and import requests (#80)
|
||
- Added basic instance stats on /about (#82)
|
||
- Search now unaccent letters for queries like "The Dø" or "Björk" yielding more results (#81)
|
||
|
||
|
||
Bugfixes:
|
||
|
||
- Always use username in sidebar (#89)
|
||
- Click event outside of player icons (#83)
|
||
- Fixed broken import because of missing transaction
|
||
- Now always load next radio track on last queue track ended (#87)
|
||
- Now exclude tracks without file from radio candidates (#88)
|
||
- skip to next track properly on 40X errors (#86)
|
||
|
||
|
||
Other:
|
||
|
||
- Switched to towncrier for changelog management and compilation
|
||
|
||
|
||
0.5.2 (2018-02-26)
|
||
------------------
|
||
|
||
- Fixed broken file import due to wrong url (#73)
|
||
- More accurate mimetype detection
|
||
- Fixed really small size on small screens
|
||
- Added masonry layout for artists, requests and radios (#68)
|
||
- We now have a favicon!
|
||
- Fixed truncated play icon (#65)
|
||
|
||
|
||
0.5.1 (2018-02-24)
|
||
------------------
|
||
|
||
- Front: Fixed broken ajax call on radio builder (#69)
|
||
- Front: Shuffle now restart next track from beginning (#70)
|
||
- Front: volume slider should now have the same style everywhere (#72)
|
||
|
||
|
||
0.5 (2018-02-24)
|
||
----------------
|
||
|
||
- Front: Now reset player colors when track has no cover (#46)
|
||
- Front: play button now disabled for unplayable tracks
|
||
- API: You can now enable or disable registration on the fly, via a preference (#58)
|
||
- Front: can now signup via the web interface (#35)
|
||
- Front: Fixed broken redirection on login
|
||
- Front: Fixed broken error handling on settings and login form
|
||
|
||
About page:
|
||
|
||
There is a brand new about page on instances (/about), and instance
|
||
owner can now provide a name, a short and a long description for their instance via the admin (/api/admin/dynamic_preferences/globalpreferencemodel/).
|
||
|
||
Transcoding:
|
||
|
||
Basic transcoding is now available to/from the following formats : ogg and mp3.
|
||
|
||
*This is still an alpha feature at the moment, please report any bug.*
|
||
|
||
This relies internally on FFMPEG and can put some load on your server.
|
||
It's definitely recommended you setup some caching for the transcoded files
|
||
at your webserver level. Check the the exemple nginx file at deploy/nginx.conf
|
||
for an implementation.
|
||
|
||
On the frontend, usage of transcoding should be transparent in the player.
|
||
|
||
Music Requests:
|
||
|
||
This release includes a new feature, music requests, which allows users
|
||
to request music they'd like to see imported.
|
||
Admins can browse those requests and mark them as completed when
|
||
an import is made.
|
||
|
||
0.4 (2018-02-18)
|
||
----------------
|
||
|
||
- Front: ambiant colors in player based on current track cover (#59)
|
||
- Front: simplified front dev setup thanks to webpack proxy (#59)
|
||
- Front: added some unittests for the store (#55)
|
||
- Front: fixed broken login redirection when 401
|
||
- Front: Removed autoplay on page reload
|
||
- API: Added a /instance/settings endpoint
|
||
- Front: load /instance/settings on page load
|
||
- Added settings to report JS and Python error to a Sentry instance
|
||
This is disabled by default, but feel free to enable it if you want
|
||
to help us by sending your error reports :) (#8)
|
||
|
||
|
||
0.3.5 (2018-01-07)
|
||
------------------
|
||
|
||
- Smarter BACKEND_URL in frontend
|
||
|
||
|
||
0.3.4 (2018-01-07)
|
||
------------------
|
||
|
||
- Fixed wrong URL construction in ajax call
|
||
|
||
|
||
0.3.3 (2018-01-07)
|
||
------------------
|
||
|
||
- Users can now create their own dynamic radios (#51)
|
||
|
||
|
||
0.3.2
|
||
------------------
|
||
|
||
- Fixed an issue in the main dockerfile
|
||
|
||
|
||
0.3.1
|
||
------------------
|
||
|
||
- Revamped all import logic, everything is more tested and consistend
|
||
- Can now use Acoustid in file imports to automatically grab metadata from musicbrainz
|
||
- Brand new file import wizard
|
||
|
||
|
||
0.2.7
|
||
------------------
|
||
|
||
- Shortcuts: can now use the ``f`` shortcut to toggle the currently playing track
|
||
as a favorite (#53)
|
||
- Shortcuts: avoid collisions between shortcuts by using the exact modifier (#53)
|
||
- Player: Added looping controls and shortcuts (#52)
|
||
- Player: Added shuffling controls and shortcuts (#52)
|
||
- Favorites: can now modify the ordering of track list (#50)
|
||
- Library: can now search/reorder results on artist browsing view (#50)
|
||
- Upgraded celery to 4.1, added endpoint logic for fingerprinting audio files
|
||
- Fixed #56: invalidate tokens on password change, also added change password form
|
||
- Fixed #57: now refresh jwt token on page refresh
|
||
- removed ugly dividers in batch import list
|
||
- Fixed a few padding issues
|
||
- Now persist/restore queue/radio/player state automatically
|
||
- Removed old broken imports
|
||
- Now force tests paths
|
||
- Fixed #54: Now use pytest everywhere \o/
|
||
- Now use vuex to manage state for favorites
|
||
- Now use vuex to manage state for authentication
|
||
- Now use vuex to manage state for player/queue/radios
|
||
|
||
|
||
0.2.6 (2017-12-15)
|
||
------------------
|
||
|
||
- Fixed broken Dockerfile
|
||
|
||
|
||
0.2.5 (2017-12-15)
|
||
------------------
|
||
|
||
Features:
|
||
|
||
- Import: can now specify search template when querying import sources (#45)
|
||
- Login form: now redirect to previous page after login (#2)
|
||
- 404: a decent 404 template, at least (#48)
|
||
|
||
Bugfixes:
|
||
|
||
- Player: better handling of errors when fetching the audio file (#46)
|
||
- Csrf: default CSRF_TRUSTED_ORIGINS to ALLOWED_HOSTS to avoid Csrf issues on admin (#49)
|
||
|
||
Tech:
|
||
|
||
- Django 2 compatibility, lot of packages upgrades (#47)
|
||
|
||
|
||
0.2.4 (2017-12-14)
|
||
------------------
|
||
|
||
Features:
|
||
|
||
- Models: now store relese group mbid on Album model (#7)
|
||
- Models: now bind import job to track files (#44)
|
||
|
||
Bugfixes:
|
||
|
||
- Library: fixen broken "play all albums" button on artist cards in Artist browsing view (#43)
|