Use gr.skip() instead of gr.update() for audio/waveform/duration/seed
outputs during the initial "Generating..." status yield. This prevents
Gradio's StaticAudio component from starting a fetch that gets aborted
when the actual audio path arrives in the second yield.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Project and Generation are dataclasses, not dicts. Added _get_attr helper
to access attributes from both dict and object types.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
When ComfyUI is not running, the 10GB reservation wastes VRAM and causes
OOM errors. Default to 0, users can set AUDIOCRAFT_COMFYUI_RESERVE_GB=10
when running alongside ComfyUI.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
AudioCraft's get_pretrained() accepts device parameter directly.
The model objects don't have a .to() method.
Fixed in all adapters:
- MusicGen
- AudioGen
- MAGNeT
- MusicGen Style
- JASCO
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
transformers 4.40+ uses serialized_type_name kwarg in _register_pytree_node()
which doesn't exist in PyTorch 2.1. Pin to older version.
Also removes the ineffective pytree shim.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Create bidirectional aliases for _register_pytree_node/register_pytree_node
to support both older and newer PyTorch versions with AudioCraft.
The API changed between versions - older uses underscore prefix (private),
newer uses no prefix (public). This shim creates both aliases.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
The torch.utils._pytree module changed its API in PyTorch 2.5:
- register_pytree_node became _register_pytree_node (or vice versa)
- This breaks audiocraft which uses the old API
Add monkey-patch to alias the function for backwards compatibility.
See: https://stackoverflow.com/questions/78501569🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Change working directory to PROJECT_ROOT on startup
- Resolve models_config path relative to PROJECT_ROOT
- Add debug logging for config path and available models
- This fixes "Unknown model" error when running from different directories
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix critical bug: register_all_adapters() now called in main.py
- Add generate_long() method to MusicGen adapter for continuation-based
extended tracks (up to 5 minutes)
- Add long-form checkbox in UI that unlocks duration slider to 300s
- Update GenerationService to route to generate_long when duration > 30s
- Update BatchProcessor to support long_form parameter
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix GenerationService params: registry, database
- Simplify VRAM display to basic Markdown for now
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Move css from gr.Blocks() to launch()
- Replace show_api with footer_links parameter
- Remove theme from Blocks (moved to launch in Gradio 6)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix ModelRegistry init params: config_path, max_cached_models, idle_timeout_minutes
- Make gr.Blocks creation compatible with different Gradio versions
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add initialize() method as alias for connect()
- Remove invalid tab_nav_background_fill theme parameter
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Changed return statements to yield + return in async generator
functions. Python doesn't allow 'return' with a value in generators.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Rename create_theme() to create_audiocraft_theme() to match imports
- Add missing get_custom_css() function
- Pin numpy<2.0.0 for PyTorch compatibility
- Replace deprecated pynvml with nvidia-ml-py
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Complete web interface for Meta's AudioCraft AI audio generation:
- Gradio UI with tabs for all 5 model families (MusicGen, AudioGen,
MAGNeT, MusicGen Style, JASCO)
- REST API with FastAPI, OpenAPI docs, and API key auth
- VRAM management with ComfyUI coexistence support
- SQLite database for project/generation history
- Batch processing queue for async generation
- Docker deployment optimized for RunPod with RTX 4090
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>