infer.py could only render a random example from examples/input_params:
there was no way to pass your own prompt, lyrics, duration or seed, so
using it for anything specific meant writing a separate script. Add
--prompt, --lyrics/--lyrics_file, --duration, --steps, --guidance_scale,
--scheduler, --cfg_type, --omega_scale, --seed and --format alongside the
existing runtime flags. Without --prompt the old random-example behaviour
is kept, so existing invocations are unaffected.
Also move the training-only packages out of the default install.
datasets, pytorch_lightning, matplotlib, tensorboard and tensorboardX are
imported by trainer.py and convert2hf_dataset.py, never on the inference
path, but every user was installing them — and datasets==3.4.1 is a hard
pin that drags constraints onto huggingface-hub. They now live in
requirements-train.txt behind the existing (previously ineffective)
"train" extra: pip install -e ".[train]".
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
create_text2music_ui() sorted the saved *_input_params.json files with
int(name.split('_')[1]), which assumes the generated
output_<timestamp>_<idx>_ shape. Output names are user-controlled — via
infer.py --output_path or a save_path from the UI — so any other name
raised ValueError while the Blocks were being built and took the whole
interface down before it could start:
ValueError: invalid literal for int() with base 10: 'base'
Sort by mtime instead. That is what "previous generated input params"
means anyway (newest first) and it works for any filename; a file that
disappears between listdir() and getmtime() sorts last rather than
raising.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
torchaudio 2.11 routes torchaudio.save()/load() through TorchCodec and
ignores the `backend` argument, so every generation died at the save
step with "ImportError: TorchCodec is required for save_with_torchcodec"
after the diffusion had already finished. Reference-audio loading
(audio2audio, repaint, extend) and the training dataset loader hit the
same wall.
soundfile is already a required dependency and covers all four output
formats the UI offers, so use it directly rather than pulling in
TorchCodec and its native FFmpeg stack:
- pipeline_ace_step.save_wav_file(): sf.write(), transposing
(channels, samples) -> (samples, channels); drops the now-unused
torchaudio import
- MusicDCAE.load_audio() and text2music_dataset: sf.read(dtype=float32,
always_2d=True), transposed back to (channels, samples)
torchaudio is still used for Resample/MelScale transforms, which are
unaffected.
Verified end to end: 10s generation on an RTX 3060 in 9.7s, output is
valid non-silent 48kHz stereo; load_audio round-trips it; wav/mp3/ogg/
flac all write and read back.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Gradio was unpinned, so a fresh install pulled Gradio 6, where
gr.Audio no longer accepts show_download_button — the UI crashed on
startup with TypeError. Move forward to Gradio 6 instead of pinning
back to 5:
- requirements: gradio>=6.0.0
- drop the removed show_download_button kwarg (4 call sites)
- requirements: transformers>=4.57.0 — Gradio 6 requires
huggingface-hub>=1.0, which transformers==4.50.0 forbids. Only
UMT5EncoderModel and AutoTokenizer are used, so the bump is safe.
Verified: pip check clean, UI renders and server callbacks work on
gradio 6.26.0 / transformers 5.16.1 / huggingface-hub 1.30.0.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- README_RU.md: full Russian translation, linked from README.md
- start.bat: one-click setup + launch for Windows. Finds Python 3.10+,
creates the venv, installs PyTorch (CUDA or CPU) and ACE-Step, checks
the GPU, then starts the web UI. Flags: --lowvram, --cpu, --share,
--port, --device, --listen, --reinstall, --update, --setup, --help.
- Both READMEs document the launcher.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>