Faircamp 2.0Unreleased

Heads-up: While these release notes already cover most of the upcoming changes a few important details are still missing. Consider these release notes preliminary.

# Automatic migration to 2.0

git 8
Automatic Migration to 2.0

It looks like you are opening a Faircamp 1.0 site directory. Would you like to automatically migrate it to 2.0?

- Your site will be migrated to a new directory
- Your original site directory will be left untouched
- Migration is fully automatic
- All noteworthy changes will be summarized in a report
- For best results your site should be error-free before migration

Many small things and a few core concepts have changed in Faircamp 2.0, but your site can automatically be migrated! Faircamp 2.0 detects 1.x sites and opens a wizard (desktop application) or displays the command (CLI) for migrating.

# Label mode is gone – long live label mode!

Label mode as a concept/setting, as well as its related settings for featuring/showing support artists, have been rebuilt as a different set of settings and concepts. This section will be expanded for the final release.

The new artist_attribution setting controls whether artists are displayed or not git 1

# Tags

git 3
Tag settings opened in the desktop application, showing options like
track.tags.mode, track.tags.album, track.tags.album_artist, etc.

The tags setting has been split up into a somewhat similar but subtly different constellation of settings, which now allows fine-grained control over tag rewriting without having to specify all tags that should be rewritten.

# Paycurtain without payment info

"Purchase downloads" page, displaying the text "You can pay using any of the
payment or donation links you find elsewhere on this page. If you can't find
any, get in touch!"
A paycurtain is now rendered even if there is no payment info – a generic, default text is used in this case git 3

# Clean URLs are now opt-in

Faircamp now produces long-time archivable builds, directly viewable from disk, out of the box. The site.clean_urls setting allows opting in to clean urls through a manifest setting now. Additionally, the --no-clean-urls flag allows overriding/disabling clean urls for (e.g.) the automatic creation of archivable builds in automated pipelines and backup routines.

Make clean urls opt-in, wire up --no-clean-urls cli flag again git 1

# New, unified visibility setting and conditional browse/search navigation

The new, unified visibility setting expands the previous unlisted/not unlisted state into four distinct states: Featured (openly accessible and included in browse/search navigation), Public (openly accessible but excluded from browse/search navigation), Unlisted (don't publicly link to item) and Offline (do not include in site). When all entities on a faircamp site are non-featured, the browse/search navigation automatically disappears.

Merge visibility properties into a single, defaultable setting git 1
Introduce and factor in external/local page setting for all object types git 1
Generalize searchability as discoverability, render browser conditionally git 1
Add and expose local_page/searchable setting for all types git 1
Implement tree update cascades, add offline options, encapsulate icons git 1

# Non-streamable and no-audio tracks

Tracks can now be explicitly set as non-streamable (although there is audio) or be created without any audio at all (which can later be added) git 1

# Speed controls as track-level setting

git 1
Close-up images of the docked player on two consecutive tracks, once with speed controls enabled, once disabled

Speed controls can now be enabled/disabled at the track level. The respective controls are rendered enabled/disabled in the player at runtime.

# Revised and customizable track ordering

git 2
Track Order dropdown in the Faircamp desktop application, showing a subset of
available options: Source Path, Title, Track Number, Update Date/Time, with
both an ascending and descending variant available for each.

Track order is now heuristically determined: If there are track numbers on most tracks, they control ordering. If there are release dates on even more tracks, they control ordering instead. Etc. Beyond this, ordering can be customized for each release, supporting many different ordering options.

# Expanded artist overrides

With the new defaults system you can override artists throughout the entire site (or for arbitrary subdirectories, etc.) git 1

# Hotlinking protection settings merged

Merge freeze/rotate_download_urls setting into combined url_seed setting git 1

# Universal Settings

Universal settings being shown in the docs, for instance demonstrating
how *.platform_integration corresponds to artist.platform_integration,
catalog.platform_integration, multitrack.platform_integration and
track.platform_integration at the same time.
Introduce universal defaults git 1

# Documentation reboot

Search popup modal against a blurred background
The documentation has been completely overhauled to include an in-page navigation, search functionality, and much more with Liaizon Wakest git 6
Search can be brought up directly with the keyboard shortcut [s] git 1
You can search by multiple keywords at once git 1
The documentation now features a stand-alone podcast example git 1
Starting with the Faircamp 1.7 to 2.0 transition, archived documentation for previous versions will be provided alongside that of the latest version now git 1

# Port auto-selection

Faircamp's new default preview port is 3247 ("Dial 127.0.0.1:FAIR") git 1
Faircamp now auto-selects its preview port from two different ranges (3247-3263, 8080-8096) git 1

# External pages

The external_page setting is now available for releases and tracks as well git 1

# Release, publication and update timestamps

Faircamp now supports a published/released/updated triplet of timestamp information (used especially for feeds) git 3

# Favicons

Custom favicons must now be included through the site.assets and site.metadata options, the favicon setting is now a toggle to disable the native faircamp favicon git 1

# Accessibility of the desktop application

git 3
Keyboard navigation outline around a labelled checkbox in the Faircamp desktop application

The desktop application is fully navigable by keyboard. All screens should provide the most important landmarks for effectively navigating the application with assistive technology. All non-decorative visual elements of the interface should provide textual descriptions. There was no specific accessibility auditing yet though, so any problem reports, feedback and concrete suggestions for improvements are very welcome!

# Artist Aliases

Artist aliases are now split into aliases (different artist names that connect to one artist and are always shown – new setting) and false aliases (different names rewritten to a single name, formerly the only alias behavior) git 1

# Links

Faircamp site footer showing arbitrary links like Imprint, Legal, Contact, etc.
With the site.links setting you can now provide site-wide links which are rendered in the footer git 1
The manifest syntax for declaring links has been greatly simplified git 2

rel-me linking is now supported through the site.metadata option using link tags rather than through links directly

# Image Descriptions

Image descriptions are now represented as separate manifest settings git 1
Image descriptions now support both inline and multiline values git 1

# Podcast support

Form fields for podcast settings

Categories (multitrack.podcast.categories)

Put each category on its own line, using the form 'Category' or 'Category > Subcategory', e.g.: 'Arts' or 'Arts > Visual Arts'.

Save/Cancel/Delete setting buttons.

Explicit Content (multitrack.podcast.explicit)

No explicit content

Override button.
You can now configure categories for your podcast feed(s) git 2
Explicit content is now communicated in podcast feeds (itunes:explicit), by default, streams are marked non-explicit git 1

# Presentation

Release pages now support two different presentation modes: Album and Podcast git 2

Heads-up: Podcast presentation is only minimally implemented for now (different ordering)

# External Downloads

Multiple external download links can now be supplied for each release/track git 2
Download links can now each be labelled git 1

# Feeds

Rename Generic RSS to Plain RSS git 1
The feed setting now supports different, more versatile presets (textual feeds only, media feeds only, etc.) git 1
Feeds now include published and last-updated dates based on the new metadata settings available git 1

# Cover generators

You can now configure the cover generator used for procedural covers – most choices are somewhat similar and on the experimental side. More diverse, fancy and polished ones will come eventually (probably).

Generated covers are now fully opaque, and generated either dark or light (not tied to the theme anymore) git 1

# Extra Downloads

Extra download default availability is now bundled+separate (instead of just bundled) git 1
Extra downloads can now be labelled in a custom way using the extras_label setting git 1

# Platform Integration/Link Previews based on Open Graph

The "opengraph" setting is now the "platform integration" setting and includes "content embeds" (timeline player embeds) git 1
Link previews (formerly "opengraph") are now enabled by default git 1

# New automatic and configurable homepage setting

Any page (artist/catalog/multitrack/track) can be the homepage now git 3
Faircamp automatically picks your homepage based on your content if you don't explicitly configure it (for instance if you only have one release, it will be directly on the homepage by default) git 2
The permalink redirects to the homepage when an item is set as the homepage git 1

# As-is audio formats for streaming and download

You can now use the "original" setting to provide your audio files to visitors, both for streaming and/or download, in exactly the format that you supplied

Draft foundational architecture for 2.0 git 1

# Graphical interface

The launcher window featuring a header image, site bookmarks area, version information and links to the website and donation pages

The editor features a toggleable log panel

Introduce toggleable log panel, improve asynchronous gui reporter abstraction git 1

Builds can be smoothly cancelled (and recontinued) anytime

Introduce build/launch screen, implement cancellable builds, major refactoring git 1

The dashboard screen displays global errors from the entire site in a single spot (in the future you will be able to jump to each respective localized issue page with a single click)

Introduce dashboard, iterate on build/launch screen layout git 1

The editor features a flat/tree navigation for different workflows

Persist flat/tree navigation mode state in editor config git 1

The editor displays tags derived from audio metadata directly in the respective override fields

Display derived multitrack title as tag default in editor git 1

The graphical editor provides a two/three-level navigation (object, pane, subpane)

Introduce secondary pane/section navigation git 1

The site navigation provides contextual actions for adding/removing artists, catalogs, multitrack tracks, as well as opening them in the file browser

Provide comprehensive contextual add/create/delete/open actions in navigation git 1

# Theming

Faircamp's footer with the new Darken/Lighten toggle switch
Introduce adaptive parallel dark/light theming git 3
Color swatches and sliders in the new faircamp 2.0 theme graphical theme settings

# Site directory structure and data model

Introduce site- and track-level groups for more flexible/powerful default propagation git 2
Introduce scoped settings inheritance git 2
Split old global catalog into new site and new (multiple) catalog abstractions git 1
Rename release to multitrack git 1
Track numbers are now optional data – if none are provided, none are displayed or included in download files git 1
Track numbering can now be configured down to the track-level git 1

# Programmatic access to the site tree

  "artists": [
    "Iva Zabkar"
  ],
  "asset_basename": "Iva Zabkar - AOEO",
  "copy_link": true,
  "cover": {
    "content_hash": "FMNrCehccY0",
    "description": "Cover",
    "max_160": {
      "path": "/demo/.faircamp_cache/pzRSMIDP.jpg",
      "edge_size": 160,
      "size": 5090
    },
    "max_320": {
      "path": "/demo/.faircamp_cache/uJpuYfaN.jpg",
      "edge_size": 320,
      "size": 13862
    },
    "max_480": {
      "path": "/demo/.faircamp_cache/36QkQpi-.jpg",
      "edge_size": 424,
      "size": 20872
    },
    "max_800": null,
    "max_1280": null
  },
  "download_access": {
    "Paycurtain": {
      "price": {
        "currency_code": "USD",
        "currency_symbol": "$",
        "range": {
          "start": 0.0,
          "end": null
        },
        "user_representation": "USD 0+"
      },
      "payment_info": null
    }
  },
  "embedding": true,
  "external_page": null,
  "extra_downloads": "BundledAndSeparate",
Introduce --export-tree and --render-tree command line options git 2

# Progress reporting

Rewrite and improve hybrid (CLI/GUI) progress reporting git 2

# Robustness

Detect and report artist name/alias collisions git 1
Register tag reading failures (previously silently ignored and replaced with empty tags read) git 1
Propagate and gracefully handle io errors for cache, catalog, preprocessing and rendering git 1

# Performance

Use concurrent processing

Draft architecture and base implementation for graphical interface git 1
Isolate audio meta and waveform computation and only conditionally run when needed git 2

# Translations

Welsh translations by Henry Young (on various buttons and links in an album page header)
Add welsh translations Henry Young git 1
Update Ukrainian translation before v2 beta Denys Nykula git 1
Update danish translations Jannis git 1
Update french translations Jérémie Bertrand git 1
Update lithuanian translations Vac git 1
Update catalan translations Ayman Hamad git 1
Update polish translations luce git 1
Update french translations Khawla A.G. git 1
Update spanish translations Eduardo Hernández Gil git 1
Update turkish translations atomkarinca git 1

# Image processing pipeline

git 1
An arrow pointing from a libvips title graphic to the Rust image crate logo

The image processing backend has been unified to use a pure rust solution (image). For now this comes with a small performance penalty (libvips is a bit faster) and small feature reduction (HEIF is not yet not supported in the image crate), but it greatly eases distribution and system compatibility for Faircamp, freeing up resources for actual development. Furthermore, the functionality gap between libvips and the image crate is likely going to close fast.

# Bugfixes

Update supported image formats constant, dynamically construct format filters with troschunk git 1
Use case-insensitive matching for Vorbis header comment keys with Baggypants, dheadshot git 2
Fall back to GET for failing HEAD requests during download code check with guesst git 1
Fix patchy logic for determining varying track artists on a release with incognitothief git 1
Print detailed debug reports for hard_link_or_copy failure cases git 1

# Misc

Generated asset filenames are now length-constrained to prevent overflowing maximum platform path length limits git 1
The faircamp website has moved to faircamp.org git 1
The desktop application is now the default build target git 1
The desktop application splash screen image can be customized for own builds git 1
Print dynamically retrieved name of current executable in usage hints with lnicola git 1
In the CLI edition --catalog-dir is now a mandatory positional argument git 1

# Contributors to these unreleased changes

# All commits for this release
git 214