File size: 1,714 Bytes
87b30b2
b658b91
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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)