You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A multi-disciplinary library design charrette (marketing, UX, dev-ops, gamification, learning-design, ecosystem/borrow-vs-build lenses) studied FeedBack's library + metadata management against homelab "librarianship" apps — the *arr suite (Radarr/Sonarr/Lidarr/Prowlarr), Plex, Jellyfin, Navidrome, Audiobookshelf, Komga/Kavita, Calibre-Web, beets. This issue logs the findings that touch the file format / metadata schema for team review/discussion, plus a cross-referenced summary of the core/app findings.
Two low-risk slices already shipped as core PRs (not spec changes): an A–Z jump rail on the v3 grid (got-feedback/feedback#634) and a practice-aware "Keep practicing" shelf + Repertoire meter (#635). This issue is about the bigger metadata questions that need agreement before building.
Discussions are disabled on this repo, so this is an issue. Convert/split as the team prefers.
1. ★ Per-arrangement difficulty rating (the keystone)
Problem. Difficulty is invisible at the library level. There is no per-song/per-arrangement difficulty a user can sort, filter, or see before committing — the only difficulty signal is the phrase-level ladder (§6.7), which exists only inside phrase-aware packs and only once you're in the chart. The learning-design lens called this the keystone gap: you can't sequence easy→mastery, match difficulty to skill, or drive "what to practice next" without it.
Proposal (for discussion). An OPTIONAL difficulty integer (say 1–10) on each arrangements[] entry (§5.2) — per-arrangement so a song's bass vs lead vs rhythm keep distinct ratings (cross-instrument parity). Additive MINOR key per §4.2, so older Readers ignore it.
Open Qs: scale + meaning (absolute 1–10? a coarse beginner/intermediate/advanced enum?); authored vs derived (a Writer could compute it from note density + tempo (§6.10) + the phrase ladder span (§6.7) + tuning distance) vs both with an authored override; relationship to the existing phrase max_difficulty.
Why spec, not just app: difficulty should travel with the pack so every host/importer agrees and it survives re-scan — it's metadata about the chart, not the user.
2. Genre + technique/skill tags
Problem. §5.1 carries title/artist/album/year… but no genre, no tags, no bpm at the manifest level. A practice curriculum is organized by the skill a piece builds ("16th-funk-pocket", "alternate-picking", "drop-D"), and a library is browsed by genre. Today neither is expressible or filterable.
Proposal (for discussion). Additive MINOR keys on the top-level manifest (§5.1):
genre (string or string[]).
tags (string[]) — free-form, queryable technique/skill/mood tags (the beets "flexible attributes" pattern).
Older Readers ignore both. The core app would index them → new sort/filter facets.
Open Qs: controlled vocabulary vs free-form for tags; whether bpm belongs here too (note per-arrangement tempo already lives at §6.10).
3. Metadata enrichment / scraping — OPEN QUESTION (no team consensus yet)
Context. Imports today are manifest→XML→foldername; "Edit Metadata" touches 4 fields; messy imports → an ugly, art-poor grid (marketing flagged this as a demo-wow + adoption-friction issue). Homelab precedent: Lidarr+MusicBrainz, beets autotagger, Komf cover/metadata fetch.
Deliberately raised as a discussion, not a proposal — the team isn't aligned on whether to do online metadata lookup at all. If pursued, the homelab-crowd constraints are non-negotiable: opt-in, offline-first, no silent phone-home, and the natural home is a library provider / enrichment source, not core. Spec angle: if enriched metadata is written back, does it land in the feedpak manifest (and how is provenance/override tracked)? Flagging for a decision before anyone builds.
4. Related core/app + DB-ops findings (NOT file-format — cross-referenced here for the charrette record; action lives in got-feedback/feedback)
Smart / dynamic collections (rule = a saved /api/library filter, auto-refreshing): "needs work (<70%)", "not played in 30d", "drop-D". Ecosystem lens: build as a library provider so it reuses the whole Songs UI + filter vocabulary — minimal core code. (Pairs with genre/tags + difficulty above.)
Back up web_library.db in the Settings export bundle (dev-ops lens's Add feedpak format specification v1.0.0 #1): scores/favorites/playlists are the only library state a rescan can't rebuild. Reuses the existing #113 backup machinery.
Grid scaling: the v3 grid is forward-only paged with no virtualization; the new jump rail "loads through" to a letter. A keyset-seek + virtualized window is the follow-up before libraries hit five figures.
Persisted wishlist / "wanted" (the *arr Wanted-list analogue): extend the existing find_more ownership-diff + the saved_for_later playlist.
Already covered — don't reinvent: watch-folder (core scanner), ordered setlists (setlist), browse preview (song_preview), fuzzy local match (the_daily).
Recommended sequencing
Difficulty rating (§1) — the unlock; agree the scale + derived-vs-authored, then it can ride the pack and light up sort/filter/recommendations.
A multi-disciplinary library design charrette (marketing, UX, dev-ops, gamification, learning-design, ecosystem/borrow-vs-build lenses) studied FeedBack's library + metadata management against homelab "librarianship" apps — the *arr suite (Radarr/Sonarr/Lidarr/Prowlarr), Plex, Jellyfin, Navidrome, Audiobookshelf, Komga/Kavita, Calibre-Web, beets. This issue logs the findings that touch the file format / metadata schema for team review/discussion, plus a cross-referenced summary of the core/app findings.
Two low-risk slices already shipped as core PRs (not spec changes): an A–Z jump rail on the v3 grid (
got-feedback/feedback#634) and a practice-aware "Keep practicing" shelf + Repertoire meter (#635). This issue is about the bigger metadata questions that need agreement before building.1. ★ Per-arrangement difficulty rating (the keystone)
Problem. Difficulty is invisible at the library level. There is no per-song/per-arrangement difficulty a user can sort, filter, or see before committing — the only difficulty signal is the phrase-level ladder (§6.7), which exists only inside phrase-aware packs and only once you're in the chart. The learning-design lens called this the keystone gap: you can't sequence easy→mastery, match difficulty to skill, or drive "what to practice next" without it.
Proposal (for discussion). An OPTIONAL
difficultyinteger (say 1–10) on eacharrangements[]entry (§5.2) — per-arrangement so a song's bass vs lead vs rhythm keep distinct ratings (cross-instrument parity). Additive MINOR key per §4.2, so older Readers ignore it.max_difficulty.2. Genre + technique/skill tags
Problem. §5.1 carries title/artist/album/year… but no
genre, notags, nobpmat the manifest level. A practice curriculum is organized by the skill a piece builds ("16th-funk-pocket", "alternate-picking", "drop-D"), and a library is browsed by genre. Today neither is expressible or filterable.Proposal (for discussion). Additive MINOR keys on the top-level manifest (§5.1):
genre(string or string[]).tags(string[]) — free-form, queryable technique/skill/mood tags (the beets "flexible attributes" pattern).Older Readers ignore both. The core app would index them → new sort/filter facets.
bpmbelongs here too (note per-arrangement tempo already lives at §6.10).3. Metadata enrichment / scraping — OPEN QUESTION (no team consensus yet)
Context. Imports today are manifest→XML→foldername; "Edit Metadata" touches 4 fields; messy imports → an ugly, art-poor grid (marketing flagged this as a demo-wow + adoption-friction issue). Homelab precedent: Lidarr+MusicBrainz, beets autotagger, Komf cover/metadata fetch.
Deliberately raised as a discussion, not a proposal — the team isn't aligned on whether to do online metadata lookup at all. If pursued, the homelab-crowd constraints are non-negotiable: opt-in, offline-first, no silent phone-home, and the natural home is a library provider / enrichment source, not core. Spec angle: if enriched metadata is written back, does it land in the feedpak manifest (and how is provenance/override tracked)? Flagging for a decision before anyone builds.
4. Related core/app + DB-ops findings (NOT file-format — cross-referenced here for the charrette record; action lives in
got-feedback/feedback)/api/libraryfilter, auto-refreshing): "needs work (<70%)", "not played in 30d", "drop-D". Ecosystem lens: build as a library provider so it reuses the whole Songs UI + filter vocabulary — minimal core code. (Pairs with genre/tags + difficulty above.)web_library.dbin the Settings export bundle (dev-ops lens's Add feedpak format specification v1.0.0 #1): scores/favorites/playlists are the only library state a rescan can't rebuild. Reuses the existing #113 backup machinery.find_moreownership-diff + thesaved_for_laterplaylist.setlist), browse preview (song_preview), fuzzy local match (the_daily).Recommended sequencing
cc maintainers — looking for direction on §1's scale and §3's go/no-go in particular.