Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1160 commits
Select commit Hold shift + click to select a range
83ae580
Handle indexer suffixes in playlist repair
Greensand321 Jan 18, 2026
4d4e178
Merge pull request #780 from Greensand321/codex/add-playlist-repair-t…
Greensand321 Jan 18, 2026
d532ef7
Add opus to supported audio extensions
Greensand321 Jan 18, 2026
183ef99
Merge pull request #781 from Greensand321/codex/check-opus-file-compa…
Greensand321 Jan 18, 2026
a41ec1e
Improve playlist repair matching
Greensand321 Jan 18, 2026
87c713a
Merge branch 'main' into codex/add-playlist-repair-tool-with-opus-sup…
Greensand321 Jan 18, 2026
6aa9eb4
Merge pull request #782 from Greensand321/codex/add-playlist-repair-t…
Greensand321 Jan 18, 2026
cddc272
Improve playlist repair matching
Greensand321 Jan 18, 2026
650e54b
Merge pull request #783 from Greensand321/codex/enhance-playlist-repa…
Greensand321 Jan 18, 2026
1741d05
Extend file cleanup to handle copy suffixes
Greensand321 Jan 18, 2026
9b2df0a
Merge pull request #784 from Greensand321/codex/find-files-ending-wit…
Greensand321 Jan 18, 2026
9ee3472
Harden playlist repair matching
Greensand321 Jan 18, 2026
5a41444
Revert "Improve playlist repair matching robustness"
Greensand321 Jan 18, 2026
675d7b0
Merge pull request #786 from Greensand321/revert-783-codex/enhance-pl…
Greensand321 Jan 18, 2026
d84c52e
Merge pull request #785 from Greensand321/codex/enhance-playlist-repa…
Greensand321 Jan 18, 2026
d886697
Add Opus metadata support for player
Greensand321 Jan 18, 2026
9d522ce
Merge pull request #787 from Greensand321/codex/add-support-for-opus-…
Greensand321 Jan 18, 2026
ccca720
Include Opus files in library scans
Greensand321 Jan 18, 2026
4f9d791
Merge pull request #788 from Greensand321/codex/add-support-for-opus-…
Greensand321 Jan 18, 2026
05bdf53
Include ogg in default playlist extensions
Greensand321 Jan 18, 2026
9406d3c
Merge pull request #789 from Greensand321/codex/add-support-for-opus-…
Greensand321 Jan 18, 2026
7cab8cb
Improve playlist repair matching
Greensand321 Jan 18, 2026
f2150f3
Revert "Harden playlist repair matching and root-aware resolution"
Greensand321 Jan 18, 2026
f16a94d
Merge pull request #791 from Greensand321/revert-785-codex/enhance-pl…
Greensand321 Jan 18, 2026
435c101
Revert "Revert "Harden playlist repair matching and root-aware resolu…
Greensand321 Jan 18, 2026
bc5b2ee
Merge pull request #792 from Greensand321/revert-791-revert-785-codex…
Greensand321 Jan 18, 2026
157c2e6
Merge branch 'main' into codex/improve-playlist-repair-tool-functiona…
Greensand321 Jan 18, 2026
855e41a
Merge pull request #790 from Greensand321/codex/improve-playlist-repa…
Greensand321 Jan 18, 2026
c1c762f
Fix Opus preview start offset
Greensand321 Jan 18, 2026
2f9c81e
Merge pull request #793 from Greensand321/codex/investigate-opus-code…
Greensand321 Jan 18, 2026
181ab29
Handle tag read failures in player rows
Greensand321 Jan 18, 2026
708fa96
Merge pull request #794 from Greensand321/codex/investigate-opus-file…
Greensand321 Jan 18, 2026
b910379
Revert "Fix Opus preview start offset"
Greensand321 Jan 18, 2026
15319bc
Merge pull request #795 from Greensand321/revert-793-codex/investigat…
Greensand321 Jan 18, 2026
1550781
Improve playlist repair track matching
Greensand321 Jan 18, 2026
e9f9a68
Merge pull request #796 from Greensand321/codex/review-playlist-repai…
Greensand321 Jan 18, 2026
24b4ca4
Improve playlist repair fuzzy matching
Greensand321 Jan 18, 2026
20df8b3
Merge pull request #797 from Greensand321/codex/review-playlist-repai…
Greensand321 Jan 18, 2026
34accde
Label winner side in duplicate pair review
Greensand321 Jan 18, 2026
162fef5
Merge pull request #798 from Greensand321/codex/label-winner-side-in-…
Greensand321 Jan 18, 2026
22cd527
Add codec-based export tool
Greensand321 Jan 18, 2026
f95d16d
Merge pull request #799 from Greensand321/codex/add-export-list-by-co…
Greensand321 Jan 18, 2026
b54e6e2
Revert "Add "Export List by Codec" tool to Tools menu"
Greensand321 Jan 18, 2026
ed417df
Merge pull request #800 from Greensand321/revert-799-codex/add-export…
Greensand321 Jan 18, 2026
f01ae01
Add codec export option to omit paths
Greensand321 Jan 18, 2026
a1c050f
Merge pull request #801 from Greensand321/codex/add-export-list-by-co…
Greensand321 Jan 18, 2026
f6891bb
docs: fix outdated File Overview entries in README
claude Mar 15, 2026
b1d6190
docs: add full GUI inventory for frontend redesign reference
claude Mar 15, 2026
fa3c6cb
Merge pull request #802 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 15, 2026
053e516
docs: add CLAUDE.md with project context for AI-assisted development
claude Mar 15, 2026
050ff1e
Merge pull request #803 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 15, 2026
106bd0e
feat: rebuild GUI as PySide6 Qt Widgets with Option A Navigator + Wor…
claude Mar 15, 2026
ad673b0
Merge pull request #804 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 15, 2026
e722e24
feat: implement full Approach 3 theme engine (QPainter + 14 themes)
claude Mar 15, 2026
3d0618e
Merge pull request #805 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 15, 2026
baf0453
fix: remove PM_FrameWidth which does not exist in PySide6
Greensand321 Mar 16, 2026
4878158
fix: guard Qt5-only PixelMetric/ControlElement enum members in style.py
Greensand321 Mar 16, 2026
e8f7458
docs: update README and gui_inventory for PySide6 GUI + theme engine
claude Mar 16, 2026
cdcf408
feat: add Inter + JetBrains Mono typography (Option C+D)
claude Mar 16, 2026
54c915e
Merge branch 'main' into claude/analyze-repo-structure-zeXXy
Greensand321 Mar 16, 2026
a65f441
Merge pull request #806 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 16, 2026
333e997
fix: tighten sidebar proportions and soften font rendering
claude Mar 16, 2026
f93de49
Merge pull request #807 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 16, 2026
3608d2f
feat: sliding pill tracker animation for sidebar nav
claude Mar 16, 2026
bfb83fd
Merge pull request #808 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 16, 2026
58f3f4a
feat: double sidebar size, splash screen, and exit button
claude Mar 16, 2026
7561873
Merge pull request #809 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 16, 2026
ccba72a
fix: fit all nav items without scrolling + themed splash with smooth …
claude Mar 16, 2026
aa7fcbe
Merge pull request #810 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 16, 2026
31e30e8
feat: auto-size nav buttons to fill sidebar height on resize
claude Mar 16, 2026
46a4058
Merge pull request #811 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 16, 2026
4f962f6
feat: app icon + cross-fade splash transition
claude Mar 16, 2026
d3776d8
feat: workspace gradient background + full card-based layout system
claude Mar 16, 2026
43a7257
Merge pull request #812 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 16, 2026
97e94a4
feat: through-the-glass gradient — single canvas spanning sidebar + w…
claude Mar 16, 2026
0bd3179
Merge pull request #813 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 16, 2026
cf55a1e
Revert "feat: through-the-glass gradient — single canvas spanning sid…
Greensand321 Mar 16, 2026
38dd816
Merge pull request #814 from Greensand321/revert-813-claude/analyze-r…
Greensand321 Mar 16, 2026
28490f1
feat(sidebar): implement Unified Canvas gradient treatment
claude Mar 16, 2026
dff3988
Merge branch 'main' into claude/analyze-repo-structure-zeXXy
Greensand321 Mar 16, 2026
4d12fbc
Merge pull request #815 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 16, 2026
491d970
feat(landing): add Mosaic Reveal landing page between splash and main…
claude Mar 17, 2026
09f42c6
Merge pull request #816 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
e715315
feat(landing): circular carousel rotation + album art on tiles
claude Mar 17, 2026
1ee727f
Merge pull request #817 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
9b60123
fix(landing): eliminate fly-in → rotation depth transition jump
claude Mar 17, 2026
7eca40c
Merge pull request #818 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
dadc133
perf(landing): 120 fps rotation timer + shorter transition ramps
claude Mar 17, 2026
f32f909
Merge pull request #819 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
d80f445
perf(landing): buttery-smooth carousel via render batching + pixmap c…
claude Mar 17, 2026
20b6dd0
Merge pull request #820 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
d82ca87
fix(landing): eliminate tile-resize pop with float-precision draw rect
claude Mar 17, 2026
9078005
Merge pull request #821 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
7e71142
refactor(landing): Option 2 — pure paintEvent, zero per-tile QWidgets
claude Mar 17, 2026
1b4b993
Merge pull request #822 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
202791f
revert(landing): restore mosaic grid, deprecate carousel animation
claude Mar 17, 2026
1e5e5f8
Merge pull request #823 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
29c7cfa
feat(landing): add album art mosaic + fix maximize crash
claude Mar 17, 2026
ef017bd
Merge pull request #824 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
75ab4d4
chore: purge LLM assistant, C++ bindings, and stub plugins
claude Mar 17, 2026
13f8891
Wire Tag Fixer, Duplicate Finder, and Library Sync workspaces to back…
claude Mar 17, 2026
d7b2232
Wire Playlist and Tools workspaces to backends
claude Mar 17, 2026
fc66044
Fix Clustered, Genres, and Similarity workspaces to call real backend…
claude Mar 17, 2026
9422bb4
Merge pull request #825 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
5a08d03
Fix IndexerWorker: correct run_full_indexer() call signature
claude Mar 17, 2026
70968cc
Merge pull request #826 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
b5f9295
Fix IndexerWorker three bugs found by tracing against Tkinter reference
claude Mar 17, 2026
80eaf10
Merge pull request #827 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
e71c978
Fix library selection: shared pipeline, DontUseNativeDialog, consiste…
claude Mar 17, 2026
fc7306e
Merge pull request #828 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
b297cb1
Fix file dialog: use native OS picker and correct parent window
claude Mar 17, 2026
65aa6d2
Merge pull request #829 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
9fccce3
Restore DontUseNativeDialog (Qt picker preferred) — glitch fix is sel…
claude Mar 17, 2026
fc01a21
Merge pull request #830 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
6559082
Fix QFileDialog blank-out: use standalone top-level dialog (no parent)
claude Mar 17, 2026
22b657a
Merge pull request #831 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
c147a02
Fix NameError: add missing paint_window_gradient and import it in sid…
claude Mar 17, 2026
f5e598a
Merge pull request #832 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
0989bf7
landing: no duplicate covers, unique random selection per launch
claude Mar 17, 2026
e8e98f0
Merge pull request #833 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
43eafae
landing: fix flat-library art scan, extend depth to 7 levels
claude Mar 17, 2026
158125e
Merge pull request #834 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
7dcca86
landing: fix missing artwork when multiple albums share a directory
claude Mar 17, 2026
00e3988
Merge pull request #835 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
e8af20b
landing: randomise walk order, refactor scanner into focused methods
claude Mar 17, 2026
ab8071e
Merge pull request #836 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
3f391f8
landing: drop sidecar phase; add _ArtHistory for cross-run dedup
claude Mar 17, 2026
add59d1
Merge pull request #837 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
eaaea9c
landing: restore sidecar scanning; unify both sources under history o…
claude Mar 17, 2026
81c6f68
Merge pull request #838 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
d92e8ea
landing: embedded-only cover extraction via mutagen + ffmpeg fallback
claude Mar 17, 2026
c451b7f
Merge pull request #839 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 17, 2026
aaa2526
landing: fix _cover_from_file — per-step error handling + 6 extractio…
claude Mar 18, 2026
e7aa8e9
Merge pull request #840 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 18, 2026
89c4733
landing: parallel art scan + emit-immediately + terminal diagnostics
claude Mar 18, 2026
3f619f8
Merge pull request #841 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 18, 2026
7cd0edd
landing: compact diagnostic summary + drop ffmpeg hot-path
claude Mar 19, 2026
ae9445c
Merge pull request #842 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 19, 2026
3478f75
landing: pre-composite tile pixmaps — paintEvent reduced to one blit
claude Mar 19, 2026
123e889
Merge pull request #843 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 19, 2026
6dbb07e
landing: move baking to workers, cap per-dir attempts, rolling pool
claude Mar 19, 2026
256229f
Merge pull request #844 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 19, 2026
b4bae74
landing: fix GIL starvation — bake in scanner thread, not worker pool
claude Mar 19, 2026
a675a67
Merge pull request #845 from Greensand321/claude/analyze-repo-structu…
Greensand321 Mar 19, 2026
854af4b
Add comprehensive startup sequence audit report
claude Mar 20, 2026
2518f3a
Merge pull request #846 from Greensand321/claude/audit-startup-splash…
Greensand321 Mar 20, 2026
707c88b
Fix Issue 1: Art scanner thread lifecycle race condition
claude Mar 20, 2026
03574bc
Fix Issue 2: Animation reference leak in cross-fade animations
claude Mar 20, 2026
09076ab
Fix Issue 5: Improve theme color loading error handling
claude Mar 20, 2026
92e5e90
Add implementation summary for startup optimizations
claude Mar 20, 2026
09ee6fc
Merge pull request #847 from Greensand321/claude/audit-startup-splash…
Greensand321 Mar 20, 2026
e7b064a
Fix UnboundLocalError caused by local sys imports
claude Mar 20, 2026
cc8004a
Merge pull request #848 from Greensand321/claude/audit-startup-splash…
Greensand321 Mar 20, 2026
d5320b6
Implement progressive loading: splash bar tied to real image loading
claude Mar 20, 2026
b3fcb35
Merge pull request #849 from Greensand321/claude/audit-startup-splash…
Greensand321 Mar 20, 2026
b163d8c
Add UX polish: smooth loading transition, rotating spinner, smart button
claude Mar 20, 2026
aba5894
Merge pull request #850 from Greensand321/claude/audit-startup-splash…
Greensand321 Mar 20, 2026
1ffaee4
Improve splash screen text contrast and theme integration
claude Mar 20, 2026
36e7bb4
Merge pull request #851 from Greensand321/claude/audit-startup-splash…
Greensand321 Mar 20, 2026
8f88b0a
Simplify splash/landing text to white and smooth 0-50% loading bar
claude Mar 20, 2026
7f41baa
Merge pull request #852 from Greensand321/claude/audit-startup-splash…
Greensand321 Mar 20, 2026
cc4e0ef
Update documentation with verified implementation status
claude Mar 20, 2026
2129f05
Add Library Sync per-item review implementation plan
claude Mar 20, 2026
3bc9ce2
Implement Phases 1-3: Per-item review flags for Library Sync
claude Mar 20, 2026
8ca2820
Phase 5: Documentation — planning, testing guide, and feature summary
claude Mar 20, 2026
91c0273
Update user-facing documentation for per-item flags feature
claude Mar 20, 2026
81a0b6f
Add implementation status and completion summary
claude Mar 20, 2026
6997733
Add comprehensive feature specification document
claude Mar 20, 2026
c84b807
Add comprehensive Library Sync system specification
claude Mar 20, 2026
b43dc71
Add master implementation guide with complete checklist
claude Mar 20, 2026
df22a3b
Add implementation status review document
claude Mar 20, 2026
ba6ac10
Add comprehensive interactive graphs & clustering enhancement plan
claude Mar 20, 2026
84a65aa
Implement Phase 1 & 2: Interactive graph widgets and clustering wizard
claude Mar 20, 2026
7dbab88
Implement Phase 3: Enhanced ClusteredWorkspace with wizard integration
claude Mar 20, 2026
b8694a0
Add comprehensive Phases 1-3 implementation summary
claude Mar 20, 2026
82eaa84
Integration Step 1-4: Wire graph widgets and update workspace registr…
claude Mar 20, 2026
3b629b1
Fix clustering backend bugs: numpy int32 serialization and variable n…
claude Mar 20, 2026
aa2e2d1
Add integration completion summary document
claude Mar 20, 2026
f72aa13
Fix documentation to reference correct entry point (alpha_dex_gui.py)
claude Mar 20, 2026
91b4aba
Add comprehensive code audit report
claude Mar 20, 2026
4e55f0b
Fix CRITICAL-1 and CRITICAL-2: Worker thread cleanup and exception lo…
claude Mar 20, 2026
98bdd61
Fix CRITICAL-3 and CRITICAL-4: Bounds checking and JSON validation
claude Mar 20, 2026
381057f
Fix CRITICAL-5: Memory bloat and cache invalidation
claude Mar 20, 2026
b15ef02
Fix HIGH-1 and HIGH-2: Library path validation and parameter validation
claude Mar 20, 2026
da6a32e
Fix HIGH-5: Unhandled numpy operations on empty data
claude Mar 20, 2026
f446b0a
Fix HIGH-6: No error handling for missing audio files
claude Mar 20, 2026
95e5acf
Fix MEDIUM-3: Widget lifecycle and closure issues in cluster legend
claude Mar 20, 2026
5332dcb
Fix MEDIUM-6: Thread safety - deep copy config dict
claude Mar 20, 2026
e483afe
Fix LOW-2 and LOW-3: Magic numbers and PyQtGraph guidance
claude Mar 20, 2026
bfc140d
Add comprehensive fixes summary document
claude Mar 20, 2026
5501fb8
Fix CRITICAL file descriptor leaks and cache validation
claude Mar 20, 2026
4d78ec4
Add fresh comprehensive audit results (25 issues identified)
claude Mar 20, 2026
1dff7e4
Fix HIGH-1: Widget deletion race condition in clustering panel
claude Mar 20, 2026
f33cf5f
Merge pull request #853 from Greensand321/claude/audit-startup-splash…
Greensand321 Mar 20, 2026
4897b7d
Fix circular import between library_sync and library_sync_review_state
claude Mar 20, 2026
2211c80
Merge pull request #854 from Greensand321/claude/audit-startup-splash…
Greensand321 Mar 20, 2026
d7c171f
Make InteractiveScatterPlot gracefully handle missing PyQtGraph
claude Mar 20, 2026
ce3241b
Merge pull request #855 from Greensand321/claude/audit-startup-splash…
Greensand321 Mar 20, 2026
37fc97d
Add 2D embedding computation and caching for cluster visualization
claude Mar 21, 2026
9b7b3cb
Merge pull request #856 from Greensand321/claude/audit-startup-splash…
Greensand321 Mar 21, 2026
88384ce
Implement revolutionary 3D audio feature space visualization
claude Mar 21, 2026
1296b98
Merge pull request #857 from Greensand321/claude/audit-startup-splash…
Greensand321 Mar 21, 2026
e5dd7f8
Fix 3D visualization and add axis control
claude Mar 21, 2026
2ece1a6
Enable parallel processing by default and make 3D the default view
claude Mar 21, 2026
b8c3cd7
Merge pull request #858 from Greensand321/claude/audit-startup-splash…
Greensand321 Mar 21, 2026
26b9514
Rebuild 3D scatter plot for TRUE 3D visualization with proper depth
claude Mar 21, 2026
e136e8d
Merge pull request #859 from Greensand321/claude/audit-startup-splash…
Greensand321 Mar 21, 2026
78c8c79
Integrate Three.js + WebView for 3D cluster visualization
claude Mar 21, 2026
5539d42
Merge pull request #860 from Greensand321/claude/audit-startup-splash…
Greensand321 Mar 21, 2026
2a8c011
Revert Three.js integration and remove cluster graph GUI
claude Mar 21, 2026
633ac13
Merge pull request #861 from Greensand321/claude/audit-startup-splash…
Greensand321 Mar 21, 2026
dbaa88a
Restore compat.py and documentation — keep only graph GUI deletion
claude Mar 21, 2026
4cbc435
Merge pull request #862 from Greensand321/claude/audit-startup-splash…
Greensand321 Mar 21, 2026
5afc223
Merge pull request #863 from Greensand321/main
Greensand321 Mar 21, 2026
73aa0c0
Remove broken GraphWorkspace import
claude Mar 21, 2026
60adedb
Merge pull request #864 from Greensand321/claude/audit-startup-splash…
Greensand321 Mar 21, 2026
888d7de
Add Three.js 3D cluster graph visualization workflow
claude Mar 21, 2026
660ad08
Merge pull request #865 from Greensand321/claude/cluster-graph-workfl…
Greensand321 Mar 21, 2026
c150c88
Enable Graph workspace in Qt GUI sidebar
claude Mar 21, 2026
73e7c9e
Merge pull request #866 from Greensand321/claude/cluster-graph-workfl…
Greensand321 Mar 21, 2026
0310754
Add diagnostic tools and test demo for 3D cluster graph visualization
claude Mar 21, 2026
6fadfb6
Add comprehensive diagnostic guide for 3D cluster graph
claude Mar 21, 2026
fe46c0a
Add implementation summary document
claude Mar 21, 2026
29e361c
Merge pull request #867 from Greensand321/claude/cluster-graph-workfl…
Greensand321 Mar 21, 2026
daeb0ec
new 3d graph viewer for music visualization.
Greensand321 Mar 21, 2026
e439857
commit no message
Greensand321 Apr 4, 2026
cf17736
Merge branch 'main' of https://github.com/Greensand321/Music_Indexer
Greensand321 Apr 4, 2026
db744db
all changes, fixed the utility tools
Greensand321 Apr 6, 2026
6d028ed
Polish utilities tab and fix splash album art
claude Apr 6, 2026
baf4ca7
Merge pull request #870 from Greensand321/claude/polish-utilities-tab…
Greensand321 Apr 6, 2026
0bfbdaa
gemin changes
Greensand321 Apr 7, 2026
c09cc51
claude updates to player
Greensand321 Apr 9, 2026
11f6b8c
general updates to player
Greensand321 Apr 11, 2026
d82613d
Delay landing art scan to reduce splash-time lag
Greensand321 Apr 11, 2026
9cc9cfa
Merge pull request #871 from Greensand321/codex/find-player-startup-p…
Greensand321 Apr 11, 2026
d9d97f3
Revert "Defer and debounce art-scanner startup to avoid splash-time lag"
Greensand321 Apr 11, 2026
c87659d
Merge pull request #872 from Greensand321/revert-871-codex/find-playe…
Greensand321 Apr 11, 2026
2727692
Delay initial library scan to smooth landing transition
Greensand321 Apr 11, 2026
ec8101d
Merge pull request #873 from Greensand321/codex/add-delay-for-player-…
Greensand321 Apr 11, 2026
41b6083
Apply startup scan delay to remaining I/O-heavy tasks
Greensand321 Apr 11, 2026
a549c63
Merge pull request #874 from Greensand321/codex/add-delay-for-player-…
Greensand321 Apr 11, 2026
b9079a7
Restore immediate landing artwork scan startup
Greensand321 Apr 11, 2026
e3e33f2
Merge branch 'main' into codex/add-delay-for-player-scan-initializati…
Greensand321 Apr 11, 2026
22222e6
Merge pull request #875 from Greensand321/codex/add-delay-for-player-…
Greensand321 Apr 11, 2026
b91a541
Revert "Defer heavy library scans and stats to keep startup animation…
Greensand321 Apr 11, 2026
3055072
Merge pull request #876 from Greensand321/revert-874-codex/add-delay-…
Greensand321 Apr 11, 2026
2a58af3
Revert "Defer expensive library/stat scans and stop art scanner durin…
Greensand321 Apr 11, 2026
af52879
Merge pull request #877 from Greensand321/revert-875-codex/add-delay-…
Greensand321 Apr 11, 2026
79c7e3e
player improvements and updates
Greensand321 Apr 12, 2026
ed5e3c4
Merge pull request #878 from Greensand321/fix/player-album-cover-bg
Greensand321 Apr 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
15 changes: 15 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"permissions": {
"allow": [
"Bash(C:/Users/alexa/miniconda3/python.exe -c \"import sys; sys.path.insert\\(0, '.'\\); from gui.workspaces.tools import ToolsWorkspace, ArtistTitleWorker; print\\('OK'\\)\")",
"Bash(C:/Users/alexa/miniconda3/python.exe -c \"import sys; sys.path.insert\\(0, '.'\\); from gui.workspaces.tools import ToolsWorkspace, ArtistTitleWorker, FileCleanupWorker; print\\('OK'\\)\")",
"Bash(C:/Users/alexa/miniconda3/python.exe -c \"import sys; sys.path.insert\\(0, '.'\\); from gui.workspaces.compression import CompressionWorkspace, MirrorWorker; print\\('OK'\\)\")",
"Bash(C:/Users/alexa/miniconda3/python.exe -c ':*)",
"Bash(C:/Users/alexa/miniconda3/python.exe -m py_compile demo_tile_proposals.py)",
"Bash(python -c \"import ast; ast.parse\\(open\\('demo_tile_proposals.py'\\).read\\(\\)\\); print\\('Syntax OK'\\)\")",
"Bash(python3 -c \"import ast; ast.parse\\(open\\('demo_tile_proposals.py'\\).read\\(\\)\\); print\\('Syntax OK'\\)\")",
"Bash(.venv/Scripts/python.exe -c \"import ast; ast.parse\\(open\\('demo_tile_proposals.py'\\).read\\(\\)\\); print\\('Syntax OK'\\)\")",
"Read(//c/Users/alexa/AppData/Local/Programs/**)"
]
}
}
14 changes: 14 additions & 0 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"permissions": {
"allow": [
"Bash(python3 -c \"from utils.opus_library_mirror import mirror_library, convert_flac_to_opus, write_mirror_report; print\\('backend OK'\\)\")",
"Bash(py -c \"from utils.opus_library_mirror import mirror_library, convert_flac_to_opus, write_mirror_report; print\\('backend OK'\\)\")",
"Bash(where python.exe)",
"Bash(where python3.exe)",
"Bash(C:/Users/alexa/miniconda3/python.exe -c \"import sys; sys.path.insert\\(0, '.'\\); from utils.opus_library_mirror import mirror_library, convert_flac_to_opus, write_mirror_report; print\\('backend OK'\\)\")",
"Bash(C:/Users/alexa/miniconda3/python.exe -c \"import sys; sys.path.insert\\(0, '.'\\); from gui.workspaces.compression import CompressionWorkspace, MirrorWorker; print\\('workspace OK'\\)\")",
"Bash(C:/Users/alexa/miniconda3/python.exe -m py_compile gui/workspaces/tools.py)",
"Bash(C:/Users/alexa/miniconda3/python.exe -c ':*)"
]
}
}
1 change: 1 addition & 0 deletions =0.13.0
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
215 changes: 215 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,215 @@
# CLAUDE.md — AlphaDEX (Music Indexer)

Project context and working conventions for Claude Code sessions.

---

## What this project is

**AlphaDEX** is a Python desktop application for organizing large music
libraries. It is a single-user tool; there is no server, no API surface, and
no database other than SQLite caches. The entry point is `python main_gui.py`.

The core workflows, in order of user importance:

1. **Indexer** — scans a library folder, normalizes file names and folder
structure, and writes an HTML preview before touching any files.
2. **Duplicate Finder** — fingerprints audio with AcoustID/Chromaprint, groups
near-duplicates, lets the user review groups, then executes a
quarantine/delete plan.
3. **Library Sync** — compares an existing library against an incoming folder,
produces a copy/move plan, previews it, then executes.
4. **Tag Fixer** — looks up AcoustID / MusicBrainz metadata and proposes tag
corrections for review before writing.
5. **Playlist Creator** — tempo/energy bucketing, Auto-DJ chaining, K-Means
and HDBSCAN clustering, genre normalization, year-gap assistant.

---

## Repository layout

```
main_gui.py # Tkinter entry point (~11 600 lines)
music_indexer_api.py # Core scan / relocation logic
duplicate_consolidation.py # Duplicate plan builder (dry-run)
duplicate_consolidation_executor.py # Plan executor
library_sync.py # Library comparison and plan execution
library_sync_review.py # Library Sync review-first UI panel
fingerprint_generator.py # AcoustID fingerprint generation
fingerprint_cache.py # SQLite fingerprint cache
near_duplicate_detector.py # Fingerprint distance helpers
playlist_generator.py # .m3u playlist helpers
playlist_engine.py # Tempo/energy/Auto-DJ logic
clustered_playlists.py # K-Means / HDBSCAN clustering
cluster_graph_panel.py # Interactive scatter-plot widget
tag_fixer.py # Tag-fix engine
update_genres.py # Batch genre updater
config.py # Load / save ~/.soundvault_config.json
validator.py # Validate library folder structure
chromaprint_utils.py # fpcalc wrapper
audio_norm.py # Audio normalization helpers

controllers/ # Thin wrappers wiring backend to GUI
plugins/ # Metadata service integrations
utils/ # Metadata readers, path helpers
tests/ # pytest suite (42 modules)
docs/ # HTML docs, design notes, GUI inventory
mutagen_stub/ # Minimal mutagen fallback for tests
library_sync_indexer_engine/ # Alternate indexer used by Library Sync
third_party/ # Prebuilt llama binaries (LLM assistant)
bindings/ # C++/pybind11 llama wrappers
```

---

## Key constants and configuration

**Config file:** `~/.soundvault_config.json` (legacy name from the project's
former "SoundVault" identity — do not rename it).

**Audio extensions** (from `simple_duplicate_finder.py`):
`.flac .m4a .aac .mp3 .wav .ogg .opus`

**Lossless extensions** (from `duplicate_consolidation.py`):
`.flac .wav .alac .ape .aiff .aif`

**Codec priority** (higher = preferred winner in dedup):
`.flac` (3) > `.wav` (2) > `.mp3` (1)

**Default fingerprint thresholds** (from `config.py`):
- Exact duplicate: `0.02`
- Near duplicate: `0.1`
- Mixed-codec boost: `0.03`
- Library sync default: `0.3`

**Reserved library folders** — the indexer and duplicate finder skip these
during scans:
- `Not Sorted/` — user-managed exclusion zone
- `Playlists/` — playlist storage
- `Manual Review/` — tracks missing required metadata
- `Docs/` — HTML reports and logs
- `Trash/` — non-audio file leftovers
- `Quarantine/` — duplicate losers awaiting review

---

## Running the application

```bash
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python main_gui.py
```

FFmpeg must be on `PATH` for audio analysis. VLC / libVLC is required for the
in-app Player tab. Optional: `essentia==2.1b6` for faster C++ feature
extraction (see README for platform-specific build steps).

---

## Running the tests

```bash
# From the repo root, with the venv active:
pytest

# Run a single file:
pytest tests/test_duplicate_consolidation_hardening.py

# Run with verbose output:
pytest -v
```

**pytest config** (`pytest.ini`):
- `testpaths = tests`
- `pythonpath = .`

The `tests/conftest.py` injects lightweight stubs for `pydub`, `tkinter`, and
other heavy dependencies so the suite can run without the full GUI stack or
audio libraries installed. Do not remove or weaken these stubs.

Test files follow the `test_<module_or_feature>.py` naming convention.
Individual tests use `monkeypatch` and `tmp_path` (pytest fixtures) — no
custom base classes.

---

## Architecture rules to keep in mind

### Preview-first, never destructive by default
Every major workflow (indexing, deduplication, library sync) must produce a
dry-run preview before modifying any files. Do not add code paths that skip
the preview stage or mutate the library without an explicit user confirmation
step.

### GUI ↔ backend separation
- Business logic lives in the backend modules (`music_indexer_api.py`,
`duplicate_consolidation.py`, `library_sync.py`, etc.).
- `main_gui.py` and `library_sync_review.py` are UI-only. They call backend
functions and schedule results back to the main thread via `after()`.
- Do not import `tkinter` in backend modules.

### Threading model
Long operations run in daemon threads. GUI state is only mutated from the main
thread via `widget.after(0, callback)`. Never call `.configure()`, `.insert()`,
or any other widget method directly from a worker thread.

### No silent data loss
Operations that move or delete files must log every action to `Docs/` and
respect the user's chosen disposition (retain / quarantine / delete). When in
doubt, default to quarantine, not delete.

### Config persistence
All user settings are read/written through `config.load_config()` /
`config.save_config()`. Do not read `~/.soundvault_config.json` directly.

---

## Common patterns

**Adding a new Tools menu item**
1. Add the `tools_menu.add_command(...)` entry in `_build_menu()` (~line 8103
of `main_gui.py`).
2. Implement the handler as a method on `SoundVaultImporterApp`.
3. If it's a significant workflow, put the UI in a new `tk.Toplevel` subclass
(follow the pattern of `FileCleanupDialog`, `PlaylistRepairDialog`, etc.).

**Adding a new backend module**
- Place logic in a top-level `.py` file.
- Add a corresponding `tests/test_<name>.py`.
- Import it in `main_gui.py` only if a GUI hook is needed; keep the module
importable without Tkinter.

**Adding a Playlist Creator sub-panel**
- Add the panel name to the `plugin_list.insert` block (~line 8326).
- Add an `elif name == "Your Panel Name":` branch in
`create_panel_for_plugin()` (~line 216).

---

## Docs to check before making changes

| File | When to read it |
|---|---|
| `docs/gui_inventory.md` | Before any GUI work — full plain-English map of every screen and control |
| `docs/library_sync_redesign.md` | Before touching Library Sync — current gaps and acceptance criteria |
| `docs/library_sync_per_item_review.md` | Per-item flag implementation (vision, architecture, phases) |
| `docs/library_sync_per_item_review_testing.md` | Manual testing guide for per-item flags |
| `docs/project_documentation.html` | Broad technical overview |
| `README.md` | User-facing feature list and known gaps |

---

## Known gaps (do not assume these are complete)

- **Metadata provider breadth:** Only AcoustID + Last.fm are fully wired end-to-end.
Spotify and Gracenote are listed in `config.SUPPORTED_SERVICES` but have no
backend implementation.
- **Tidal-dl sync:** `tidal-dl` is in `requirements.txt` but has no UI or workflow.
- **Library Sync per-item flags:** ✅ IMPLEMENTED — Users can now right-click incoming
tracks to flag for copy/replace or add notes. Flags override auto-decisions during
plan building. See `docs/library_sync_per_item_review.md` for implementation details.
- **Library Sync Export Report:** Export helper functions exist in
`library_sync_review_report.py` (e.g., `export_report()`, `export_review_report_html()`)
but the Export Report button is not wired to a user-accessible control.
Loading