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
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
- 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>
- 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)
- 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
- 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
- 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.
- 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
- 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
- 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.
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.