Commit graph

112 commits

Author SHA1 Message Date
gpulch
cde7080052 fix: address code review feedback
Inline fixes:
- Remove TDRC frame from ID3 writer (ID3v2.3 uses TYER only, not TDRC)
- Add try/finally cleanup in worker to prevent VFS leaks on errors
- Fix Blob creation to use Uint8Array directly (avoid extra bytes)
- Replace loadFFmpeg race guard with promise singleton pattern
- Add -map_metadata -1 to strip source metadata (prevent duplicate ID3)

Error handling improvements:
- Create MP3EncodingError class with code property for reliable detection
- Update api.js to use instanceof check instead of string matching
- Pass AbortSignal to encodeToMp3 for proper cancellation support
- Remove error re-wrapping in mp3-encoder.js (preserve original errors)

Technical details:
- Promise singleton ensures FFmpeg loads once even with concurrent calls
- AbortSignal listener properly cleaned up on success/error/abort
- Virtual FS cleanup in finally block prevents file leaks
- MP3EncodingError.code = 'MP3_ENCODING_FAILED' for robust detection
2026-02-23 10:49:05 +01:00
gpulch
8a17bddbc3 feat: add MP3 320kbps download option with ffmpeg.wasm
Implements MP3 320kbps download functionality using ffmpeg.wasm for
industry-standard encoding with libmp3lame.

Features:
- New MP3_320 quality option in download settings UI
- ID3v2.3 metadata writing (title, artist, album, cover art, ISRC, etc.)
- Non-blocking encoding via Web Worker to keep UI responsive
- Proper UTF-16 with BOM text encoding for international characters
- Album artist fallback to track artist (mirrors FLAC/M4A behavior)
- Automatic format detection for downloaded audio
- Year validation to prevent writing NaN to ID3 tags

Implementation:
- mp3-encoder.js: Main encoder module with worker orchestration
- mp3-encoder.worker.js: FFmpeg Web Worker for async encoding
- id3-writer.js: ID3v2.3 tag writer with synchsafe size encoding
- Updates to api.js, metadata.js, utils.js for MP3 support
- Vite config excludes @ffmpeg packages from dep optimization

Technical details:
- Uses @ffmpeg/ffmpeg (libmp3lame 320kbps CBR, 44.1kHz)
- FFmpeg binary lazy-loaded from CDN (~25MB, cached)
- Encoding runs in separate thread (non-blocking UI)
- Proper error handling with distinct encoding vs network errors
- Memory-efficient: transfers ArrayBuffer with zero-copy

Dependencies:
- @ffmpeg/ffmpeg ^0.12.10
- @ffmpeg/util ^0.12.1
- Removed: package-lock.json (project uses bun.lock)

Closes maintainer request to use ffmpeg.wasm instead of lamejs.
2026-02-22 19:13:03 +01:00
Samidy
77d99245c8 feat(artists): artists socials 2026-02-22 01:04:02 +03:00
binimum
1188a2dcce style: auto-fix linting issues 2026-02-21 14:57:44 +00:00
binimum
01309a9a15
Change instances.json in favour of Workers which have live API uptime 2026-02-21 14:56:55 +00:00
Samidy
8c79e69382 feat(search): search recs in queue 2026-02-21 02:30:03 +03:00
BlackSigkill
acc9d8b5cd add tidal biography to artists pages 2026-02-19 23:37:18 +01:00
Eduard Prigoana
03a7dcda52 fix codeql suggestions 2026-02-18 03:30:20 +00:00
IsraelGPT
762488d823 load skeleton styling 2026-02-15 23:39:56 +00:00
Julien Maille
8f27000fcf add RPC to neutralino 2026-02-10 00:15:46 +01:00
binimum
f79e07837e style: auto-fix linting issues 2026-02-08 20:02:52 +00:00
binimum
133f484e4e
Urgently fix API spam issues 2026-02-08 20:00:53 +00:00
Eduard Prigoana
3294eaf2fa fix album date and artist on search 2026-02-07 13:27:55 +00:00
Eduard Prigoana
015003225c (TEMPORARY) stop DDOSING apis on search 2026-02-04 23:12:58 +02:00
BlackSigkill
8eaf3b376e Add a toggle to choose what kind of track date you want 2026-02-03 14:47:45 +01:00
BlackSigkill
9780263cf7 show album release date next to tracks 2026-02-03 13:09:01 +01:00
SamidyFR
90971dc191 style: auto-fix linting issues 2026-01-26 23:28:45 +00:00
Samidy
6d9d2f4f89 fix(streaming): fix Hi-res playback on Firefox 2026-01-27 02:28:16 +03:00
JulienMaille
15c3702cae style: auto-fix linting issues 2026-01-26 21:12:21 +00:00
Julien Maille
2e322ac8a6 fix(downloads): detect actual format for all download paths
Fixes #117

- Add getExtensionFromBlob() to detect format from blob signature
- DASH Hi-Res streams are MP4 containers, not raw FLAC
- Fix api.downloadTrack to detect and correct filename extension
- Fix bulk download functions to use detected extension
- Fallback to mime type if signature detection fails
2026-01-26 22:11:50 +01:00
SamidyFR
4ede3b2664 style: auto-fix linting issues 2026-01-24 12:13:44 +00:00
Samidy
3f3e12817f basically monochrome 2.0 lol 2026-01-24 15:13:19 +03:00
Samidy
5975fdbac7 make HI-Res default 2026-01-20 00:29:28 +03:00
JulienMaille
716a1b7b05 style: auto-fix linting issues 2026-01-18 22:42:00 +00:00
Julien Maille
baeff12c54 feat: handle unavailable tracks in playlists and mixes 2026-01-18 23:41:30 +01:00
Julien Maille
024f44aa05 feat: rotate API instances on rate limits and errors 2026-01-18 23:21:32 +01:00
JulienMaille
de74cebd7c style: auto-fix linting issues 2026-01-16 18:35:32 +01:00
Julien Maille
1e7595c159 WIP: hi-res support 2026-01-16 18:35:32 +01:00
JulienMaille
02e161b0a4 style: auto-fix linting issues 2026-01-14 20:13:25 +00:00
Julien Maille
569958f07a feat(api): Implement pagination for albums with many tracks 2026-01-14 21:12:34 +01:00
Samidy
24f5dedcfe I HATE FIREBASE 2026-01-13 23:25:51 +03:00
SamidyFR
5bb028d153 style: auto-fix linting issues 2026-01-11 23:34:32 +00:00
Samidy
f182304c7e add recommended playlist songs, improvements, fixes & more 2026-01-12 02:33:52 +03:00
Julien Maille
a419f38024 js fixes 2026-01-11 00:58:55 +01:00
JulienMaille
dc3ae80d9f style: auto-fix linting issues 2026-01-11 00:36:22 +01:00
Julien Maille
b543112dbb Fix: Improve API rate limit handling during CSV import
- Update 'fetchWithRetry' in api.js to respect Retry-After header and use exponential backoff for 429 errors.
- Add 300ms delay between requests in CSV import loop to reduce load.
2026-01-07 22:52:30 +01:00
Julien Maille
c2467fec5a FIX: deduplicateAlbums 2026-01-04 21:36:19 +01:00
Julien Maille
6ee3c57bc5 IMP: mixes using new API 2026-01-04 18:48:49 +01:00
Julien Maille
efe67045d4 IMP: faster artist loading 2026-01-04 00:24:37 +01:00
Julien Maille
87126a0fe7 IMP: smaller art images for faster loading 2026-01-03 23:44:25 +01:00
Julien Maille
bff48ad21c IMP: remove heuristic filtering for EPs/Singles, rely on API type 2026-01-02 18:03:36 +01:00
Julien Maille
34dba30d6b IMP: mix, similar stuff 2026-01-01 22:04:12 +01:00
Julien Maille
57f3e42dbe new: mix for artists, use new api 2026-01-01 19:27:29 +01:00
Julien Maille
4ffac0ae0a Prepare for similar artists coming from tidal api 2026-01-01 15:50:31 +01:00
Julien Maille
d0cc9f03f1 feat: add playlist pagination and separate api/streaming instances
- Implements pagination in getPlaylist to support large playlists (>100 tracks).
- Reworks instance management to support separate api and streaming instance groups.
- Updates instances.json to the new grouped structure.
- Refactors apiSettings for smart incremental speed testing and type-aware caching.
- Parallelizes speed tests using appropriate endpoints (/artist/ for API, /track/ for Streaming).
- Updates Settings UI to display and manage both API and Streaming instance groups.
2026-01-01 15:38:02 +01:00
Julien Maille
6776d2fe38 NEW: handle large playlist if api has offset capability 2026-01-01 13:35:07 +01:00
Julien Maille
63854f4d69 wip add metadata 2025-12-26 13:51:04 +01:00
Julien Maille
9533155656 Enhance artist page by fetching EPs and Singles via search fallback 2025-12-25 23:11:08 +01:00
Julien Maille
4183cef4f1 fix: resolve multiple bugs including playback loops and search race conditions 2025-12-24 13:49:29 +01:00
Julien Maille
1415c350c5 feat: add playlist search tab and fix playlist detail rendering 2025-12-23 21:17:56 +01:00
google-labs-jules[bot]
43f04e7454 Fix "Invalid Date" display in album details
- Backfill album release date from tracks if missing in API response.
- Gracefully handle invalid or missing dates in UI rendering.
- Fix potential NaN in download folder naming due to invalid dates.
2025-12-23 13:33:24 +01:00
Samidy
2fd16c7366 fix artists not saving on home + showing as unknown 2025-12-17 12:11:04 +03:00
Samidy
c0543b15a5 Fix albums breaking (ai saving my ass rn) 2025-12-17 12:06:33 +03:00
Samidy
131e834d52
add clunky fuckass fix for malformed track response 2025-12-14 10:14:13 -08:00
eduardprigoana
ae7fae9b3d naming 2025-11-17 21:43:33 +02:00
Eduard Prigoana
ab67a5c2dd playlist support 2025-11-08 19:17:52 +02:00
Eduard Prigoana
0c9dec35ff c 2025-10-22 10:31:45 +03:00
Eduard Prigoana
2c04d69edb not popup 2025-10-21 18:32:57 +03:00
Eduard Prigoana
2a708e2b99 themes! 2025-10-19 18:33:41 +03:00
Eduard Prigoana
07345867b9 PLEASE work 2025-10-19 15:07:00 +03:00
Eduard Prigoana
0f1a9841d1 cc 2025-10-11 19:22:53 +03:00
Eduard Prigoana
bfc7c6b685 2 2025-10-10 22:20:23 +03:00