File size: 2,043 Bytes
dc26776
63454b5
002e398
8863661
dc26776
b7d7e4a
63454b5
b7d7e4a
63454b5
 
2b5402e
94875e9
8863661
2b5402e
 
8863661
2b5402e
63454b5
 
dc26776
63454b5
e8f826b
8863661
dc26776
63454b5
8863661
 
 
d2b5c33
8863661
 
2b5402e
8863661
 
 
 
dc26776
 
8863661
2b5402e
dc26776
 
8863661
63454b5
8863661
 
 
63454b5
dc26776
8863661
 
63454b5
dc26776
63454b5
dc26776
8863661
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
48
49
50
51
52
53
54
55
56
import gradio as gr
from huggingface_hub import InferenceClient, HfApi
import os
import tempfile

API_TOKEN = os.environ.get("htoken")
client = InferenceClient(token=API_TOKEN)

def recupera_modelli_reali():
    api = HfApi()
    modelli = api.list_models(
        pipeline_tag="text-to-speech",
        sort="downloads",
        # ❌ direction=-1  <-- rimosso, non esiste più
        limit=30
    )
    return [m.id for m in modelli]

LISTA_MODELLI_DINAMICA = recupera_modelli_reali()

def genera_audio(testo, model_id):
    if not testo.strip():
        return "⚠️ Inserisci del testo.", None
    try:
        audio_bytes = client.text_to_speech(testo, model=model_id)
        with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f:
            f.write(audio_bytes)
            return f"✅ Generato con: {model_id}", f.name
    except Exception as e:
        err = str(e)
        if "loading" in err.lower():
            return "⏳ Modello in caricamento, riprova tra 20s", None
        elif "401" in err or "unauthorized" in err.lower():
            return "❌ Token non valido — controlla il secret 'htoken'", None
        else:
            return f"❌ Errore: {err}", None

with gr.Blocks(theme=gr.themes.Soft()) as interfaccia:
    gr.Markdown("# 🎙️ Browser Modelli Hugging Face TTS")
    gr.Markdown(f"✅ Lista popolata live da Hugging Face — **{len(LISTA_MODELLI_DINAMICA)} modelli trovati**")
    
    with gr.Row():
        testo_input = gr.Textbox(label="Testo", placeholder="Scrivi qualcosa...", value="Hello, this is a test.")
        modello_dropdown = gr.Dropdown(
            choices=LISTA_MODELLI_DINAMICA,
            value=LISTA_MODELLI_DINAMICA[0],
            label="Seleziona Modello"
        )
    
    pulsante = gr.Button("🎵 Genera Audio", variant="primary")
    status = gr.Textbox(label="Console", interactive=False)
    audio = gr.Audio(label="Player")
    
    pulsante.click(fn=genera_audio, inputs=[testo_input, modello_dropdown], outputs=[status, audio])

interfaccia.launch()