91 lines
3.4 KiB
Bash
91 lines
3.4 KiB
Bash
#!/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" |