2294 lines
		
	
	
		
			79 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			2294 lines
		
	
	
		
			79 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://dev.funkwhale.audio/funkwhale/funkwhale/commits/develop?format=atom&search=Merge+tag
 | |
| 
 | |
| This changelog is viewable on the web at https://docs.funkwhale.audio/changelog.html.
 | |
| 
 | |
| .. towncrier
 | |
| 
 | |
| 0.18 "Naomi" (2019-01-22)
 | |
| -------------------------
 | |
| 
 | |
| This release is dedicated to Naomi, an early contributor and beta tester of Funkwhale.
 | |
| Her positivity, love and support have been incredibly helpful and helped shape the project
 | |
| as you can enjoy it today. Thank you so much Naomi <3
 | |
| 
 | |
| Many thanks to the dozens of people that contributed to this release: translators, developers,
 | |
| bug hunters, admins and backers. You made it possible!
 | |
| 
 | |
| Upgrade instructions are available at
 | |
| https://docs.funkwhale.audio/index.html, ensure you also execute the intructions
 | |
| marked with ``[manual action required]`` and ``[manual action suggested]``.
 | |
| 
 | |
| See ``Full changelog`` below for an exhaustive list of changes!
 | |
| 
 | |
| Audio transcoding is back!
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| After removal of our first, buggy transcoding implementation, we're proud to announce
 | |
| that this feature is back. It is enabled by default, and can be configured/disabled
 | |
| in your instance settings!
 | |
| 
 | |
| This feature works in the browser, with federated/non-federated tracks and using Subsonic clients.
 | |
| Transcoded tracks are generated on the fly, and cached for a configurable amount of time,
 | |
| to reduce the load on the server.
 | |
| 
 | |
| 
 | |
| Licensing and copyright information
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| Funkwhale is now able to parse copyright and license data from file and store
 | |
| this information. Apart from displaying it on each track detail page,
 | |
| no additional behaviour is currently implemented to use this new data, but this
 | |
| will change in future releases.
 | |
| 
 | |
| License and copyright data is also broadcasted over federation.
 | |
| 
 | |
| License matching is done on the content of the ``License`` tag in the files,
 | |
| with a fallback on the ``Copyright`` tag.
 | |
| 
 | |
| Funkwhale will successfully extract licensing data for the following licenses:
 | |
| 
 | |
| - Creative Commons 0 (Public Domain)
 | |
| - Creative Commons 1.0 (All declinations)
 | |
| - Creative Commons 2.0 (All declinations)
 | |
| - Creative Commons 2.5 (All declinations and countries)
 | |
| - Creative Commons 3.0 (All declinations and countries)
 | |
| - Creative Commons 4.0 (All declinations)
 | |
| 
 | |
| Support for other licenses such as Art Libre or WTFPL will be added in future releases.
 | |
| 
 | |
| 
 | |
| Instance-level moderation tools
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| This release includes a first set of moderation tools that will give more control
 | |
| to admins about the way their instance federates with other instance and accounts on the network.
 | |
| Using these tools, it's now possible to:
 | |
| 
 | |
| - Browse known accounts and domains, and associated data (storage size, software version, etc.)
 | |
| - Purge data belonging to given accounts and domains
 | |
| - Block or partially restrict interactions with any account or domain
 | |
| 
 | |
| All those features are usable using a brand new "moderation" permission, meaning
 | |
| you can appoint one or multiple moderators to help with this task.
 | |
| 
 | |
| I'd like to thank all Mastodon contributors, because some of the these tools are heavily
 | |
| inspired from what's being done in Mastodon. Thank you so much!
 | |
| 
 | |
| 
 | |
| Iframe widget to embed public tracks and albums [manual action required]
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| Funkwhale now supports embedding a lightweight audio player on external websites
 | |
| for album and tracks that are available in public libraries. Important pages,
 | |
| such as artist, album and track pages also include OpenGraph tags that will
 | |
| enable previews on compatible apps (like sharing a Funkwhale track link on Mastodon
 | |
| or Twitter).
 | |
| 
 | |
| To achieve that, we had to tweak the way Funkwhale front-end is served. You'll have
 | |
| to modify your nginx configuration when upgrading to keep your instance working.
 | |
| 
 | |
| **On docker setups**, edit your ``/srv/funkwhale/nginx/funkwhale.template`` and replace
 | |
| the ``location /api/`` and `location /` blocks by the following snippets::
 | |
| 
 | |
|     location / {
 | |
|         include /etc/nginx/funkwhale_proxy.conf;
 | |
|         # this is needed if you have file import via upload enabled
 | |
|         client_max_body_size ${NGINX_MAX_BODY_SIZE};
 | |
|         proxy_pass   http://funkwhale-api/;
 | |
|     }
 | |
| 
 | |
|     location /front/ {
 | |
|         alias /frontend/;
 | |
|     }
 | |
| 
 | |
| The change of configuration will be picked when restarting your nginx container.
 | |
| 
 | |
| **On non-docker setups**, edit your ``/etc/nginx/sites-available/funkwhale.conf`` file,
 | |
| and replace the ``location /api/`` and `location /` blocks by the following snippets::
 | |
| 
 | |
| 
 | |
|     location / {
 | |
|         include /etc/nginx/funkwhale_proxy.conf;
 | |
|         # this is needed if you have file import via upload enabled
 | |
|         client_max_body_size ${NGINX_MAX_BODY_SIZE};
 | |
|         proxy_pass   http://funkwhale-api/;
 | |
|     }
 | |
| 
 | |
|     location /front/ {
 | |
|         alias ${FUNKWHALE_FRONTEND_PATH}/;
 | |
|     }
 | |
| 
 | |
| Replace ``${FUNKWHALE_FRONTEND_PATH}`` by the corresponding variable from your .env file,
 | |
| which should be ``/srv/funkwhale/front/dist`` by default, then reload your nginx process with
 | |
| ``sudo systemctl reload nginx``.
 | |
| 
 | |
| 
 | |
| Alternative docker deployment method
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| Thanks to the awesome work done by @thetarkus at https://github.com/thetarkus/docker-funkwhale,
 | |
| we're now able to provide an alternative and easier Docker deployment method!
 | |
| 
 | |
| In contrast with our current, multi-container offer, this method integrates
 | |
| all Funkwhale processes and services (database, redis, etc.) into a single, easier to deploy container.
 | |
| 
 | |
| Both method will coexist in parallel, as each one has pros and cons. You can learn more
 | |
| about this exciting new deployment option by visiting https://docs.funkwhale.audio/installation/docker.html!
 | |
| 
 | |
| Automatically load .env file
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| On non-docker deployments, earlier versions required you to source
 | |
| the config/.env file before launching any Funkwhale command, with ``export $(cat config/.env | grep -v ^# | xargs)``
 | |
| This led to more complex and error prode deployment / setup.
 | |
| 
 | |
| This is not the case anymore, and Funkwhale will automatically load this file if it's available.
 | |
| 
 | |
| 
 | |
| Delete pre 0.17 federated tracks [manual action suggested]
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| If you were using Funkwhale before the 0.17 release and federated with other instances,
 | |
| it's possible that you still have some unplayable federated files in the database.
 | |
| 
 | |
| To purge the database of those entries, you can run the following command:
 | |
| 
 | |
| On docker setups::
 | |
| 
 | |
|     docker-compose run --rm api python manage.py script delete_pre_017_federated_uploads --no-input
 | |
| 
 | |
| On non-docker setups::
 | |
| 
 | |
|     python manage.py script delete_pre_017_federated_uploads --no-input
 | |
| 
 | |
| 
 | |
| Enable gzip compression [manual action suggested]
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| Gzip compression will be enabled on new instances by default
 | |
| and will reduce the amount of bandwidth consumed by your instance.
 | |
| 
 | |
| If you want to benefit from gzip compression on your instance,
 | |
| edit your reverse proxy virtualhost file (located at ``/etc/nginx/sites-available/funkwhale.conf``) and add the following snippet
 | |
| in the server block, then reload your nginx server::
 | |
| 
 | |
|     server {
 | |
|         # ... exiting configuration
 | |
| 
 | |
|         # compression settings
 | |
|         gzip on;
 | |
|         gzip_comp_level    5;
 | |
|         gzip_min_length    256;
 | |
|         gzip_proxied       any;
 | |
|         gzip_vary          on;
 | |
| 
 | |
|         gzip_types
 | |
|             application/atom+xml
 | |
|             application/javascript
 | |
|             application/json
 | |
|             application/ld+json
 | |
|             application/activity+json
 | |
|             application/manifest+json
 | |
|             application/rss+xml
 | |
|             application/vnd.geo+json
 | |
|             application/vnd.ms-fontobject
 | |
|             application/x-font-ttf
 | |
|             application/x-web-app-manifest+json
 | |
|             application/xhtml+xml
 | |
|             application/xml
 | |
|             font/opentype
 | |
|             image/bmp
 | |
|             image/svg+xml
 | |
|             image/x-icon
 | |
|             text/cache-manifest
 | |
|             text/css
 | |
|             text/plain
 | |
|             text/vcard
 | |
|             text/vnd.rim.location.xloc
 | |
|             text/vtt
 | |
|             text/x-component
 | |
|             text/x-cross-domain-policy;
 | |
|         # end of compression settings
 | |
|     }
 | |
| 
 | |
| Full changelog
 | |
| ^^^^^^^^^^^^^^
 | |
| 
 | |
| Features:
 | |
| 
 | |
| - Allow embedding of albums and tracks available in public libraries via an <iframe> (#578)
 | |
| - Audio transcoding is back! (#272)
 | |
| - First set of instance level moderation tools (#580, !521)
 | |
| - Store licensing and copyright information from file metadata, if available (#308)
 | |
| 
 | |
| 
 | |
| Enhancements:
 | |
| 
 | |
| - Add UI elements for multi-disc albums (#631)
 | |
| - Added alternative funkwhale/all-in-one docker image (#614)
 | |
| - Broadcast library updates (name, description, visibility) over federation
 | |
| - Based Docker image on alpine to have a smaller (and faster to build) image
 | |
| - Improved front-end performance by stripping unused dependencies, reducing bundle size
 | |
|   and enabling gzip compression
 | |
| - Improved accessibility by using main/section/nav tags and aria-labels in most critical places (#612)
 | |
| - The progress bar in the player now display loading state / buffer loading (#586)
 | |
| - Added "type: funkwhale" and "funkwhale-version" in Subsonic responses (#573)
 | |
| - Documented keyboard shortcuts, list is now available by pressing "h" or in the footer (#611)
 | |
| - Documented which Subsonic endpoints are implemented (#575)
 | |
| - Hide invitation code field during signup when it's not required (#410)
 | |
| - Importer will now pick embedded images in files with OTHER type if no COVER_FRONT is present
 | |
| - Improved keyboard accessibility on player, queue and various controls (#576)
 | |
| - Improved performance when listing playable tracks, albums and artists
 | |
| - Increased default upload limit from 30 to 100MB (#654)
 | |
| - Load env file in config/.env automatically to avoid sourcing it by hand (#626)
 | |
| - More resilient date parsing during audio import, will not crash anymore on
 | |
|   invalid dates (#622)
 | |
| - Now start radios immediatly, skipping any existing tracks in queue (#585)
 | |
| - Officially support connecting to a password protected redis server, with
 | |
|   the redis://:password@localhost:6379/0 scheme (#640)
 | |
| - Performance improvement when fetching favorites, down to a single, small http request
 | |
| - Removed "Activity" page, since all the data is available on the "Browse" page (#600)
 | |
| - Removed the need to specify the DJANGO_ALLOWED_HOSTS variable
 | |
| - Restructured the footer, added useful links and removed unused content
 | |
| - Show short entries first in search results to improve UX
 | |
| - Store disc number and order tracks by disc number / position) (#507)
 | |
| - Strip EXIF metadata from uploaded avatars to avoid leaking private data (#374)
 | |
| - Support blind key rotation in HTTP Signatures (#658)
 | |
| - Support setting a server URL in settings.json (#650)
 | |
| - Updated default docker postgres version from 9.4 to 11 (#656)
 | |
| - Updated lots of dependencies (especially django 2.0->2.1), and removed unused dependencies (#657)
 | |
| - Improved test suite speed by reducing / disabling expensive operations (#648)
 | |
| 
 | |
| 
 | |
| Bugfixes:
 | |
| 
 | |
| - Fixed parsing of embedded file cover for ogg files tagged with MusicBrainz (#469)
 | |
| - Upgraded core dependencies to fix websocket/messaging issues and possible memory leaks (#643)
 | |
| - Fix ".None" extension when downloading Flac file (#473)
 | |
| - Fixed None extension when downloading an in-place imported file (#621)
 | |
| - Added a script to prune pre 0.17 federated tracks (#564)
 | |
| - Advertise public libraries properly in ActivityPub representations (#553)
 | |
| - Allow opus file upload (#598)
 | |
| - Do not display "view on MusicBrainz" button if we miss the mbid (#422)
 | |
| - Do not try to create unaccent extension if it's already present (#663)
 | |
| - Ensure admin links in sidebar are displayed for users with relavant permissions, and only them (#597)
 | |
| - Fix broken websocket connexion under Chrome browser (#589)
 | |
| - Fix play button not starting playback with empty queue (#632)
 | |
| - Fixed a styling inconsistency on about page when instance description was missing (#659)
 | |
| - Fixed a UI discrepency in playlist tracks count (#647)
 | |
| - Fixed greyed tracks in radio builder and detail page (#637)
 | |
| - Fixed inconsistencies in subsonic error responses (#616)
 | |
| - Fixed incorrect icon for "next track" in player control (#613)
 | |
| - Fixed malformed search string when redirecting to LyricsWiki (#608)
 | |
| - Fixed missing track count on various library cards (#581)
 | |
| - Fixed skipped track when appending multiple tracks to the queue under certain conditions (#209)
 | |
| - Fixed wrong album/track count on artist page (#599)
 | |
| - Hide unplayable/emtpy playlists in "Browse playlist" pages (#424)
 | |
| - Initial UI render using correct language from browser (#644)
 | |
| - Invalid URI for reverse proxy websocket with apache (#617)
 | |
| - Properly encode Wikipedia and lyrics search urls (#470)
 | |
| - Refresh profile after user settings update to avoid cache issues (#606)
 | |
| - Use role=button instead of empty links for player controls (#610)
 | |
| 
 | |
| 
 | |
| Documentation:
 | |
| 
 | |
| - Deploy documentation from the master branch instead of the develop branch to avoid inconsistencies (#642)
 | |
| - Document how to find and use library id when importing files in CLI (#562)
 | |
| - Fix documentation typos (#645)
 | |
| 
 | |
| 
 | |
| 0.17 (2018-10-07)
 | |
| -----------------
 | |
| 
 | |
| Per user libraries
 | |
| ^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| This release contains a big change in music management. This has a lot of impact
 | |
| on how Funkwhale behaves, and you should have a look at
 | |
| https://docs.funkwhale.audio/upgrading/0.17.html for information
 | |
| about what changed and how to migrate.
 | |
| 
 | |
| 
 | |
| Features:
 | |
| 
 | |
| - Per user libraries (#463, also fixes #160 and #147)
 | |
| - Authentication using a LDAP directory (#194)
 | |
| 
 | |
| 
 | |
| Enhancements:
 | |
| 
 | |
| - Add configuration option to set Musicbrainz hostname
 | |
| - Add sign up link in the sidebar (#408)
 | |
| - Added a library widget to display libraries associated with a track, album
 | |
|   and artist (#551)
 | |
| - Ensure from_activity field is not required in django's admin (#546)
 | |
| - Move setting link from profile page to the sidebar (#406)
 | |
| - Simplified and less error-prone nginx setup (#358)
 | |
| 
 | |
| Bugfixes:
 | |
| 
 | |
| - Do not restart current song when rordering queue, deleting tracks from queue
 | |
|   or adding tracks to queue (#464)
 | |
| - Fix broken icons in playlist editor (#515)
 | |
| - Fixed a few untranslated strings (#559)
 | |
| - Fixed splitted album when importing from federation (#346)
 | |
| - Fixed toggle mute in volume bar does not restore previous volume level (#514)
 | |
| - Fixed wrong env file URL and display bugs in deployment documentation (#520)
 | |
| - Fixed wrong title in PlayButton (#435)
 | |
| - Remove transparency on artist page button (#517)
 | |
| - Set sane width default for ui cards and center play button (#530)
 | |
| - Updated wrong icon and copy in play button dropdown (#436)
 | |
| 
 | |
| 
 | |
| Documentation:
 | |
| 
 | |
| - Fixed wrong URLs for docker / nginx files in documentation (#537)
 | |
| 
 | |
| 
 | |
| Other:
 | |
| 
 | |
| - Added a merge request template and more documentation about the changelog
 | |
| 
 | |
| 
 | |
| Using a LDAP directory to authenticate to your Funkwhale instance
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| Funkwhale now support LDAP as an authentication source: you can configure
 | |
| your instance to delegate login to a LDAP directory, which is especially
 | |
| useful when you have an existing directory and don't want to manage users
 | |
| manually.
 | |
| 
 | |
| You can use this authentication backend side by side with the classic one.
 | |
| 
 | |
| Have a look at https://docs.funkwhale.audio/installation/ldap.html
 | |
| for detailed instructions on how to set this up.
 | |
| 
 | |
| 
 | |
| Simplified nginx setup [Docker: Manual action required]
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| We've received a lot of user feedback regarding our installation process,
 | |
| and it seems the proxy part is the one which is the most confusing and difficult.
 | |
| Unfortunately, this is also the one where errors and mistakes can completely break
 | |
| the application.
 | |
| 
 | |
| To make things easier for everyone, we now offer a simplified deployment
 | |
| process for the reverse proxy part. This will make upgrade of the proxy configuration
 | |
| significantly easier on docker deployments.
 | |
| 
 | |
| On non-docker instances, you have nothing to do.
 | |
| 
 | |
| If you have a dockerized instance, here is the upgrade path.
 | |
| 
 | |
| First, tweak your .env file::
 | |
| 
 | |
|     # remove the FUNKWHALE_URL variable
 | |
|     # and add the next variables
 | |
|     FUNKWHALE_HOSTNAME=yourdomain.funkwhale
 | |
|     FUNKWHALE_PROTOCOL=https
 | |
| 
 | |
|     # add the following variable, matching the path your app is deployed
 | |
|     # leaving the default should work fine if you deployed using the same
 | |
|     # paths as the documentation
 | |
|     FUNKWHALE_FRONTEND_PATH=/srv/funkwhale/front/dist
 | |
| 
 | |
| Then, add the following block at the end of your docker-compose.yml file::
 | |
| 
 | |
|     # existing services
 | |
|     api:
 | |
|         ...
 | |
|     celeryworker:
 | |
|         ...
 | |
| 
 | |
|     # new service
 | |
|     nginx:
 | |
|       image: nginx
 | |
|       env_file:
 | |
|         - .env
 | |
|       environment:
 | |
|         # Override those variables in your .env file if needed
 | |
|         - "NGINX_MAX_BODY_SIZE=${NGINX_MAX_BODY_SIZE-100M}"
 | |
|       volumes:
 | |
|         - "./nginx/funkwhale.template:/etc/nginx/conf.d/funkwhale.template:ro"
 | |
|         - "./nginx/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro"
 | |
|         - "${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:ro"
 | |
|         - "${MEDIA_ROOT}:${MEDIA_ROOT}:ro"
 | |
|         - "${STATIC_ROOT}:${STATIC_ROOT}:ro"
 | |
|         - "${FUNKWHALE_FRONTEND_PATH}:/frontend:ro"
 | |
|       ports:
 | |
|         # override those variables in your .env file if needed
 | |
|         - "${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}:80"
 | |
|       command: >
 | |
|           sh -c "envsubst \"`env | awk -F = '{printf \" $$%s\", $$1}'`\"
 | |
|           < /etc/nginx/conf.d/funkwhale.template
 | |
|           > /etc/nginx/conf.d/default.conf
 | |
|           && cat /etc/nginx/conf.d/default.conf
 | |
|           && nginx -g 'daemon off;'"
 | |
|       links:
 | |
|         - api
 | |
| 
 | |
| By doing that, you'll enable a dockerized nginx that will automatically be
 | |
| configured to serve your Funkwhale instance.
 | |
| 
 | |
| Download the required configuration files for the nginx container:
 | |
| 
 | |
| .. parsed-literal::
 | |
| 
 | |
|     cd /srv/funkwhale
 | |
|     mkdir nginx
 | |
|     curl -L -o nginx/funkwhale.template "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/docker.nginx.template"
 | |
|     curl -L -o nginx/funkwhale_proxy.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/funkwhale_proxy.conf"
 | |
| 
 | |
| Update the funkwhale.conf configuration of your server's reverse-proxy::
 | |
| 
 | |
|     # the file should match something like that, upgrade all variables
 | |
|     # between ${} to match the ones in your .env file,
 | |
|     # and your SSL configuration if you're not using let's encrypt
 | |
|     # The important thing is that you only have a single location block
 | |
|     # that proxies everything to your dockerized nginx.
 | |
| 
 | |
|     sudo nano /etc/nginx/sites-enabled/funkwhale.conf
 | |
|     upstream fw {
 | |
|         # depending on your setup, you may want to update this
 | |
|         server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT};
 | |
|     }
 | |
|     map $http_upgrade $connection_upgrade {
 | |
|         default upgrade;
 | |
|         ''      close;
 | |
|     }
 | |
| 
 | |
|     server {
 | |
|         listen 80;
 | |
|         listen [::]:80;
 | |
|         server_name ${FUNKWHALE_HOSTNAME};
 | |
|         location / { return 301 https://$host$request_uri; }
 | |
|     }
 | |
|     server {
 | |
|         listen      443 ssl;
 | |
|         listen [::]:443 ssl;
 | |
|         server_name ${FUNKWHALE_HOSTNAME};
 | |
| 
 | |
|         # TLS
 | |
|         ssl_protocols TLSv1.2;
 | |
|         ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
 | |
|         ssl_prefer_server_ciphers on;
 | |
|         ssl_session_cache shared:SSL:10m;
 | |
|         ssl_certificate     /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/fullchain.pem;
 | |
|         ssl_certificate_key /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/privkey.pem;
 | |
| 
 | |
|         # HSTS
 | |
|         add_header Strict-Transport-Security "max-age=31536000";
 | |
| 
 | |
|         location / {
 | |
|             include /etc/nginx/funkwhale_proxy.conf;
 | |
|             proxy_pass   http://fw/;
 | |
|         }
 | |
|     }
 | |
| 
 | |
| Check that your configuration is valid then reload:
 | |
| 
 | |
|     sudo nginx -t
 | |
|     sudo systemctl reload nginx
 | |
| 
 | |
| 
 | |
| 0.16.3 (2018-08-21)
 | |
| -------------------
 | |
| 
 | |
| Upgrade instructions are available at
 | |
| https://docs.funkwhale.audio/upgrading.html
 | |
| 
 | |
| Bugfixes:
 | |
| 
 | |
| - Fixed front-end not contacting the proper path on the API (!385)
 | |
| 
 | |
| 
 | |
| 0.16.2 (2018-08-21)
 | |
| -------------------
 | |
| 
 | |
| .. warning::
 | |
| 
 | |
|   **This release is broken, do not use it. Upgrade to 0.16.3 or higher instead.**
 | |
| 
 | |
| 
 | |
| Upgrade instructions are available at
 | |
| https://docs.funkwhale.audio/upgrading.html
 | |
| 
 | |
| Bugfixes:
 | |
| 
 | |
| - Ensure we always have a default api url set on first load to avoid displaying
 | |
|   the instance picker (#490)
 | |
| - Fixed CLI importer syntax error because of async reserved keyword usage
 | |
|   (#494)
 | |
| 
 | |
| 
 | |
| 0.16.1 (2018-08-19)
 | |
| -------------------
 | |
| 
 | |
| Upgrade instructions are available at
 | |
| https://docs.funkwhale.audio/upgrading.html
 | |
| 
 | |
| Features:
 | |
| 
 | |
| - Make funkwhale themable by loading external stylesheets (#456)
 | |
| 
 | |
| Enhancements:
 | |
| 
 | |
| - Add link to admin on "Staff member" button (#202)
 | |
| - Can now add a description to radios and better radio cards (#331)
 | |
| - Display track duration in track tables (#461)
 | |
| - More permissive default permissions for front-end files (#388)
 | |
| - Simpler configuration and toolchain for the front-end using vue-cli (!375)
 | |
| - Use Howler to manage audio instead of our own dirty/untested code (#392)
 | |
| 
 | |
| 
 | |
| Bugfixes:
 | |
| 
 | |
| - Fix alignment issue on top bar in Admin tabs (#395)
 | |
| - Fix Apache2 permission issue preventing `/media` folder from being served
 | |
|   correctly (#389)
 | |
| - Fix loading on browse page lists causing them to go down, and dimming over
 | |
|   the top bar (#468)
 | |
| - Fixed (again): administration section not showing up in sidebar after login
 | |
|   (#245)
 | |
| - Fixed audio mimetype not showing up on track detail and list (#459)
 | |
| - Fixed broken audio playback on Chrome and invisible volume control (#390)
 | |
| - Fixed broken federation import on big imports due to missing transaction
 | |
|   logic (#397)
 | |
| - Fixed crash on artist pages when no cover is available (#457)
 | |
| - Fixed favorited status of tracks not appearing in interface (#398)
 | |
| - Fixed invitation code not prefilled in form when accessing invitation link
 | |
|   (#476)
 | |
| - Fixed typos in scheduled tasks configuration (#487)
 | |
| - Removed release date error in case of empty date (#478)
 | |
| - Removed white on white artist button on hover, on Album page (#393)
 | |
| - Smarter date parsing during import by replacing arrow with pendulum (#376)
 | |
| - Display public playlists properly for anonymous users (#488)
 | |
| 
 | |
| 
 | |
| i18n:
 | |
| 
 | |
| - Added portuguese, spanish and german translations
 | |
| 
 | |
| 
 | |
| Custom themes for Funkwhale
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| If you ever wanted to give a custom look and feel to your instance, this is now possible.
 | |
| 
 | |
| Check https://docs.funkwhale.audio/configuration.html#theming if you want to know more!
 | |
| 
 | |
| 
 | |
| Fix Apache2 configuration file for media block [Manual action required]
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| The permission scope on the current Apache2 configuration file is too narrow, preventing thumbnails from being served.
 | |
| 
 | |
| On Apache2 setups, you have to replace the following line::
 | |
| 
 | |
|     <Directory /srv/funkwhale/data/media/albums>
 | |
| 
 | |
| with::
 | |
| 
 | |
|     <Directory /srv/funkwhale/data/media>
 | |
| 
 | |
| You can now restart your server::
 | |
| 
 | |
|     sudo systemctl restart apache2
 | |
| 
 | |
| 
 | |
| 0.16 (2018-07-22)
 | |
| -----------------
 | |
| 
 | |
| Upgrade instructions are available at
 | |
| https://docs.funkwhale.audio/upgrading.html
 | |
| 
 | |
| Features:
 | |
| 
 | |
| - Complete redesign of the library home and playlist pages (#284)
 | |
| - Expose ActivityPub actors for users (#317)
 | |
| - Implemented a basic but functionnal Github-like search on federated tracks
 | |
|   list (#344)
 | |
| - Internationalized interface as well as translations for Arabic, French,
 | |
|   Esperanto, Italian, Occitan, Polish, Portuguese and Swedish (#161, #167)
 | |
| - Users can now upload an avatar in their settings page (#257)
 | |
| 
 | |
| 
 | |
| Enhancements:
 | |
| 
 | |
| - Added feedback when creating/updating radio (#302)
 | |
| - Apply restrictions to username characters during signup
 | |
| - Autoselect best language based on browser configuration (#386)
 | |
| - Can now order tracks on federated track list (#326)
 | |
| - Can now relaunch pending import jobs from the web interface (#323)
 | |
| - Ensure we do not display pagination on single pages (#334)
 | |
| - Ensure we have sane defaults for MEDIA_ROOT, STATIC_ROOT and
 | |
|   MUSIC_DIRECTORY_PATH in the deployment .env file (#350)
 | |
| - Make some space for the volume slider to allow precise control (#318)
 | |
| - Removed django-cacheops dependency
 | |
| - Store track artist and album artist separately (#237) Better handling of
 | |
|   tracks with a different artist than the album artist
 | |
| - The navigation bar of Library is now fixed (#375)
 | |
| - Use thumbnails for avatars and covers to reduce bandwidth
 | |
| 
 | |
| 
 | |
| Bugfixes:
 | |
| 
 | |
| - Ensure 750 permissions on CI artifacts (#332)
 | |
| - Ensure images are not cropped in queue (#337)
 | |
| - Ensure we do not import artists with empty names (#351)
 | |
| - Fix notifications not closing when clicking on the cross (#366)
 | |
| - Fix the most annoying offset in the whole fediverse (#369)
 | |
| - Fixed persistent message in playlist modal (#304)
 | |
| - Fixed unfiltered results in favorites API (#384)
 | |
| - Raise a warning instead of crashing when getting a broken path in file import
 | |
|   (#138)
 | |
| - Remove parallelization of uploads during import to avoid crashing small
 | |
|   servers (#382)
 | |
| - Subsonic API login is now case insensitive (#339)
 | |
| - Validate Date header in HTTP Signatures (#328)
 | |
| 
 | |
| 
 | |
| Documentation:
 | |
| 
 | |
| - Added troubleshotting and technical overview documentation (#256)
 | |
| - Arch Linux installation steps
 | |
| - Document that users can use Ultrasonic on Android (#316)
 | |
| - Fixed a couple of typos
 | |
| - Some cosmetic improvements to the doc
 | |
| 
 | |
| 
 | |
| i18n:
 | |
| 
 | |
| - Arabic translation (!302)
 | |
| - Polish translation (!304)
 | |
| 
 | |
| 
 | |
| Library home and playlist page overhaul
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| The library home page have been completely redesigned to include:
 | |
| 
 | |
| - other users activity (listenings, playlists and favorites)
 | |
| - recently imported albums
 | |
| 
 | |
| We think this new version showcases more music in a more useful way, let us know
 | |
| what you think about it!
 | |
| 
 | |
| The playlist page have been updated as well.
 | |
| 
 | |
| 
 | |
| Internationalized interface
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| After months of work, we're proud to announce our interface is now ready
 | |
| for internationalization.
 | |
| 
 | |
| Translators have already started the work of translating Funkwhale in 8 different languages,
 | |
| and we're ready to add more as needed.
 | |
| 
 | |
| You can easily get involved at https://translate.funkwhale.audio/engage/funkwhale/
 | |
| 
 | |
| 
 | |
| Better handling of tracks with a different artist than the album artist
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| Some tracks involve a different artist than the album artist (e.g. a featuring)
 | |
| and Funkwhale has been known to do weird things when importing such tracks, resulting
 | |
| in albums that contained a single track, for instance.
 | |
| 
 | |
| The situation should be improved with this release, as Funkwhale is now able to
 | |
| store separately the track and album artist, and display it properly in the interface.
 | |
| 
 | |
| 
 | |
| Users now have an ActivityPub Actor [Manual action required]
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| In the process of implementing federation for user activity such as listening
 | |
| history, we are now making user profiles (a.k.a. ActivityPub actors) available through federation.
 | |
| 
 | |
| This does not means the federation is working, but this is a needed step to implement it.
 | |
| 
 | |
| Those profiles will be created automatically for new users, but you have to run a command
 | |
| to create them for existing users.
 | |
| 
 | |
| On docker setups::
 | |
| 
 | |
|     docker-compose run --rm api python manage.py script create_actors --no-input
 | |
| 
 | |
| On non-docker setups::
 | |
| 
 | |
|     python manage.py script create_actors --no-input
 | |
| 
 | |
| This should only take a few seconds to run. It is safe to interrupt the process or rerun it multiple times.
 | |
| 
 | |
| 
 | |
| Image thumbnails [Manual action required]
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| To reduce bandwidth usage on slow or limited connexions and improve performance
 | |
| in general, we now use smaller images in the front-end. For instance, if you have
 | |
| an album cover with a 1000x1000 pixel size, we will create smaller
 | |
| versions of this image (50x50, 200x200, 400x400) and reference those resized version
 | |
| when we don't actually need the original image.
 | |
| 
 | |
| Thumbnail will be created automatically for new objects, however, you have
 | |
| to launch a manual command to deal with existing ones.
 | |
| 
 | |
| On docker setups::
 | |
| 
 | |
|     docker-compose run --rm api python manage.py script create_image_variations --no-input
 | |
| 
 | |
| On non-docker setups::
 | |
| 
 | |
|     python manage.py script create_image_variations --no-input
 | |
| 
 | |
| This should be quite fast but may take up to a few minutes depending on the number
 | |
| of albums you have in database. It is safe to interrupt the process or rerun it multiple times.
 | |
| 
 | |
| 
 | |
| Improved search on federated tracks list
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| Having a powerful but easy-to-use search is important but difficult to achieve, especially
 | |
| if you do not want to have a real complex search interface.
 | |
| 
 | |
| Github does a pretty good job with that, using a structured but simple query system
 | |
| (See https://help.github.com/articles/searching-issues-and-pull-requests/#search-only-issues-or-pull-requests).
 | |
| 
 | |
| This release implements a limited but working subset of this query system. You can use it only on the federated
 | |
| tracks list (/manage/federation/tracks) at the moment, but depending on feedback it will be rolled-out on other pages as well.
 | |
| 
 | |
| This is the type of query you can run:
 | |
| 
 | |
| - ``hello world``: search for "hello" and "world" in all the available fields
 | |
| - ``hello in:artist`` search for results where artist name is "hello"
 | |
| - ``spring in:artist,album`` search for results where artist name or album title contain "spring"
 | |
| - ``artist:hello`` search for results where artist name equals "hello"
 | |
| - ``artist:"System of a Down" domain:instance.funkwhale`` search for results where artist name equals "System of a Down" and inside "instance.funkwhale" library
 | |
| 
 | |
| 
 | |
| Ensure MEDIA_ROOT, STATIC_ROOT and MUSIC_DIRECTORY_* are set explicitely [Manual action required]
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| In our default .env file, MEDIA_ROOT and STATIC_ROOT were commented by default, causing
 | |
| some deployment issues on non-docker setups when people forgot to uncomment them.
 | |
| 
 | |
| From now on, those variables are uncommented, and will also be used on docker setups
 | |
| to mount the volumes automatically in the docker-compose.yml file. This has been a source
 | |
| of headache as well in some deployments, where you had to update both the .env file and
 | |
| the compose file.
 | |
| 
 | |
| This also applies to in-place paths (MUSIC_DIRECTORY_PATH and MUSIC_DIRECTORY_SERVE_PATH),
 | |
| whose values are now used directly to set up the proper Docker volumes.
 | |
| 
 | |
| This will only affect new deployments though. If you want to benefit from this on an
 | |
| existing instance, do a backup of your ``.env`` and ``docker-compose.yml`` files and apply the following changes:
 | |
| 
 | |
| - Ensure ``MEDIA_ROOT`` is uncommented in your .env file and match the absolute path where media files are stored
 | |
|   on your host (``/srv/funkwhale/data/media`` by default)
 | |
| - Ensure ``STATIC_ROOT`` is uncommented in your .env file and match the absolute path where static files are stored
 | |
|   on your host (``/srv/funkwhale/data/static`` by default)
 | |
| - If you use in-place import:
 | |
|     - Ensure MUSIC_DIRECTORY_PATH is uncommented and set to ``/music``
 | |
|     - Ensure MUSIC_DIRECTORY_SERVE_PATH is uncommented and set to the absolute path on your host were your music files
 | |
|       are stored (``/srv/funkwhale/data/music`` by default)
 | |
| - Edit your docker-compose.yml file to reflect the changes:
 | |
|     - Search for volumes (there should be two occurences) that contains ``/app/funkwhale_api/media`` on the right side, and
 | |
|       replace the whole line with ``- "${MEDIA_ROOT}:${MEDIA_ROOT}"``
 | |
|     - Search for a volume that contains ``/app/staticfiles`` on the right side, and
 | |
|       replace the whole line with ``- "${STATIC_ROOT}:${STATIC_ROOT}"``
 | |
|     - If you use in-place import, search for volumes (there should be two occurences) that contains ``/music:ro`` on the right side, and
 | |
|       replace the whole line with ``- "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro"``
 | |
| 
 | |
| In the end, the ``volumes`` directives of your containers should look like that::
 | |
| 
 | |
|     ...
 | |
|     celeryworker
 | |
|       volumes:
 | |
|         - "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro"
 | |
|         - "${MEDIA_ROOT}:${MEDIA_ROOT}"
 | |
|     ...
 | |
|     api:
 | |
|       volumes:
 | |
|         - "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro"
 | |
|         - "${MEDIA_ROOT}:${MEDIA_ROOT}"
 | |
|         - "${STATIC_ROOT}:${STATIC_ROOT}"
 | |
|         - ./front/dist:/frontend
 | |
|     ...
 | |
| 
 | |
| 
 | |
| Removed Cacheops dependency
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| We removed one of our dependency named django-cacheops. It was unly used in a few places,
 | |
| and not playing nice with other dependencies.
 | |
| 
 | |
| You can safely remove this dependency in your environment with ``pip uninstall django-cacheops`` if you're
 | |
| not using docker.
 | |
| 
 | |
| You can also safely remove any ``CACHEOPS_ENABLED`` setting from your environment file.
 | |
| 
 | |
| 
 | |
| 0.15 (2018-06-24)
 | |
| -----------------
 | |
| 
 | |
| Upgrade instructions are available at
 | |
| https://docs.funkwhale.audio/upgrading.html
 | |
| 
 | |
| Features:
 | |
| 
 | |
| - Added admin interface to manage import requests (#190)
 | |
| - Added replace flag during import to replace already present tracks with a new
 | |
|   version of their track file (#222)
 | |
| - Funkwhale's front-end can now point to any instance (#327) Removed front-end
 | |
|   and back-end coupling
 | |
| - Management interface for users (#212)
 | |
| - New invite system (#248) New invite system
 | |
| 
 | |
| 
 | |
| Enhancements:
 | |
| 
 | |
| - Added "TV" to the list of highlighted words during YouTube import (#154)
 | |
| - Command line import now accepts unlimited args (#242)
 | |
| 
 | |
| 
 | |
| Bugfixes:
 | |
| 
 | |
| - Expose track files date in manage API (#307)
 | |
| - Fixed current track restart/hiccup when shuffling queue, deleting track from
 | |
|   queue or reordering (#310)
 | |
| - Include user's current private playlists on playlist list (#302)
 | |
| - Remove link to generic radios, since they don't have detail pages (#324)
 | |
| 
 | |
| 
 | |
| Documentation:
 | |
| 
 | |
| - Document that Funkwhale may be installed with YunoHost (#325)
 | |
| - Documented a saner layout with symlinks for in-place imports (#254)
 | |
| - Upgrade documentation now use the correct user on non-docker setups (#265)
 | |
| 
 | |
| 
 | |
| Invite system
 | |
| ^^^^^^^^^^^^^
 | |
| 
 | |
| On closed instances, it has always been a little bit painful to create accounts
 | |
| by hand for new users. This release solve that by adding invitations.
 | |
| 
 | |
| You can generate invitation codes via the "users" admin interface (you'll find a
 | |
| link in the sidebar). Those codes are valid for 14 days, and can be used once
 | |
| to create a new account on the instance, even if registrations are closed.
 | |
| 
 | |
| By default, we generate a random code for invitations, but you can also use custom codes
 | |
| if you need to print them or make them fancier ;)
 | |
| 
 | |
| Invitations generation and management requires the "settings" permission.
 | |
| 
 | |
| 
 | |
| Removed front-end and back-end coupling
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| Eventhough Funkwhale's front-end has always been a Single Page Application,
 | |
| talking to an API, it was only able to talk to an API on the same domain.
 | |
| 
 | |
| There was no real technical justification behind this (only lazyness), and it was
 | |
| also blocking interesting use cases:
 | |
| 
 | |
| - Use multiple customized versions of the front-end with the same instance
 | |
| - Use a customized version of the front-end with multiple instances
 | |
| - Use a locally hosted front-end with a remote API, which is especially useful in development
 | |
| 
 | |
| From now on, Funkwhale's front-end can connect to any Funkwhale server. You can
 | |
| change the server you are connecting to in the footer.
 | |
| 
 | |
| Fixing this also unlocked a really interesting feature in our development/review workflow:
 | |
| by leveraging Gitlab CI and review apps, we are now able to deploy automatically live versions of
 | |
| a merge request, making it possible for anyone to review front-end changes easily, without
 | |
| the need to install a local environment.
 | |
| 
 | |
| 
 | |
| 0.14.2 (2018-06-16)
 | |
| -------------------
 | |
| 
 | |
| .. warning::
 | |
| 
 | |
|     This release contains a fix for a permission issue. You should upgrade
 | |
|     as soon as possible. Read the changelog below for more details.
 | |
| 
 | |
| Upgrade instructions are available at
 | |
| https://docs.funkwhale.audio/upgrading.html
 | |
| 
 | |
| Enhancements:
 | |
| 
 | |
| - Added feedback on shuffle button (#262)
 | |
| - Added multiple warnings in the documentation that you should never run
 | |
|   makemigrations yourself (#291)
 | |
| - Album cover served in http (#264)
 | |
| - Apache2 reverse proxy now supports websockets (tested with Apache 2.4.25)
 | |
|   (!252)
 | |
| - Display file size in human format during file upload (#289)
 | |
| - Switch from BSD-3 licence to AGPL-3 licence (#280)
 | |
| 
 | |
| Bugfixes:
 | |
| 
 | |
| - Ensure radios can only be edited and deleted by their owners (#311)
 | |
| - Fixed admin menu not showing after login (#245)
 | |
| - Fixed broken pagination in Subsonic API (#295)
 | |
| - Fixed duplicated websocket connexion on timeline (#287)
 | |
| 
 | |
| 
 | |
| Documentation:
 | |
| 
 | |
| - Improved documentation about in-place imports setup (#298)
 | |
| 
 | |
| 
 | |
| Other:
 | |
| 
 | |
| - Added Black and flake8 checks in CI to ensure consistent code styling and
 | |
|   formatting (#297)
 | |
| - Added bug and feature issue templates (#299)
 | |
| 
 | |
| 
 | |
| Permission issues on radios
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| Because of an error in the way we checked user permissions on radios,
 | |
| public radios could be deleted by any logged-in user, even if they were not
 | |
| the owner of the radio.
 | |
| 
 | |
| We recommend instances owners to upgrade as fast as possible to avoid any abuse
 | |
| and data loss.
 | |
| 
 | |
| 
 | |
| Funkwhale is now licenced under AGPL-3
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| Following the recent switch made by PixelFed
 | |
| (https://github.com/dansup/pixelfed/issues/143), we decided along with
 | |
| the community to relicence Funkwhale under the AGPL-3 licence. We did this
 | |
| switch for various reasons:
 | |
| 
 | |
| - This is better aligned with other fediverse software
 | |
| - It prohibits anyone to distribute closed-source and proprietary forks of Funkwhale
 | |
| 
 | |
| As end users and instance owners, this does not change anything. You can
 | |
| continue to use Funkwhale exactly as you did before :)
 | |
| 
 | |
| 
 | |
| Apache support for websocket
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| Up until now, our Apache2 configuration was not working with websockets. This is now
 | |
| solved by adding this at the beginning of your Apache2 configuration file::
 | |
| 
 | |
|     Define funkwhale-api-ws ws://localhost:5000
 | |
| 
 | |
| And this, before the "/api" block::
 | |
| 
 | |
|     # Activating WebSockets
 | |
|     ProxyPass "/api/v1/instance/activity" ${funkwhale-api-ws}/api/v1/instance/activity
 | |
| 
 | |
| Websockets may not be supported in older versions of Apache2. Be sure to upgrade to the latest version available.
 | |
| 
 | |
| 
 | |
| Serving album covers in https (Apache2 proxy)
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| Two issues are addressed here. The first one was about Django replying with
 | |
| mixed content (http) when queried for covers. Setting up the `X-Forwarded-Proto`
 | |
| allows Django to know that the client is using https, and that the reply must
 | |
| be https as well.
 | |
| 
 | |
| Second issue was a problem of permission causing Apache a denied access to
 | |
| album cover folder. It is solved by adding another block for this path in
 | |
| the Apache configuration file for funkwhale.
 | |
| 
 | |
| Here is how to modify your `funkwhale.conf` apache2 configuration::
 | |
| 
 | |
|   <VirtualHost *:443>
 | |
| 
 | |
|     ...
 | |
|     #Add this new line
 | |
|     RequestHeader set X-Forwarded-Proto "https"
 | |
|     ...
 | |
|     # Add this new block below the other <Directory/> blocks
 | |
|     # replace /srv/funkwhale/data/media with the path to your media directory
 | |
|     # if you're not using the standard layout.
 | |
|     <Directory /srv/funkwhale/data/media/albums>
 | |
|       Options FollowSymLinks
 | |
|       AllowOverride None
 | |
|       Require all granted
 | |
|     </Directory>
 | |
|     ...
 | |
|   </VirtualHost>
 | |
| 
 | |
| 
 | |
| About the makemigrations warning
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| You may sometimes get the following warning while applying migrations::
 | |
| 
 | |
|     "Your models have changes that are not yet reflected in a migration, and so won't be applied."
 | |
| 
 | |
| This is a warning, not an error, and it can be safely ignored.
 | |
| Never run the ``makemigrations`` command yourself.
 | |
| 
 | |
| 
 | |
| 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://dev.funkwhale.audio/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://dev.funkwhale.audio/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)
 |