Aller au contenu principal

Module 8 — Lien de partage temporaire

Vous montrez la démonstration à un collègue sur votre poste, il l'aime, et vous demande de la partager avec deux personnes qui télétravaillent. Vous n'avez pas de serveur public, pas de nom de domaine, pas envie d'ouvrir un port de votre routeur. Gradio répond à ce besoin exact en une ligne : demo.launch(share=True) ouvre un lien de partage temporaire que vous copiez dans un chat, et qui reste actif tant que votre script Python tourne.

Ce que fait share=True

Lancer demo.launch(share=True) déclenche un mécanisme en trois étapes. D'abord, Gradio démarre le serveur local comme d'habitude, sur http://127.0.0.1:7860. Ensuite, il ouvre un tunnel vers un serveur relais public opéré par Hugging Face (sur le domaine gradio.live). Enfin, il vous affiche dans la console une URL du type https://a1b2c3d4e5f6g7.gradio.live qui pointe vers ce tunnel. Toute requête arrivée sur cette URL est transférée à votre script local, la réponse repart par le même chemin, et votre collègue voit la démonstration exactement comme sur votre poste.

Ce mécanisme est identique à celui de ngrok ou cloudflared, mais intégré à Gradio et gratuit. Le tunnel a une durée de vie limitée, actuellement 72 heures : au-delà, l'URL cesse de fonctionner et il faut relancer le script pour en obtenir une nouvelle. Cette limite est volontaire — le lien de partage n'est pas conçu pour héberger une démonstration en production, mais pour la présenter le temps d'une réunion ou d'un test.

Ce qui est exposé, ce qui ne l'est pas

Le tunnel expose exactement l'interface Gradio, rien de plus. Les autres services de votre machine (SSH, base de données, autre serveur web) restent inaccessibles depuis le lien. En revanche, tout ce que votre fonction Python peut faire, elle peut le faire quand elle est appelée par un inconnu. Si votre fonction lit un fichier avec open("/etc/passwd") — même dans un log — un utilisateur mal intentionné qui envoie certaines entrées peut vous forcer à le lire. Si elle appelle une API avec votre clé, il consomme votre budget.

Le lien de partage est donc public dès qu'il est diffusé. N'importe qui à qui il est communiqué (directement ou par indiscrétion) peut l'utiliser. Le message dans la console, « Do not share this link with anyone you don't trust », est à prendre littéralement. Pour un usage privé même informel, l'authentification du paragraphe suivant est obligatoire.

Authentification simple avec auth

launch(auth=("utilisateur", "motdepasse")) protège l'interface derrière une invite HTTP Basic. Un utilisateur qui ouvre le lien doit d'abord saisir le couple pour accéder à la démonstration.

demo.launch(
share=True,
auth=("presentation", "MotDePasseFort2026"),
auth_message="Démonstration réservée à l'équipe produit.",
)

Pour plusieurs utilisateurs, auth accepte une liste de tuples : auth=[("alice", "..."), ("bob", "...")]. Pour une logique plus complexe (vérification en base, hachage), auth accepte une fonction (utilisateur, mot_de_passe) -> bool. Cette authentification est simple mais efficace, adaptée à la portée du lien temporaire ; elle n'est pas un remplacement d'un vrai SSO.

Le mot de passe transite en clair dans l'en-tête HTTP, mais l'ensemble du tunnel gradio.live étant en HTTPS, il reste chiffré sur le trafic public. À l'intérieur du serveur relais, le trafic est déchiffré puis rechiffré vers votre machine — c'est la nature d'un tunnel de type reverse proxy — donc pour un secret vraiment sensible, cette configuration reste insuffisante.

Deux limites à comprendre

Deux points frustrent régulièrement les nouveaux utilisateurs. Le premier est la latence : chaque requête fait un aller-retour Utilisateur → serveur relais Hugging Face → votre poste → réponse par le même chemin. Selon la localisation, cela ajoute 100 à 500 millisecondes à chaque appel. Pour une démonstration diffusée jeton par jeton, c'est perceptible mais acceptable ; pour une démonstration à temps réel (webcam en flux), c'est parfois disqualifiant.

Le second est la fiabilité : votre poste doit rester allumé, connecté, et le script Python en cours d'exécution. Si votre portable se met en veille pendant la nuit, le tunnel se coupe et l'URL retourne une erreur. Pour une démonstration qui doit rester vivante 24 h sur 24, share=True est inadapté et il faut passer à un espace Hugging Face (module 9).

Quand share=True est la bonne réponse

Trois cas d'usage se prêtent parfaitement au lien temporaire. Le premier est la démonstration en réunion : vous partagez le lien dans le chat de la visio, tout le monde essaie en parallèle pendant que vous parlez, et vous éteignez à la fin. Le deuxième est le test utilisateur : vous envoyez le lien à cinq personnes, elles essaient dans les trois heures qui viennent, vous récupérez leurs retours. Le troisième est le débogage à distance : un collègue rencontre un bug que vous ne reproduisez pas, vous lui envoyez le lien et vous voyez le trafic passer en direct sur votre console.

Quand share=True est la mauvaise réponse

Autant de contre-exemples. Une démonstration destinée à être référencée (dans une publication, sur un site) doit pointer vers une URL stable, ce que gradio.live ne fournit pas. Une démonstration qui doit servir des dizaines d'utilisateurs simultanés dépassera vite les capacités de votre portable et se traînera à cause de la latence du tunnel. Une démonstration qui manipule des données sensibles ne doit pas passer par un serveur relais tiers, même chiffré. Une démonstration qui doit rester en ligne 24 h sur 24 ne peut pas dépendre d'un poste utilisateur allumé en permanence.

Ces quatre cas justifient de passer à l'hébergement dédié du module 9, sur un espace Hugging Face. share=True reste alors utile pour tester avant de publier, mais pas pour publier.

Trace des visiteurs

Chaque requête vers votre démonstration partagée s'affiche dans votre console Python, avec l'adresse IP source, la fonction appelée et le code de retour. C'est un journal de bord précieux qui permet de voir en direct qui utilise, ce qui plante, et à quelle fréquence. Pour un test utilisateur, exporter ce log avec un tee (python demo.py 2>&1 | tee demo.log) est plus simple qu'installer un vrai outil de suivi.

Fermer proprement le tunnel

Un Ctrl+C sur le script Python coupe le tunnel immédiatement. Ne pas fermer le script (par exemple en fermant simplement le terminal sur macOS) peut laisser le tunnel actif quelques minutes, exposant votre poste à des requêtes que vous ne voyez plus. Toujours arrêter le script explicitement avant de quitter.

En résumé

  • demo.launch(share=True) ouvre un tunnel vers un serveur relais Hugging Face et affiche une URL *.gradio.live valable 72 heures ; parfait pour une démonstration en réunion ou un test utilisateur.
  • Ce qui est exposé est exactement l'interface Gradio, mais tout ce que la fonction Python peut faire est accessible à un utilisateur du lien ; ne jamais partager sans avoir vérifié qu'aucune ressource sensible n'est manipulable.
  • auth=("...", "...") (ou liste, ou fonction) protège par HTTP Basic ; c'est suffisant pour un partage informel, pas pour un secret vraiment sensible.
  • Latence de tunnel (100-500 ms) et dépendance à votre poste allumé sont les deux limites qui commandent de passer à un espace Hugging Face pour un usage stable ou public.

Le module suivant décrit précisément cette publication : créer l'espace, gérer les secrets, choisir le matériel gratuit ou payant, et affronter la mise en veille automatique.