#!/bin/bash # ============================================================= # Studio IA - Design Sonore & Composition # Version sans Docker - natif dans le container Vast.ai # ============================================================= set -eo pipefail echo "🎙️ Démarrage du provisioning Studio Audio IA..." # --- 1. DÉPENDANCES SYSTÈME --- apt-get update -y && apt-get install -y \ ffmpeg libsndfile1 sox \ git wget nano screen python3-pip # --- 2. OPEN WEBUI (pip depuis GitHub) --- echo "🖥️ Installation d'Open WebUI..." pip install 'open-webui==0.5.20' --extra-index-url https://pypi.org/simple/ # --- 3. PYTORCH + AUDIOCRAFT --- echo "🐍 Installation de PyTorch CUDA 12.1..." pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 echo "🎵 Installation d'AudioCraft..." pip install git+https://github.com/facebookresearch/audiocraft.git pip install gradio scipy soundfile # --- 4. CRÉATION DU SERVEUR AUDIOCRAFT --- mkdir -p /root/audiocraft-api cat > /root/audiocraft-api/server.py << 'PYEOF' import gradio as gr import torch import scipy.io.wavfile import numpy as np import tempfile from audiocraft.models import MusicGen, AudioGen 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, duration=10): music_model.set_generation_params(duration=duration) wav = music_model.generate([prompt]) wav_np = wav[0, 0].cpu().numpy() with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f: scipy.io.wavfile.write(f.name, music_model.sample_rate, (wav_np * 32767).astype(np.int16)) return f.name def generate_sound(prompt, duration=5): audio_model.set_generation_params(duration=duration) wav = audio_model.generate([prompt]) wav_np = wav[0, 0].cpu().numpy() with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f: scipy.io.wavfile.write(f.name, audio_model.sample_rate, (wav_np * 32767).astype(np.int16)) return f.name with gr.Blocks(title="🎙️ Studio Audio IA") as demo: gr.Markdown("## 🎙️ Studio Audio IA") with gr.Tab("🎵 Musique"): p1 = gr.Textbox(label="Prompt") d1 = gr.Slider(5, 30, value=10, step=5, label="Durée (s)") b1 = gr.Button("Générer") o1 = gr.Audio(label="Résultat") b1.click(generate_music, inputs=[p1, d1], outputs=o1) with gr.Tab("🔊 Bruitages"): p2 = gr.Textbox(label="Prompt") d2 = gr.Slider(2, 15, value=5, label="Durée (s)") b2 = gr.Button("Générer") o2 = gr.Audio(label="Résultat") b2.click(generate_sound, inputs=[p2, d2], outputs=o2) demo.launch(server_name="0.0.0.0", server_port=7860, share=False) PYEOF # --- 5. LANCEMENT DES SERVICES --- echo "🚀 Lancement d'Open WebUI sur le port 3000..." screen -dmS openwebui bash -c "open-webui serve --port 3000 2>&1 | tee /root/openwebui.log" echo "🚀 Lancement d'AudioCraft sur le port 7860..." screen -dmS audiocraft bash -c "python /root/audiocraft-api/server.py 2>&1 | tee /root/audiocraft.log" env >> /etc/environment echo "🎉 Studio Audio IA prêt !" echo " Open WebUI → port 3000" echo " AudioCraft → port 7860"