Commit graph

55 commits

Author SHA1 Message Date
edidealt
c2f8d3fca1 feat: podcasts 2026-03-22 04:32:20 +00:00
Daniel
397fc53a46 feat(downloads): add local media folder bulk download options and folder template paths
This also implements a ModernSettings class for a more streamlined settings API.
2026-03-20 18:00:14 -05:00
Daniel
e2a09b9b32 refactor: externalize svg images and add new vite plugin
The plugin runs all imported SVG files through svgo.

For index.html, you can use the following syntax:
```html
<use svg="file.svg" size="24" />
```

For scripts, use the `?svg` import query
```javascript
import SVG_FILE from './file.svg?svg&size=24
```

Note: size is shorthand for specifying both width and height individually.  You can also set any property of the base SVG element.

You can also use the `?svg&icon` query to return a function that allows dynamically resizing the SVG string.
2026-03-19 15:28:33 -05:00
Daniel
7c5424437e feat(ffmpeg): add WAV format support and detection for use in dev mode
- Added WAV format to customFormats with appropriate metadata.
- Implemented detection for RIFF/WAVE format in detectAudioFormat function.
2026-03-19 15:14:52 -05:00
Daniel
079198c59e fix: improve discNumber formatting in formatTemplate function 2026-03-12 06:48:34 +00:00
Daniel
c1552980eb feat: extract bulk download handlers into bulk-download-writer.ts and add folder picker + settings 2026-03-12 06:04:59 +00:00
Samidy
34c3f8dbcf
Apply suggestion from @coderabbitai[bot]
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-03-12 05:04:42 +03:00
Daniel
4def7b8e51
Merge branch 'combined-fixes' into copilot/fix-m3u-generation-logic 2026-03-11 15:20:30 -05:00
Daniel
2db782d74f feat(downloads): add custom download formats 2026-03-11 15:18:39 -05:00
Daniel
aa728f970b
feat(downloads): add discNumber template for file name.
Also update disc number handling in download logic and metadata extraction
2026-03-11 20:10:38 +00:00
Daniel
1c9c5fa242
Merge https://github.com/monochrome-music/monochrome into taglib-wasm 2026-03-10 18:48:18 +00:00
Daniel
42101353ab
feat(metadata): re-add flac and m4a metadata code as separate files 2026-03-09 15:54:28 +00:00
Daniel
de472c5891
Merge remote-tracking branch 'upstream' into taglib-wasm 2026-03-09 02:43:12 +00:00
Samidy
75d16e6ce4 feat: music videos 2026-03-09 03:03:29 +03:00
Daniel
0f20106076 feat(downloads): prefetch data while downloading to improve performance and update taglib-wasm 2026-03-08 01:55:42 +00:00
Daniel
50a5b79d70 feat(downloads): use taglib-wasm to set tags
taglib supports multiple media formats beyond what was previously supported, this would enable transcoding to other formats without needing to write additional metadata libraries.
2026-03-08 01:54:29 +00:00
SamidyFR
4aaffd2c22 style: auto-fix linting issues 2026-02-26 23:19:38 +00: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
Eduard Prigoana
a9f3acb289 fix4dwayne 2026-02-18 04:19:12 +00:00
Julien Maille
8eaafd7e18 FIX: share link from neutralino's app 2026-02-15 21:07:43 +01:00
Julien Maille
7e635143be FIX: context menu on mobile or small screens 2026-02-12 23:17:20 +01:00
Eduard Prigoana
15fc0cf725
Merge pull request #138 from blacksigkill/fix/title-date
Show album release date next to tracks
2026-02-04 12:50:57 +02:00
BlackSigkill
50834a48e0 fix all errors/warnings during linting 2026-02-03 15:20:50 +01: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
EduardPrigoana
db777a7923 unreleased rework 2026-02-01 14:48:01 +02: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
Julien Maille
baeff12c54 feat: handle unavailable tracks in playlists and mixes 2026-01-18 23:41:30 +01:00
Samidy
49d8783daa update to 1.7.0, change "HR" to "HD" 2026-01-17 22:45:49 +03:00
Julien Maille
e1a44b3502 feat: add Hi-Res and Lossless quality indicators to queue and play bar 2026-01-16 22:38:53 +01:00
JulienMaille
bae0d0a170 style: auto-fix linting issues 2026-01-16 20:37:51 +01:00
JulienMaille
dc3ae80d9f style: auto-fix linting issues 2026-01-11 00:36:22 +01:00
Julien Maille
bcb949d1ec FIX: broken display with tracks containing weird characters 2026-01-08 22:20:38 +01:00
Julien Maille
3e228a0d46 FEAT: add track mix button to player bar and display release year 2026-01-03 13:00:12 +01:00
Julien Maille
b828322a72 FIX: custom playlist download 2026-01-01 23:19:09 +01:00
Julien Maille
d286c80540 IMP: show link for each artist of current track 2025-12-27 23:20:41 +01:00
Julien Maille
aeea0038f3 improvements 2025-12-26 23:14:47 +01:00
Julien Maille
cdffe88eba Fix heart button interactions on cards and reorder library tabs
- Fix: Card heart buttons didn't work because of button nested in anchor. Changed cards to div with data-href.\n- Fix: Home page and Artist page cards didn't have data bound or like state initialized.\n- Feature: Move Playlists to the last position in Library tabs.
2025-12-26 22:39:13 +01:00
Julien Maille
47d64add72 Refactor cover art fetching to use centralized getCoverBlob with CORS workaround in metadata 2025-12-26 13:58:28 +01:00
Julien Maille
99f2ccfdb2 Refactor SVG icons and improve settings UI 2025-12-25 20:03:16 +01:00
Julien Maille
e67a444258 fix: non centered play button 2025-12-24 13:52:42 +01:00
eduardprigoana
ae7fae9b3d naming 2025-11-17 21:43:33 +02:00
Eduard Prigoana
b5cb97149f fuck your svelte kit 2025-10-26 21:55:13 +02:00
Eduard Prigoana
bd7e3fea33 fix. 2025-10-22 18:58:36 +03:00
Eduard Prigoana
8665a2d879 fix 2025-10-22 18:46:21 +03:00