diff --git a/index.html b/index.html
new file mode 100644
index 0000000..34037c7
--- /dev/null
+++ b/index.html
@@ -0,0 +1,82 @@
+
+
+
+
+
+ Bubble Bobble JS
+
+
+
+ Bubble Bobble JS
+
+
+
Score: 0
+
Vies: 3
+
Niveau: 1
+
+
+
+
+
+
+
+
Contrôles: Flèches pour déplacer, ESPACE pour sauter, CTRL pour tirer des bulles
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/install-petitsmodelesvastai.md b/install-petitsmodelesvastai.md
new file mode 100644
index 0000000..6e04c49
--- /dev/null
+++ b/install-petitsmodelesvastai.md
@@ -0,0 +1,30 @@
+cat << 'EOF' > /workspace/REINSTALL_CLEAN.md
+# 📓 IA WORKSPACE : BACKUP COMPLET
+
+## 🎤 1. SYNTHÈSE VOCALE (PIPER TTS)
+# Installation Système
+apt-get update && apt-get install -y espeak-ng-data libespeak-ng1 ffmpeg wget
+
+# Installation Python (venv)
+source /venv/main/bin/activate
+pip install piper-tts flask uvicorn requests
+
+# Téléchargement Modèles
+cd /workspace
+wget -O voice.onnx https://huggingface.co/rhasspy/piper-voices/resolve/main/fr/fr_FR/siwis/low/fr_FR-siwis-low.onnx
+wget -O voice.onnx.json https://huggingface.co/rhasspy/piper-voices/resolve/main/fr/fr_FR/siwis/low/fr_FR-siwis-low.onnx.json
+
+## 🎨 2. GÉNÉRATION D'IMAGES (COMFYUI)
+cd /workspace
+git clone https://github.com/comfyanonymous/ComfyUI.git
+cd ComfyUI
+pip install -r requirements.txt
+
+# Modèle SDXL
+cd /workspace/ComfyUI/models/checkpoints/
+wget https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors
+
+## 🔗 3. URL OPEN WEBUI
+- TTS: http://localhost:8000/v1 (Modèle: voice.onnx)
+- IMAGE: http://localhost:8188
+EOF
\ No newline at end of file
diff --git a/jetonvastaigitea.txt b/jetonvastaigitea.txt
new file mode 100644
index 0000000..ff6e992
--- /dev/null
+++ b/jetonvastaigitea.txt
@@ -0,0 +1,3 @@
+980621d1d7f71f71a403b6c31078bf8f3734441c
+
+https://git.syoul.fr/nicoboy/VASTAI-STUDIO-AUDIO/raw/branch/main/provisioning_script.sh?token=980621d1d7f71f71a403b6c31078bf8f3734441c
\ No newline at end of file
diff --git a/server.py(gradio) b/server.py(gradio)
new file mode 100644
index 0000000..f706d28
--- /dev/null
+++ b/server.py(gradio)
@@ -0,0 +1,43 @@
+import gradio as gr
+import torch
+import scipy.io.wavfile
+import numpy as np
+import tempfile
+from audiocraft.models import MusicGen, AudioGen
+
+print("🔄 Chargement des modèles...")
+music_model = MusicGen.get_pretrained("facebook/musicgen-small")
+audio_model = AudioGen.get_pretrained("facebook/audiogen-medium")
+
+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)
\ No newline at end of file
diff --git a/tts_server.py b/tts_server.py
new file mode 100644
index 0000000..3a21276
--- /dev/null
+++ b/tts_server.py
@@ -0,0 +1,52 @@
+import os
+import subprocess
+import uuid
+from flask import Flask, request, send_file, jsonify
+
+app = Flask(__name__)
+
+# CONFIGURATION
+PIPER_MODEL = "/workspace/voice.onnx"
+OUTPUT_DIR = "/workspace/temp_audio"
+
+# Créer le dossier temporaire s'il n'existe pas
+os.makedirs(OUTPUT_DIR, exist_ok=True)
+
+@app.route('/v1/audio/speech', methods=['POST'])
+def text_to_speech():
+ data = request.json
+ text = data.get("input")
+
+ if not text:
+ return jsonify({"error": "No input text provided"}), 400
+
+ # Générer un nom de fichier unique
+ file_id = str(uuid.uuid4())
+ output_file = os.path.join(OUTPUT_DIR, f"{file_id}.wav")
+
+ try:
+ # Commande Piper : lit le texte via stdin et écrit dans un fichier
+ # On utilise echo pour envoyer le texte à Piper
+ command = f'echo "{text}" | piper --model {PIPER_MODEL} --output_file {output_file}'
+
+ # Exécution de la commande
+ subprocess.run(command, shell=True, check=True)
+
+ # Envoyer le fichier généré à Open WebUI
+ return send_file(output_file, mimetype="audio/wav")
+
+ except subprocess.CalledProcessError as e:
+ return jsonify({"error": f"Piper failed: {str(e)}"}), 500
+ except Exception as e:
+ return jsonify({"error": str(e)}), 500
+
+@app.route('/v1/models', methods=['GET'])
+def list_models():
+ # Nécessaire pour que certaines interfaces valident la connexion
+ return jsonify({
+ "data": [{"id": "voice.onnx", "object": "model", "owned_by": "piper"}]
+ })
+
+if __name__ == '__main__':
+ # Le serveur écoute sur toutes les interfaces sur le port 8000
+ app.run(host='0.0.0.0', port=8000)
\ No newline at end of file