Commit Graph

54 Commits

Author SHA1 Message Date
fspecii a5879e60a5 Fix audio2audio task type, demucs-web proxy, and health endpoint
- Map audio2audio to cover in Gradio args and Python spawn fallback
  (audio2audio is not a valid ACE-Step task type, cover is the equivalent)
- Add /demucs-web to Vite proxy so stem extractor opens correctly in Pinokio
  (in Pinokio, Vite runs on a dynamic port and /demucs-web was not proxied)
- Expose aceStepUrl in /api/generate/health response for debugging
2026-03-02 17:58:09 +02:00
fspecii e1625a717d Fix multiple issues: format API, Gradio availability, storage, UI responsiveness
- Format endpoint now calls ACE-Step /format_input REST API directly instead of
  spawning Python, fixing ENOENT errors on Windows (#44, #27, #34)
- isGradioAvailable() tries /gradio_api/info, /info, / in sequence to handle
  Gradio 4.x/5.x/6.x version differences, fixing generation fallback (#53, #20)
- Storage getUrl/getPublicUrl normalize /audio/ prefix to prevent double-prefix
  URLs when reference tracks are used for cover generation (#10)
- Gradio args: fix normalization_db default from 0.0 to -1.0 (Gradio default)
- Volume popover: add 400ms delay before hiding to prevent accidental dismissal (#51)
- Polling: skip setSongs state update when nothing changed to reduce re-renders (#51)
- FFmpeg: add jsdelivr CDN fallback when unpkg fails (#30)
- Model switching: add switchModelIfNeeded() via /v1/init REST API (#45)
2026-03-02 17:43:53 +02:00
fspecii 553e0bce2f Fix Gradio args for ACE-Step v1.5 API 2026-03-02 16:30:08 +02:00
fspecii 6b99e418a9 Update README: Gradio API instead of REST API, document AI Enhance
- Replace all acestep-api/api_server.py references with acestep --enable-api
- Update Quick Start, Usage, and Configuration sections for Gradio
- Document AI Enhance toggle and its effect on genre accuracy
- Add troubleshooting entry for ballad output issue
- Wait message changed to "API endpoints enabled"
2026-02-10 19:34:14 +02:00
fspecii 8433349af5 Add AI Enhance toggle for better genre accuracy
When enabled, uses the LLM to enrich genre/style tags into detailed
music descriptions and generate proper BPM, key, and time signature
metadata (CoT features). Fixes genre tags like "pop, rock" producing
ballad-like output by matching Gradio UI default behavior.

- Add enhance toggle in Style of Music card header
- Gate CoT metas/caption/language by enhance OR thinking flag
- Remove unsupported --lm-backend/--lm-model from Python fallback
- Add i18n translations (en/zh/ja/ko) with tooltip
2026-02-10 13:24:36 +02:00
fspecii ac99e9efcb Fix player: clickable empty state, skip non-playable songs, spacebar shortcut
- Make bottom player empty state a clickable button that plays first available song
- Guard togglePlay to show toast when audioUrl is missing instead of silently failing
- playNext/playPrevious now skip songs without audioUrl or still generating
- repeatMode 'none' stops at queue boundaries instead of wrapping
- Add ShareModal to mobile fullscreen player (was missing, share silently failed)
- Add spacebar play/pause keyboard shortcut (skips when typing in inputs)
- Add onPlayFirst prop to Player component
- Add selectSongToPlay i18n key (en, zh, ja, ko)
2026-02-10 12:26:28 +02:00
fspecii 565faacb7b Gradio API migration, training pipeline, news page, and UI improvements
- Migrate backend from REST API to Gradio @gradio/client for generation
- Fix Gradio parameter alignment (positions 36-49) for reference/cover audio
- Add LoRA training pipeline with dataset upload, preprocessing, and export
- Add News page with dismiss/restore and GitHub star button
- Add localization info icon in Settings language section
- Fix upload audio URL prefix, add missing MIME types
- Add training API routes and Python preprocess script
- Update i18n with news keys for all languages
2026-02-09 22:30:15 +02:00
fspecii f42fde9b40 Phase 6: Replace REST polling with @gradio/client for generation and LoRA
- Add @gradio/client dependency for direct Gradio API communication
- Create gradio-client.ts: singleton client with lazy init and reconnection
- Rewrite acestep.ts: generation via /generation_wrapper (45 params), Python spawn fallback
- Remove REST polling code (submitToApi, pollApiResult, downloadAudioFromApi)
- Create lora.ts routes: load/unload/scale/toggle/status via Gradio events
- Register /api/lora routes in index.ts
2026-02-08 19:39:24 +02:00
fspecii 193cf707cd Update api.ts: ditModel fields, updateSong normalization, formatInput response, LoRA endpoint paths 2026-02-08 18:58:26 +02:00
fspecii bc9cfd16bb Add missing translation keys: artist, collapseSidebar, expandSidebar, deletePlaylist 2026-02-08 18:52:33 +02:00
fspecii b00af8a704 i18n CreatePanel with genre picker, model selector, EditableSlider, and LoRA panel
Phase 4.3: Largest component change. Adds cascading genre picker using
Phase 3 style data, DiT model selector with backend sync, EditableSlider
for all numeric parameters, LoRA load/unload panel, bulk generate, vocal
gender selector. Batch size max kept at 4 (not 8), inference steps max
kept at 32 (not 200) to prevent OOM. Added LoRA API stubs to api.ts.
Added ditModel to GenerationParams type.
2026-02-08 18:41:14 +02:00
fspecii 325046eaf2 Apply i18n to all components, add collapsible sidebar, playback speed control, inline title editing, and ConfirmDialog for deletions
Phase 4: i18n all 15 components from PR #19. Sidebar gains collapse/expand
toggle. Player gets playback speed selector (0.25x-2.0x) fixing bug B1
(hardcoded Chinese '正常'). SongList adds inline title editing and model
version badge. Delete actions now use ConfirmDialog instead of
window.confirm. Volume persisted to localStorage. Training nav item
deferred to Phase 7.
2026-02-08 18:35:09 +02:00
fspecii 1b13f01b3d Add style/genre data: 105 main genres, 939 total styles with loader
- main_style.txt: curated top-level genres (pop, rock, jazz, etc.)
- all_style.txt: full style list (~939 entries)
- genres.ts: parses txt files, exports MAIN_STYLES, ALL_STYLES, SUB_STYLES
2026-02-08 18:24:53 +02:00
fspecii 09bdbc5f5f Add reusable UI components: ConfirmDialog, EditableSlider, Vite type declarations
- ConfirmDialog: modal confirm with Escape/backdrop dismiss, danger styling, i18n labels
- EditableSlider: click-to-edit numeric slider with clamping and keyboard support
- vite-env.d.ts: type declarations for .txt raw imports
- Fixed missing title prop in EditableSlider interface from PR
2026-02-08 18:22:43 +02:00
fspecii c219edb037 Add i18n system with 4-language support (en/zh/ja/ko)
- Add I18nContext provider with useI18n hook and localStorage persistence
- Add translations.ts with complete strings for English, Chinese, Japanese, Korean
- Wrap App in I18nProvider, replace hardcoded toast messages with t() calls
- Add language selector to SettingsModal with Globe icon
- Add localization credits in About section
- Default language: English
- Add I18N_USAGE.md documentation
2026-02-08 18:19:08 +02:00
fspecii af5343f9db Add missing wavesurfer.js for AudioMass editor
AudioMass uses a custom fork of wavesurfer.js with getLoudness()
and other extensions. The dist/ folder was excluded by server/.gitignore.
Added gitignore exception for audio-editor/dist/.
2026-02-06 00:03:14 +02:00
fspecii 6f4d50ae18 Add LM Model selector (0.6B/1.7B/4B) with auto-download
- Add lmModel parameter through full chain (types, API, routes, service)
- Add LM Model dropdown in Advanced Settings (defaults to 0.6B)
- Pass lmModel and lmBackend to format/enhance endpoint
- Update format_sample.py to accept --lm-model and --lm-backend args
- Auto-download model from HuggingFace if not present locally
- Persist model selection in localStorage
- Improve format route error logging with exit code and stdout/stderr

Fixes #9
2026-02-05 23:55:55 +02:00
fspecii dade566647 Fix Windows IPv6 issue: use 127.0.0.1 instead of localhost in Vite proxy
On Windows, 'localhost' can resolve to IPv6 ::1 instead of IPv4
127.0.0.1, causing ECONNREFUSED when the Vite dev proxy tries to
reach the Express server. Using explicit 127.0.0.1 avoids this.

Fixes #12
2026-02-05 23:12:38 +02:00
fspecii 2f2b1e2f92 Fix like button in right sidebar passing Song object instead of ID
The onToggleLike handler expected a string songId but RightSidebar
was passing the entire Song object, causing a FOREIGN KEY constraint
error when SQLite received '[object Object]' as the song_id.

Fixes #22
2026-02-05 22:59:41 +02:00
fspecii 23ff094aad Default batch size to 1 with localStorage persistence, update README
- Batch size defaults to 1 (safe for 8GB GPUs), persisted in browser
- Bulk count also persisted in browser localStorage
- Add Pinokio 1-click installer as recommended install method
- Add batch size, bulk generation, and LM backend docs
- Update troubleshooting with VRAM-saving tips
2026-02-05 22:57:46 +02:00
fspecii 584b37e53b Add ACE-Step-1.5 to gitignore 2026-02-05 22:34:22 +02:00
fspecii 58d00a23ed Merge PR #24: Various UI improvements from riversedge
Includes progress bar, drag and drop, gender buttons, upload
improvements, and dynamic duration limits.
2026-02-05 22:34:07 +02:00
fspecii d05c665f4d Add LM Backend selector (PT vs VLLM) to reduce VRAM usage
PT backend uses ~1.6 GB VRAM vs ~9.2 GB for VLLM, making it accessible
on lower-end GPUs. Adds dropdown in Advanced Settings defaulting to PT.
2026-02-05 22:30:23 +02:00
riversedge 892873fdf3 Change defaults to be a little higher quality. 2026-02-05 13:14:07 -05:00
riversedge 292e6cb3b8 A check script around timing limits 2026-02-05 12:59:22 -05:00
riversedge 9c3a3d7515 Additional drag and drop refinements 2026-02-05 12:57:33 -05:00
riversedge 00c783eea9 Some drag and drop and other UI enhancements 2026-02-05 12:09:48 -05:00
riversedge 6335369c83 Easier to understand tooltips / details 2026-02-04 23:49:38 -05:00
riversedge 9a1719e687 Some better instructions 2026-02-04 23:43:30 -05:00
riversedge 6527c42f41 Multi select and cover/reference is playable 2026-02-04 23:38:39 -05:00
riversedge f3e8f092f5 Add gender buttons that influence prompt 2026-02-04 23:30:41 -05:00
riversedge ce6256d931 Fix percentages on creating 2026-02-04 23:25:38 -05:00
riversedge 424bd3fd25 Various UI improvements 2026-02-04 23:15:00 -05:00
riversedge b75bea3860 Progress bar and song reference/cover metadata 2026-02-04 20:40:38 -05:00
riversedge 16f5af6435 Some enhancements to UI functionality 2026-02-04 18:57:18 -05:00
fspecii 823fbe0cd3 Fix storage upload to return public URL path 2026-02-04 21:44:13 +02:00
fspecii d318a1b856 Add inline song title editing in sidebar 2026-02-04 21:29:37 +02:00
fspecii b95936d07d Fix reference audio upload URL and validation
- Fix double /audio/ prefix in reference audio URLs (upload() already returns the public path)
- Allow reference audio as alternative to style/lyrics in custom mode validation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 21:28:40 +02:00
fspecii 2f567580bc Increase max duration to 600s, fix storage key return 2026-02-04 20:13:41 +02:00
fspecii 39960f0961 Add all 51 supported languages from ACE-Step-1.5
- Updated VOCAL_LANGUAGES array to match ACE-Step-1.5 constants.py
- Added 27 missing languages including Hebrew, Hindi, Finnish, Bengali, etc.
- Alphabetically sorted for better UX
- Total: 51 languages (from 24)

Fixes #6 (language support part)
2026-02-04 17:21:35 +02:00
fspecii 13e5526268 Fix: Implement delete functionality for songs
- Added handleDeleteSong function in App.tsx to delete songs
- Shows confirmation dialog before deleting
- Calls backend API to delete song from database and filesystem
- Updates UI state: removes from songs list, liked songs, play queue
- Handles edge cases: stops playback if deleted song is currently playing
- Clears selection if deleted song is currently selected
- Passes onDelete handler to SongList, RightSidebar, and Player components
- Shows success/error toast notifications

Fixes #8
2026-02-04 17:08:46 +02:00
fspecii cde2ff6865 Improve compatibility and add one-click startup scripts
- Add Windows Portable Package support with auto-detection
- Fix API health check to support multiple response formats
- Fix task ID parsing for ACE-Step API integration
- Change thinking mode default to false for 4GB GPU compatibility
- Add explicit CoT parameter control for LLM features
- Fix audio download path encoding for portable package
- Improve file upload validation with extension fallback
- Add start-all.bat/sh scripts for one-click startup
- Update README with Windows Portable Package instructions
- Add comprehensive troubleshooting section
- Improve cross-platform compatibility
2026-02-04 16:59:45 +02:00
fspecii f9e4601792 Fix double model loading: use ACE-Step REST API when available
- Check if ACE-Step API is running at startup (GET /health)
- If API available: use REST endpoints (POST /release_task, POST /query_result, GET /v1/audio)
  - Model is already loaded by the API server, no double initialization
- If API not available: fall back to Python spawn (existing behavior)
  - Model loads once via Python script

This prevents the issue where running `acestep-api --port 8001` loads the model,
then the UI spawns Python which loads it again, consuming double VRAM.

API response is cached for the session to avoid repeated health checks.
2026-02-04 14:38:19 +02:00
fspecii 02fa32bc53 Add always-visible player, play button on sidebar thumbnail, and GitHub link
- Player: Show minimal placeholder when no song is playing instead of hiding
- RightSidebar: Add play button overlay on cover art thumbnail
  - Hover to reveal play/pause button
  - Click anywhere on cover to play
  - Shows pause icon when song is currently playing
- SettingsModal: Add GitHub repo link for issues and feature requests
2026-02-04 13:43:25 +02:00
fspecii e616713ec1 Fix delete song, CORS, and cleanup for local-first SQLite setup
- Fix delete song route: remove reference to non-existent audio_files table,
  use audio_url directly from songs table instead
- Fix CORS: allow 127.0.0.1 in addition to localhost in development mode
- Fix cleanup service: remove audio_files reference, use SQLite datetime syntax
2026-02-04 13:39:30 +02:00
fspecii 645c88ca0a Add Windows and portable installation support for Python path resolution
- Add resolvePythonPath() function that handles:
  - PYTHON_PATH env var override (highest priority)
  - Portable installations (python_embeded/python.exe)
  - Standard venv with correct paths per OS:
    - Windows: .venv/Scripts/python.exe
    - Unix: .venv/bin/python
- Remove hardcoded Unix paths from acestep.ts and generate.ts
- Remove hardcoded /home/ambsd default path

Fixes "ENOENT" errors on Windows when spawning Python processes.
2026-02-04 04:51:58 +02:00
fspecii 3ff4e3e0a9 Update README paths to reference ACE-Step-1.5 directory
Match the actual repository name from https://github.com/ace-step/ACE-Step-1.5
2026-02-04 04:40:56 +02:00
fspecii 3cb11726ce Fix database initialization: run migrations on server startup
Users on Windows were getting "no such table: users" errors because
migrations were never executed. The migrate.ts file existed but was
not imported by the server entry point.
2026-02-04 04:34:25 +02:00
fspecii 606d87f510 Move Demo section first, add YouTube demo video link 2026-02-04 04:03:44 +02:00
fspecii 596a57ddc9 Fix ACE-Step links to correct repo: ACE-Step-1.5 2026-02-04 03:28:30 +02:00