Faircamp 0.15.0
Last thursday Faircamp 0.15.0 was quietly released - following this I was unfortunately struck with a nasty cold, but today the energy and time has finally come for the official release announcement!
Before we dive right into things, I'd like to express my gratitude to NLnet and the European Commission's Next Generation Internet initiative, whose funding and support have enabled development of the new cache architecture, the new tag rewriting system, accessibility improvements and compliance with the FSFE's REUSE licensing specification. As this release marks only the beginning of my 2024 work on faircamp under the Faircamp 1.0 NGI0 Entrust grant, expect a lot more exciting stuff to happen over the coming months!
And now without further ado, the new release:
Meet the new and improved cache
The biggest and most exciting change in this release is a complete overhaul of the cache implementation. Although this may sound like a technicality, it actually brings very tangible and critical improvements for everyone:
Previously, everytime you would move or rename any folders, audio or image files in your catalog, this would trigger costly decoding and (re-)computation of all associated output files. In the new cache system, files are recognized by content. You can freely move them around, rename them, etc. without causing any reprocessing. This even extends to duplicate files (e.g. the same track being in two different releases) - computation will only be performed once, for both of them.
Further, critical improvements to the dependency graph have been made, which in practice means that faircamp will much more reliably detect if changes you make to your files or manifests require (re-)computing of files that are affected by your changes.
One last important note on the cache update: Given the whole architecture changed, faircamp will need to rebuild the entire cache when you upgrade to 0.15.0 - this unfortunately cannot be avoided. If you don't direly need any of the new features in this release, you could decide to wait on one of the next faircamp releases to update just to save yourself the recomputation time until then. ;)
Commits:
01c9ad8
,
383e203
,
71b670a
,
97c2d08
Theming on all levels
Some people asked whether theme customizations like changing the background are possible on the release level - now they are!
All options documented on the Theme page in the manual can now be set for single releases or groups of releases.
Beyond releases this is also possible for artist pages now, however due to architectural differences, some gotchas remain - I would advise to hold off on artist page customization until at least the next release, then these gotchas should be resolved.
Commits:
64d9f39
,
16461b0
,
d2e09ee
,
88478a8
,
fc13569
Tag rewriting
Previously, faircamp offered only two tag behaviors: Either copying tags from the audio files in your catalog 1:1 onto the audio files it produces, or "rewriting" a fixed set of tags onto the produced audio files, which is based both on the tags in your audio files and the data in your manifests. Now however, you can fully customize this behavior for each and every tag that faircamp manages, as described in the Release documentation in the manual.
As another change in this area, it is now also possible to control images embedded in your audio files that same way - for now you can request them to be wiped (this has been added) or copied (this was previously the only option). A third option - rewriting cover images that you externally provided into the audio files as embedded images - is planned for the future, depending on how it goes maybe quite soon.
Commit: 90ca77a
Automatically deriving track number and title from filenames
If your audio files have no track number and/or title tags, but are consistently named to imply a track number and title, faircamp will now automatically take this data from the filename when needed.
For example, the formats "01 Example.flac"
, "01 - Example.flac"
,
"01: Example.flac"
would all be eligible for providing track number (1)
and title (Example). Some error tolerance is built in too, so faircamp will
accept and handle the occasional missing whitespace or separator, etc. just fine.
For this feature a shout-out goes to Andy Berdan, who proposed a first prototype for this in the form of a pull request - cheers!
Commit: 9ca7604
Share button reloaded
Up to now, faircamp featured "Share" buttons which opened a dialog for copying a link to the page. From this release on, these buttons have a more neutral "Copy link" label, and they directly copy the link on first click, providing visual feedback on the button label.
On top of this, whether they are displayed at all is now a customization option, both for the entire catalog and for specific releases.
Commits: 7e9277f
, c44a8ed
, 3e3aaab
Disabling the RSS Feed
Speaking of disabling things - you can now also disable the RSS feed if you want to.
Commit: 10c1ebb
Unlisted badges, improved unlisted behavior
Unlisted release pages are now visually indicated with an "Unlisted" badge, and as a slight change to previous behavior, they are now also never linked to on artist pages - even if the artist page itself is unlisted - which allows you to safely share different unlisted releases with different parties, without them being able to discover other unlisted releases.
Commit: 94d1c68
Accessibility improvements
In order to improve readability for sighted visitors, links in catalog and release texts are now underlined. All icons have been re-implemented as inline svg icons with translated descriptions, making them accessible for non-sighted visitors too.
Commits:
f4b542f
,
0c84d7f
,
f4e4fb8
Miscellaneous Fixes
- Round corners are now also applied to home/artist images when shown detached (
b87802d
) - When serving directories in preview, the server ensures that trailing slashes are auto-added to the address, this prevents errors when you manually type the url of an unlisted release without a trailing slash (
04bf953
) - Time formatting for tracks longer than an hour was broken, this has been fixed (
0e0dc9e
)
Licensing
Lastly, on the non-functional side, all files in the codebase were upgraded to be compliant with the FSFE's REUSE specification, allowing easy tracking of license and ownership information in the code. In this I took extra care to identify all previously contributed code and included proper attribution to all contributors in the license information headers.
Commit: 832d26a
Outro
That's it for this release, thanks for reading all the way!
As an outlook, to name just two of the many upcoming strands of work, I will in the next weeks get back in touch with HAN and Radically Open Security to follow up with accessibility and security questions around faircamp, which will greatly inform development throughout the coming months - exciting times ahead! \o/
Stay tuned, I'll be back with a new faircamp release soon.