#!/bin/bash # ============================================================= # Studio IA - Design Sonore & Composition # Provisioning Script pour RTX 5060 Ti / CUDA 12.1 # ============================================================= set -eo pipefail echo "🎙️ Démarrage du provisioning Studio Audio IA..." # --- 1. MISE À JOUR SYSTÈME & DÉPENDANCES --- apt-get update -y && apt-get install -y \ python3.10 python3.10-venv python3-pip \ ffmpeg libsndfile1 sox \ ca-certificates curl gnupg lsb-release \ git wget nano screen # --- 2. INSTALLATION DOCKER (si non présent) --- if ! command -v docker &> /dev/null; then echo "📦 Installation de Docker..." curl -fsSL https://get.docker.com | bash fi # --- 3. LANCEMENT OPEN WEBUI --- echo "🖥️ Lancement d'Open WebUI sur le port 3000..." docker pull ghcr.io/open-webui/open-webui:main docker run -d \ --name open-webui \ --restart always \ --gpus all \ -p 3000:8080 \ -v open-webui:/app/backend/data \ -e WEBUI_SECRET_KEY="vastai-studio-secret-$(date +%s)" \ -e DEFAULT_MODELS="" \ -e ENABLE_SIGNUP=true \ ghcr.io/open-webui/open-webui:main echo "✅ Open WebUI lancé sur le port 3000" # --- 4. ENVIRONNEMENT PYTHON POUR AUDIOCRAFT --- echo "🐍 Création de l'environnement Python AudioCraft..." python3.10 -m venv /workspace/venv-audiocraft source /workspace/venv-audiocraft/bin/activate pip install --upgrade pip # PyTorch compatible CUDA 12.1 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 # AudioCraft (MusicGen + AudioGen) pip install git+https://github.com/facebookresearch/audiocraft.git # Serveur API Gradio pip install gradio fastapi uvicorn pydantic scipy soundfile echo "✅ AudioCraft installé" # --- 5. API AUDIOCRAFT (script serveur) --- echo "🎵 Création du serveur API AudioCraft..." mkdir -p /workspace/audiocraft-api cat > /workspace/audiocraft-api/server.py << 'PYEOF' import gradio as gr import torch import scipy.io.wavfile import numpy as np import tempfile, os from audiocraft.models import MusicGen, AudioGen # Chargement des modèles (une seule fois) print("🔄 Chargement de MusicGen...") music_model = MusicGen.get_pretrained("facebook/musicgen-small") music_model.set_generation_params(duration=10) print("🔄 Chargement d'AudioGen...") audio_model = AudioGen.get_pretrained("facebook/audiogen-medium") audio_model.set_generation_params(duration=5) def generate_music(prompt: str, duration: int = 10): """Génère de la musique à partir d'un prompt textuel.""" music_model.set_generation_params(duration=duration) wav = music_model.generate([prompt]) wav_np = wav[0, 0].cpu().numpy() sr = music_model.sample_rate with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f: scipy.io.wavfile.write(f.name, sr, (wav_np * 32767).astype(np.int16)) return f.name def generate_sound(prompt: str, duration: int = 5): """Génère des bruitages et ambiances sonores.""" audio_model.set_generation_params(duration=duration) wav = audio_model.generate([prompt]) wav_np = wav[0, 0].cpu().numpy() sr = audio_model.sample_rate with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f: scipy.io.wavfile.write(f.name, sr, (wav_np * 32767).astype(np.int16)) return f.name # Interface Gradio with gr.Blocks(title="🎙️ Studio Audio IA") as demo: gr.Markdown("## 🎙️ Studio Audio IA — AudioCraft API") with gr.Tab("🎵 Musique (MusicGen)"): music_prompt = gr.Textbox(label="Prompt", placeholder="Calm piano music with soft strings, 120bpm...") music_duration = gr.Slider(5, 30, value=10, step=5, label="Durée (secondes)") music_btn = gr.Button("🎵 Générer la musique") music_output = gr.Audio(label="Résultat") music_btn.click(generate_music, inputs=[music_prompt, music_duration], outputs=music_output) with gr.Tab("🔊 Bruitages (AudioGen)"): sound_prompt = gr.Textbox(label="Prompt", placeholder="Wood cracking, cathedral reverb, horror atmosphere...") sound_duration = gr.Slider(2, 15, value=5, step=1, label="Durée (secondes)") sound_btn = gr.Button("🔊 Générer le son") sound_output = gr.Audio(label="Résultat") sound_btn.click(generate_sound, inputs=[sound_prompt, sound_duration], outputs=sound_output) demo.launch(server_name="0.0.0.0", server_port=7860, share=False) PYEOF echo "✅ Serveur API AudioCraft créé" # --- 6. LANCEMENT DU SERVEUR AUDIOCRAFT EN ARRIÈRE-PLAN --- echo "🚀 Démarrage du serveur AudioCraft..." source /workspace/venv-audiocraft/bin/activate cd /workspace/audiocraft-api # Lancement dans un écran screen pour persistance screen -dmS audiocraft bash -c " source /workspace/venv-audiocraft/bin/activate cd /workspace/audiocraft-api python server.py 2>&1 | tee /workspace/audiocraft.log " echo "✅ AudioCraft lancé sur le port 7860 (écran: 'audiocraft')" # --- 7. PERSISTANCE DES VARIABLES --- env >> /etc/environment echo "" echo "🎉 =============================================" echo " Studio IA - Design Sonore prêt !" echo " Open WebUI → port 3000" echo " AudioCraft → port 7860" echo " Logs → /workspace/audiocraft.log" echo "============================================="