Cos'è FastRTC
FastRTC è una libreria Python open-source, distribuita con licenza Apache-2.0 e sviluppata dal team di Gradio (Hugging Face), che si propone di risolvere uno dei problemi storicamente più ostici dello sviluppo web: portare audio e video in tempo reale dentro un'applicazione Python senza diventare esperti di telecomunicazioni. Il tagline ufficiale è piuttosto chiaro: "trasforma qualsiasi funzione Python in uno stream audio e video in tempo reale via WebRTC o WebSocket".
Il punto di forza sta nella filosofia: invece di chiedervi di installare e amministrare un media server dedicato (SFU, MCU, TURN/STUN configurati a mano), FastRTC incapsula la complessità di WebRTC — negoziazione SDP, ICE, gestione delle tracce, chunking dell'audio — dentro un'astrazione minima. Voi scrivete una funzione Python che riceve un array NumPy con l'audio dell'utente e restituisce un generatore con l'audio di risposta; la libreria fa tutto il resto. Il repository è gradio-app/fastrtc su GitHub, la documentazione ufficiale è su fastrtc.org e il pacchetto si installa da PyPI con pip install fastrtc.
A cosa serve
Il caso d'uso più frequente è la costruzione di agenti vocali e interfacce conversazionali a bassa latenza: assistenti che ascoltano, trascrivono, ragionano e rispondono a voce in tempo quasi reale. Ma il perimetro è più ampio:
- Chat vocali voice-to-voice: pipeline complete STT → LLM → TTS dove l'utente parla dal browser e riceve una risposta parlata.
- Trascrizione in tempo reale: stream verso modelli tipo Whisper per dettatura live.
- Elaborazione video in tempo reale: object detection (ad esempio con YOLO) sul flusso webcam dell'utente, filtri, trasformazioni frame-by-frame.
- Prototipi dimostrativi: grazie all'integrazione con Gradio, si può lanciare un'interfaccia web funzionante con un solo metodo.
- Integrazione telefonica: il metodo
fastphone()fornisce un numero di telefono temporaneo per chiamare il proprio stream, utile per test rapidi di centralini vocali.
Per una PMI o un'agenzia italiana, tradotto in pratica: un centralino vocale intelligente per il customer care, un assistente vocale dentro una dashboard gestionale, un prototipo di "parla col documento" per un cliente, o un sistema di monitoraggio video con rilevamento oggetti in diretta. Tutto senza dipendere da piattaforme SaaS esterne a consumo.
Come funziona
L'architettura ruota attorno a tre concetti: la classe Stream, gli handler e le modalità di deployment.
La classe Stream. È l'oggetto centrale: accetta un handler, una modalità (audio, video o audio-video) e un mode (send-receive per flussi bidirezionali, receive-only per sola ricezione). Lo stream gestisce la negoziazione WebRTC con il browser e instrada i dati verso la vostra logica.
Gli handler. L'handler più importante è ReplyOnPause: incorpora un modello di Voice Activity Detection (VAD) che rileva quando l'utente smette di parlare e solo a quel punto invoca la vostra funzione di risposta, gestendo automaticamente i turni della conversazione. La funzione riceve una tupla (sample_rate, array_numpy) e deve restituire un generatore che produce chunk audio. Questo design a generatori permette lo streaming della risposta: il TTS può iniziare a parlare prima che il testo completo sia pronto, abbattendo la latenza percepita.
Gli extra opzionali. Installando fastrtc[vad, stt, tts] si ottengono plugin pronti per modelli di speech-to-text, text-to-speech e turn-taking, con una galleria di modelli intercambiabili. La scelta dei modelli resta libera: si possono usare API cloud (OpenAI, ElevenLabs, Anthropic, Google Gemini) oppure modelli locali self-hosted, il che conta molto per chi ha vincoli di privacy o vuole contenere i costi.
Le tre modalità di deployment:
stream.ui.launch()— avvia un'interfaccia Gradio integrata, perfetta per prototipare e testare.stream.mount(app)— monta lo stream su un'applicazione FastAPI esistente, esponendo endpoint WebRTC e WebSocket. È la modalità da produzione: il vostro frontend React, Vue o vanilla JS si connette a questi endpoint, e la libreria fornisce anche esempi completi di client Next.js nella cartella demo del repository.stream.fastphone()— espone lo stream via telefono con un numero temporaneo gratuito (richiede un token Hugging Face).
Un esempio minimo, giusto per dare la misura della semplicità:
from fastrtc import Stream, ReplyOnPause
def echo(audio):
# audio è una tupla (sample_rate, np.ndarray)
yield audio # risponde con lo stesso audio
stream = Stream(
handler=ReplyOnPause(echo),
modality="audio",
mode="send-receive",
)
stream.ui.launch()
Da qui a un agente vocale vero il passo è sostituire l'echo con una catena STT → LLM → TTS, come mostrano le numerose demo nel Cookbook ufficiale: conversazioni con Claude, GPT, Gemini, Moshi, trascrizione Whisper in tempo reale, code editor comandati a voce.
Perché conta
Abbatte la barriera d'ingresso al real-time. WebRTC è notoriamente complesso: fino a ieri, per aggiungere voce in tempo reale a un'app Python serviva un media server esterno (LiveKit, Janus, Jitsi) oppure settimane di studio. FastRTC riduce il tutto a una dipendenza pip e una route FastAPI. Per team piccoli — il tessuto tipico delle PMI e delle software house italiane — la differenza tra "progetto da un trimestre" e "prototipo in un pomeriggio" è decisiva.
Si integra con lo stack esistente invece di sostituirlo. Essendo una libreria e non una piattaforma, si inserisce nel backend che già avete: autenticazione, logging, database e business logic restano dove sono. Lo stream è solo un endpoint in più.
È agnostica rispetto ai modelli. A differenza delle API vocali "chiavi in mano" dei grandi provider, FastRTC non vi lega a nessun modello: potete combinare STT e TTS cloud per la qualità massima, oppure modelli open-source locali (Whisper, Kokoro e simili) per la sovranità dei dati — un tema sensibile in ambito GDPR quando l'audio dei clienti contiene dati personali.
Ha un ecosistema solido alle spalle. Essendo mantenuta dal team Gradio/Hugging Face, la libreria beneficia di una comunità ampia, di demo pronte all'uso e di un'evoluzione rapida. La licenza Apache-2.0 consente l'uso commerciale senza vincoli.
Attenzione ai limiti. FastRTC è pensata per sessioni punto-punto (un utente, uno stream): non è un SFU e non scala a stanze con decine di partecipanti; per videoconferenze multi-party servono soluzioni come LiveKit. Inoltre, in produzione su internet serviranno comunque server TURN per attraversare NAT restrittivi e HTTPS obbligatorio (WebRTC lo richiede). Infine, essendo una libreria giovane, l'API può evolvere: conviene fissare le versioni nelle dipendenze.
Dove trovarlo
- Repository GitHub: github.com/gradio-app/fastrtc (licenza Apache-2.0)
- Documentazione: fastrtc.org, con user guide e Cookbook di esempi completi
- Pacchetto: PyPI,
pip install fastrtc(extra consigliati:pip install "fastrtc[vad,tts]") - Demo live: spazi Hugging Face sotto l'organizzazione
fastrtc, tra cui Talk to Claude, Talk to Gemini e la chat vocale Next.js
Il consiglio pratico: partite dall'esempio "LLM Voice Chat" del Cookbook, montatelo su una FastAPI di test con stream.mount(app) e collegate i vostri modelli STT/TTS preferiti. In un'ora avrete un assistente vocale funzionante nel browser, e da lì valutare se portarlo in produzione diventa una decisione informata invece che un salto nel buio.
