Skip to content

New UI #44

Merged
lmangani merged 15 commits intomainfrom
experimental-ui
Feb 6, 2026
Merged

New UI #44
lmangani merged 15 commits intomainfrom
experimental-ui

Conversation

@lmangani
Copy link
Contributor

@lmangani lmangani commented Feb 5, 2026

Adding a Suno-like React UI forked and extended from Ace-Step UI (MIT)

E and others added 15 commits February 5, 2026 02:22
…de switching

- Add React/Vite UI (ui/), API layer (api/), tests (tests/)
- Generate: task types (text2music, cover, repaint, extend, audio2audio), reference/source audio, upload
- CreatePanel: InfoTooltip, audio header with track name, library/upload flow, sliders for influence
- Backend: upload-audio, reference library, job queue, map params to generate_ace
- Build: scripts/build_ui.sh (Bun), build_local.sh uses new UI, CDMF.spec bundles ui/dist
- Docs: NEW_UI_IMPLEMENTATION_PLAN, API audit, experimental exploration

Co-authored-by: Cursor <cursoragent@cursor.com>
…elease

Co-authored-by: Cursor <cursoragent@cursor.com>
- Backend: producer tags (stems, voice_cloning, midi, generation) in track metadata
- Backend: preferences API (GET/PATCH /api/preferences) and get_output_dir() from config
- Backend: all modules use config output_dir; songs/tracks/list serve from configured dir
- UI: preferencesApi; panels load/save preferences and call onTracksUpdated on success
- UI: Settings modal output directory; Create and tools send outputDir from preferences
- UI: AceForge branding (logo, title AceForge - AI Music Workstation) in index, Sidebar, UsernameModal, Settings, Share, SongProfile
- New tool panels: TrainingPanel, StemSplittingPanel, VoiceCloningPanel, MidiPanel (with model download and preferences)

Co-authored-by: Cursor <cursoragent@cursor.com>
- Cover/Audio2Audio: ensure style (caption) and lyrics used correctly; fold
  keyScale, timeSignature, vocalLanguage into style prompt when set
- Custom form: reorder to Title, Style, Lyrics, Vocal Language, Audio,
  Music Params, Advanced; default batch size 1; remove Instruction field
  and amber callout; add Instrumental toggle in Lyrics section
- Webview: apply 80% zoom via run_js after load (aceforge_app + music_forge_ui)
- Voice cloning: track model download in UI (status/ensure API, progress)
- Stem splitting: GPU (MPS) and metadata resilience fixes
- Docs: ACE-Step Cover key params, USAGE.md Cover section; remove unused
  instruction from CreatePanel

Co-authored-by: Cursor <cursoragent@cursor.com>
…itching Reference/Cover

Co-authored-by: Cursor <cursoragent@cursor.com>
- AuthContext: always provide LOCAL_TOKEN so UI never blocks on sign-in; logout resets to local user
- RightSidebar: remove 'Please sign in to rename' gate; rename works without login
- Window title: use 'AceForge' only in pywebview, index.html, SongProfile, SettingsModal

Co-authored-by: Cursor <cursoragent@cursor.com>
…ar button

- Sidebar: add Settings (gear) button at bottom to open Settings modal
- Settings modal: Paths section (models folder + output dir), Display (UI zoom 80–125%)
- Backend: preferences PATCH sets HF_HOME when models_folder changes; zoom read from config at startup
- api.ts: AppPreferences.ui_zoom

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…e env vars

- api/generate: guidance_scale 7.0 when reference audio present; ref_audio_strength default 0.8 for cover/retake; comments reference ACE-Step-INFERENCE.md
- generate_ace: repaint_end < 0 => use target duration (end of audio)
- build_local.sh: ACEFORGE_QUICK_BUILD, ACEFORGE_SKIP_UI_BUILD, ACEFORGE_SKIP_PIP for faster rebuilds

Co-authored-by: Cursor <cursoragent@cursor.com>
- Add --train entry point in aceforge_app: frozen binary runs as trainer (no GUI)
- cdmf_training: when frozen, spawn same binary with --train + args instead of blocking
- cdmf_trainer_parser: parser-only module for --train --help without heavy deps in bundle
- aceforge_app: --train --help uses parser only so bundle test passes without diffusers
- Add test_train_from_bundle.sh and CI step to verify --train from bundle

Co-authored-by: Cursor <cursoragent@cursor.com>
- api/generate: lora_adapters endpoint, pass loraNameOrPath/loraWeight to generation; defaults steps 65, guidance 4.0
- cdmf_pipeline_ace_step: shift parameter (default 6.0) for scheduler
- generate_ace: pass shift 6.0 into pipeline
- CreatePanel: LoRA adapter selector and weight
- TrainingPanel: copy noting LoRA appears in Create after training
- api.ts / types.ts: LoRA types and getLoraAdapters()

Co-authored-by: Cursor <cursoragent@cursor.com>
- Add POST /api/generate/cancel/<job_id> for queued and running jobs; cooperative cancellation in pipeline (cdmf_generation_job.GenerationCancelled, cancel_check in diffusion loops)
- api/generate: _current_job_id, _cancel_requested, refreshSongsList on job success already present; add handleRefreshLibrary
- Library refresh: refetch on navigate to Library, every 20s on Library/Create, on tab focus; Refresh button in LibraryView and CreatePanel (Library & uploads)
- API docs: cancel endpoint, lora_adapters, cancel response; ui/services/api: cancelJob; tests: cancel 404 and cancel queued
- README: minor fix

Co-authored-by: Cursor <cursoragent@cursor.com>
Move handleRefreshLibrary and refresh useEffects to after refreshSongsList
definition. Using refreshSongsList before it was defined caused ReferenceError
on first render (temporal dead zone) and blank UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
@lmangani lmangani merged commit b547f9d into main Feb 6, 2026
6 checks passed
@lmangani lmangani deleted the experimental-ui branch February 6, 2026 16:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant