text2fart / src /streamlit_app.py
LejobuildYT's picture
Update src/streamlit_app.py
b658b91 verified
import streamlit as st
import torch
from diffusers import AudioLDM2Pipeline
import scipy
import tempfile
import os
# Titel
st.set_page_config(page_title="💨 text2fart", page_icon="💀")
st.title("💨 text2fart mit Streamlit")
st.markdown("Schreib einen beliebigen Text – und hör den furzigen Klang deiner Kreativität! 😆")
# Prompt-Eingabe
prompt = st.text_input("Text eingeben:", placeholder="z. B. 'Apokalyptischer Trompetenfurz bei Sonnenuntergang'")
# Model laden (nur einmal)
@st.cache_resource
def load_model():
device = "cuda" if torch.cuda.is_available() else "cpu"
# pipe = DiffusionPipeline.from_pretrained("spaceinvader/text2fart")
pipe = AudioLDM2Pipeline.from_pretrained(
"spaceinvader/text2fart",
torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
variant="fp16" if torch.cuda.is_available() else None,
)
return pipe.to(device)
pipe = load_model()
# Button
if st.button("💥 Furz generieren"):
if not prompt.strip():
st.warning("Gib bitte etwas ein. Selbst KI braucht Inspiration 😅")
else:
with st.spinner("Furze werden destilliert..."):
result = pipe(prompt, num_inference_steps=20)
audio = result["audio"][0]
sample_rate = 16000
# Temporäre WAV-Datei
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as tmpfile:
scipy.io.wavfile.write(tmpfile.name, rate=sample_rate, data=audio)
st.audio(tmpfile.name, format="audio/wav")
st.success("Text erfolgreich vertont 💀💨")
# Datei am Ende löschen (optional)
os.unlink(tmpfile.name)