# đŸŽ™ïž Template Vast.ai — Studio IA Design Sonore > Configuration complĂšte pour RTX 5060 Ti (16 Go VRAM) / 130 Go de stockage --- ## 📋 ParamĂštres du Template | Champ | Valeur | |---|---| | **Template Name** | `Studio IA - Design Sonore & Composition` | | **Template Description** | Studio de gĂ©nĂ©ration audio IA pour novices. Interface web ChatGPT-like alimentĂ©e par AudioCraft (MusicGen + AudioGen). AccĂšs navigateur uniquement, aucune compĂ©tence technique requise. | | **Image Path:Tag** | `nvidia/cuda:12.1.1-devel-ubuntu22.04` | | **Launch Mode** | `Jupyter + SSH` | | **Disk Space** | `130 Go` | | **Visibility** | `PrivĂ©` | --- ## 🔌 Ports Ă  dĂ©clarer | Port interne | Protocole | Usage | |---|---|---| | `3000` | TCP | Open WebUI (interface utilisateur) | | `7860` | TCP | AudioCraft / Gradio API | | `22` | TCP | SSH (auto-ajoutĂ© en mode Jupyter+SSH) | | `8080` | TCP | Jupyter (auto-ajoutĂ© en mode Jupyter+SSH) | --- ## 🌐 Variables d'environnement | Variable | Valeur | |---|---| | `PROVISIONING_SCRIPT` | https://git.syoul.fr/nicoboy/VASTAI-STUDIO-AUDIO/raw/branch/main/provisioning_script.sh?token=980621d1d7f71f71a403b6c31078bf8f3734441c | | `PORTAL_CONFIG` | localhost:3000:3000:/:OpenWebUI|localhost:7860:7860:/:AudioCraft|localhost:1111:11111:/:Portal | | `CUDA_VISIBLE_DEVICES` | `0` | | `PYTORCH_CUDA_ALLOC_CONF` | `max_split_size_mb:512` | > ⚠ Ne jamais mettre de clĂ©s API ou mots de passe ici si le template est public. --- ## ⚙ On-start Script ```bash #!/bin/bash # Persister les variables d'environnement env >> /etc/environment ``` > Le gros du travail est dans le PROVISIONING_SCRIPT ci-dessous. --- ## 📜 PROVISIONING_SCRIPT (contenu complet) HĂ©berger ce script sur GitHub/Gist et pointer `PROVISIONING_SCRIPT` vers l'URL raw. ```bash #!/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 "=============================================" ``` --- ## đŸ€– System Prompt Open WebUI (Ă  importer manuellement) AprĂšs connexion Ă  Open WebUI (port 3000), crĂ©er un nouveau modĂšle/assistant avec ce prompt : ``` Tu es un IngĂ©nieur du Son expert et pĂ©dagogue. Ton rĂŽle est d'aider des novices complets Ă  crĂ©er des sons et de la musique grĂące Ă  l'IA. RÈGLES FONDAMENTALES : 1. Utilise un langage simple, jamais de jargon technique sans explication. 2. Si l'utilisateur est vague (ex: "un son de forĂȘt"), pose des questions prĂ©cises : - Veut-il de la pluie ? Des oiseaux ? Une ambiance nocturne ? - Quel usage ? (jeu vidĂ©o, film, mĂ©ditation, musique...) - Quelle durĂ©e ? (quelques secondes, une boucle de 30s...) 3. Traduis les envies en descriptions techniques claires pour AudioCraft. 4. Propose toujours 2-3 variations du prompt pour offrir des choix. 5. Explique ce que tu vas gĂ©nĂ©rer AVANT de le faire. EXEMPLES DE TRADUCTION : - "Un son qui fait peur" → "Deep drone with low rumble, distant whispers, reverb, horror cinematic atmosphere" - "Musique joyeuse pour enfants" → "Playful xylophone melody, cheerful, bright, 120bpm, children cartoon style" - "Ambiance de forĂȘt" → "Dense forest ambience, birds chirping, wind through leaves, morning atmosphere, gentle stream" FORMAT DE RÉPONSE : 1. Reformule ce que l'utilisateur veut (pour valider) 2. Propose le prompt technique que tu vas utiliser 3. Demande confirmation avant de lancer la gĂ©nĂ©ration 4. AprĂšs gĂ©nĂ©ration : propose des ajustements (plus d'Ă©cho, plus grave, etc.) Tu es patient, encourageant, et passionnĂ© par le design sonore. Chaque crĂ©ation est une collaboration artistique. ``` --- ## 🔁 PORTAL_CONFIG — AccĂšs simplifiĂ© ``` localhost:3000:3000:/:Open WebUI|localhost:7860:7860:/:AudioCraft API|localhost:1111:11111:/:Instance Portal|localhost:8080:18080:/:Jupyter ``` --- ## ✅ Checklist de dĂ©ploiement - [ ] HĂ©berger le provisioning script sur GitHub/Gist et copier l'URL raw - [ ] Coller l'URL dans la variable `PROVISIONING_SCRIPT` - [ ] VĂ©rifier que les ports 3000 et 7860 sont bien ajoutĂ©s - [ ] Sauvegarder avec **Create & Use** - [ ] Attendre ~10-15 min (tĂ©lĂ©chargement des modĂšles AudioCraft ~8 Go) - [ ] AccĂ©der Ă  l'interface via le port mappĂ© 3000 - [ ] CrĂ©er un compte admin dans Open WebUI - [ ] Importer le System Prompt ci-dessus - [ ] Tester une gĂ©nĂ©ration audio --- ## ⚡ Commande CLI Ă©quivalente ```bash vastai create instance \ --image "nvidia/cuda:12.1.1-devel-ubuntu22.04" \ --disk 130 \ --ports "3000/tcp 7860/tcp 8080/tcp 22/tcp" \ --env "PROVISIONING_SCRIPT=https://raw.githubusercontent.com/VOTRE_REPO/main/studio-audio-provisioning.sh" \ --env "PORTAL_CONFIG=localhost:3000:3000:/:Open WebUI|localhost:7860:7860:/:AudioCraft API|localhost:1111:11111:/:Instance Portal" \ --env "CUDA_VISIBLE_DEVICES=0" \ --env "PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512" ``` --- ## 📝 Notes RTX 5060 Ti - **16 Go VRAM** : suffisant pour faire tourner MusicGen-small + AudioGen-medium simultanĂ©ment. - Si manque de VRAM : passer Ă  `musicgen-melody` et charger les modĂšles Ă  la demande (unload entre gĂ©nĂ©rations). - Les modĂšles AudioCraft totalisent ~6-8 Go sur disque — les 130 Go sont confortables. - Temps de gĂ©nĂ©ration estimĂ© : 5-15 secondes pour 10s de musique sur RTX 5060 Ti.