Aller au contenuIr para o conteúdo

Bomzai Voice

Vous parlez portugais. Ils entendent français. Personne n'attend seul. Você fala português. Eles ouvem francês. Ninguém espera sozinho.

Un système de traduction vocale en temps réel pour réunions. Il tourne entièrement en local, sans aucun appel réseau pendant une réunion, et sans qu'aucun audio ne touche le disque. Um sistema de tradução por voz em tempo real para reuniões. Roda inteiramente local, sem nenhuma chamada de rede durante uma reunião, e sem que nenhum áudio toque o disco.

Il existe parce que je n'arrivais pas à suivre les réunions en français. Aujourd'hui il fonctionne, et les chiffres de cette page ont tous été mesurés sur ma machine. Ele existe porque eu não conseguia acompanhar as reuniões em francês. Hoje funciona, e todos os números desta página foram medidos na minha máquina.

1,13 s
délai perçuatraso percebido
708 ms
moteur completmotor completo
0
appel réseau en réunionchamada de rede em reunião
3
languesidiomas
Aujourd'hui, mesuréHoje, medido

Le problèmeO problema

Une réunion avec l'équipe française. Je comprends un mot sur trois. Je demande de répéter, et la réunion ralentit pour tout le monde. Uma reunião com o time francês. Eu entendo uma palavra em três. Peço para repetir, e a reunião desacelera para todo mundo.

Les outils qui existent traduisent après coup, ou coupent la parole, ou envoient l'audio à un serveur. Aucun ne tient dans une réunion de travail réelle. As ferramentas que existem traduzem depois, ou cortam a fala, ou mandam o áudio para um servidor. Nenhuma se sustenta numa reunião de trabalho real.

Ce qui marche aujourd'huiO que funciona hoje

CapacitéCapacidade En pratiqueNa prática ÉtatEstado
Traduction sortante PT vers FR / ENTradução de saída PT para FR / EN Vous parlez, ils entendent dans leur langueVocê fala, eles ouvem no idioma deles fonctionnefunciona
Retour FR / EN vers PTVolta FR / EN para PT Ce qu'ils disent apparaît en sous-titreO que eles dizem aparece em legenda fonctionnefunciona
Détection de paroleDetecção de fala Le silence ne produit rienO silêncio não produz nada fonctionnefunciona
Calibrage d'ambianceCalibração de ambiente Le système mesure la pièce avant de commencerO sistema mede a sala antes de começar fonctionnefunciona
Installation guidéeInstalação guiada Huit étapes, sans terminalOito passos, sem terminal une machineuma máquina
Application nativeAplicativo nativo Dans le Dock, tourne en arrière-planNo Dock, roda em segundo plano fonctionnefunciona

Comment ça marcheComo funciona

Cliquez sur une brique pour voir ce qu'elle fait, et le chiffre qui a décidé le choix. Clique numa peça para ver o que ela faz, e o número que decidiu a escolha.

Ce que ça coûteO que custa

Un tour, en temps réelUm turno, em tempo real
VAD350 ms
transcriptiontranscrição579 ms
MT63
voixvoz83
55
01,13 s
0,00 sde la fin de la phrase au premier son de l'autre côtédo fim da frase ao primeiro som do outro lado

La transcription domine : 579 ms sur 708, et elle est plate. Whisper traite une fenêtre fixe de 30 secondes quelle que soit la durée réelle. Une demi-seconde de parole coûte 539 ms, huit secondes en coûtent 617. A transcrição domina: 579 ms de 708, e é plana. O Whisper processa uma janela fixa de 30 segundos independentemente da duração real. Meio segundo de fala custa 539 ms, oito segundos custam 617.

La colle en Python coûte 27 ms sur 850, soit 3,2 %. Le travail lourd est déjà en C++. A cola em Python custa 27 ms de 850, ou 3,2%. O trabalho pesado já é C++.

Ce que ce n'est pasO que ele não é

Aucun modèle n'a été entraîné. Whisper, Argos, Piper. Tout est prêt à l'emploi, assemblé. Nenhum modelo foi treinado. Whisper, Argos, Piper. Tudo pronto para uso, montado.

Le travail n'a pas été dans les modèles. Il a été dans le choix de chaque brique avec mesure, dans l'orchestration, et surtout dans les modes de défaillance. O trabalho não esteve nos modelos. Esteve na escolha de cada peça com medição, na orquestração, e sobretudo nos modos de falha.

Ce qui a cassé en cheminO que quebrou no caminho

Une chaîne qui enchaîne les quatre briques marche en démonstration. Elle ne survit pas à une réunion. Voici six défauts qui ont demandé une mesure pour être trouvés. Aucun n'apparaît à la lecture du code. Uma cadeia que encadeia as quatro peças funciona em demonstração. Não sobrevive a uma reunião. Estes são seis defeitos que exigiram medição para serem achados. Nenhum aparece lendo o código.

  • La fenêtre sourdeA janela surda

    Le micro restait fermé pendant que la traduction sortait. On parlait dans le vide, sans message, sans trace.O microfone ficava fechado enquanto a tradução saía. Você falava no vazio, sem mensagem, sem rastro.

    5 194 ms par tour5.194 ms por turno

  • La boucle réseauO laço pela rede

    Teams renvoyait mon propre micro. Le système traduisait sa propre traduction.O Teams devolvia o meu próprio microfone. O sistema traduzia a própria tradução.

    l'invariant local ne couvre pas un chemin réseauo invariante local não cobre um caminho pela rede

  • Le bâillon qui coupeA mordaça que corta

    Mettre les trames à zéro pendant le bâillon : le VAD lit les zéros comme une fin de phrase.Zerar as janelas durante a mordaça: o VAD lê os zeros como fim de frase.

    phrase coupée en deuxfrase cortada em duas

  • Le trou recolléO buraco emendado

    Deuxième tentative : jeter l'audio. Whisper recolle et invente une phrase fluide et fausse.Segunda tentativa: descartar o áudio. O Whisper emenda e inventa uma frase fluente e errada.

    « revisar o orçamento segunda-feira »

  • Le sceau casséO selo quebrado

    Les .pyc écrits après la signature cassent le sceau. macOS refuse avec « endommagé », sans contournement.Os .pyc escritos depois da assinatura quebram o selo. O macOS recusa com "danificado", sem contorno.

    trouvé parachado por codesign --verify

  • L'URL morteA URL morta

    Le lien de téléchargement du pilote renvoyait 404. L'installation n'aurait jamais marché ailleurs.O link de download do driver devolvia 404. A instalação jamais funcionaria em outro lugar.

    trouvé en simulant une machine viergeachado simulando uma máquina limpa

Le mode de défaillance le plus coûteux ne crie pas. Il renvoie un résultat normal : un 200 avec zéro ligne, un « 0 erreur » à quelqu'un qui vient d'être refusé, un bloc audio valide de quasi-zéros quand le périphérique a changé. O modo de falha mais caro não grita. Devolve um resultado normal: um 200 com zero linhas, um "0 erro" para quem acabou de ser recusado, um bloco de áudio válido de quase-zeros quando o dispositivo mudou.

« J'ai rechargé et ça a marché » n'est pas un diagnostic. "Recarreguei e funcionou" não é diagnóstico.

La pileA pilha

Tout tourne en local, sur la machine de la personne. La chaîne complète, de la parole au câble virtuel que Teams lit comme un micro : Tudo roda local, na máquina da pessoa. A cadeia completa, da fala ao cabo virtual que o Teams lê como microfone:

SORTIE micro ├─ VAD Silero onnx, 2 Mo 350 ms ├─ whisper.cpp Metal, q5_0 579 ms ├─ Argos / CTranslate2 float32 49–101 ms ├─ Piper CPU 83 ms └─ BlackHole 2ch ──→ Teams RETOUR Teams ──→ Multi-Output ├─ BlackHole 16ch ├─ whisper.cpp language=fr|en ├─ Argos fr→en→pt | en→pt └─ sous-titre à l'écran ~1,0 s voix optionnelle Piper ptSAÍDA microfone ├─ VAD Silero onnx, 2 MB 350 ms ├─ whisper.cpp Metal, q5_0 579 ms ├─ Argos / CTranslate2 float32 49–101 ms ├─ Piper CPU 83 ms └─ BlackHole 2ch ──→ Teams VOLTA Teams ──→ Multi-Output ├─ BlackHole 16ch ├─ whisper.cpp language=fr|en ├─ Argos fr→en→pt | en→pt └─ legenda na tela ~1,0 s voz opcional Piper pt
SORTIE micro VAD Silero 350 ms whisper.cpp 579 ms Argos 49–101 ms Piper 83 ms BlackHole 2ch Teams RETOUR Teams Multi-Output BlackHole 16ch whisper.cpp fr | en Argos → pt sous-titre ~1,0 s voix optionnelleSAÍDA microfone VAD Silero 350 ms whisper.cpp 579 ms Argos 49–101 ms Piper 83 ms BlackHole 2ch Teams VOLTA Teams Multi-Output BlackHole 16ch whisper.cpp fr | en Argos → pt legenda ~1,0 s voz opcional

Ce qui composeO que compõe

CoucheCamada ChoixEscolha
InterfaceInterface Tauri coque Rust, interface web. 53 Mo, contre 150 pour Electron. Le moteur survit à la fermeture de la fenêtre.casca Rust, interface web. 53 MB, contra 150 do Electron. O motor sobrevive ao fechar a janela.
MoteurMotor Python 3.12 service qui reçoit des commandes en JSON et publie des événements. La colle coûte 27 ms sur 850.serviço que recebe comandos em JSON e publica eventos. A cola custa 27 ms de 850.
TranscriptionTranscrição whisper.cpp large-v3-turbo q5_0, serveur HTTP local, accélération Metal. 497 ms de plancher contre 1 937 en CPU.large-v3-turbo q5_0, servidor HTTP local, aceleração Metal. 497 ms de piso contra 1.937 em CPU.
Détection de paroleDetecção de fala Silero v6 ONNX, pris dans faster-whisper. Aucune dépendance nouvelle, torch n'entre pas.ONNX, vindo do faster-whisper. Nenhuma dependência nova, torch não entra.
TraductionTradução CTranslate2 modèles Argos chargés directement du zip. float32, parce que int8 est 1,7 fois plus lent en ARM.modelos Argos carregados direto do zip. float32, porque int8 é 1,7 vezes mais lento em ARM.
VoixVoz Piper CPU, 80 ms par phrase. Quatre voix, deux genres, trois langues.CPU, 80 ms por frase. Quatro vozes, dois gêneros, três idiomas.
AudioÁudio BlackHole + PortAudio câbles virtuels 2ch et 16ch, Multi-Output pour le retour. Rien ne passe par le réseau.cabos virtuais 2ch e 16ch, Multi-Output para a volta. Nada passa pela rede.
CibleAlvo macOS 14+, Apple Silicon Intel n'est pas visé : c'est Metal qui rend la latence viable.Intel não é alvo: é o Metal que torna a latência viável.

Le dépôtO repositório

ponte/ ├── src/ponte/ modules de fase livrée │ ├── audio/ capture, VAD, routage │ └── core/ config validée au démarrage ├── scripts/ │ ├── cadeia_burra.py la chaîne, bout en bout │ ├── servico.py le moteur en service, JSON sur stdio │ ├── instalador.py les huit étapes du guide │ └── multiout.py Multi-Output par script, sans sudo ├── app/ │ ├── src-tauri/ superviseur Rust │ ├── ui/ interface │ └── empacotar.sh build, signature, dmg ├── config/ │ ├── devices.yaml seuils VAD, mesurés │ └── personas.yaml voix par langue et genre ├── tests/ 669 tests ├── CLAUDE.md le contrat du dépôt └── CHANGELOG.md chaque mesure, avec la commandeponte/ ├── src/ponte/ módulos de fase entregue │ ├── audio/ captura, VAD, roteamento │ └── core/ config validada no boot ├── scripts/ │ ├── cadeia_burra.py a cadeia, ponta a ponta │ ├── servico.py o motor como serviço, JSON por stdio │ ├── instalador.py os oito passos do guia │ └── multiout.py Multi-Output por script, sem sudo ├── app/ │ ├── src-tauri/ supervisor Rust │ ├── ui/ interface │ └── empacotar.sh build, assinatura, dmg ├── config/ │ ├── devices.yaml limiares do VAD, medidos │ └── personas.yaml vozes por idioma e gênero ├── tests/ 669 testes ├── CLAUDE.md o contrato do repositório └── CHANGELOG.md cada medição, com o comando

Les invariantsOs invariantes

Vérifiés au démarrage. Une configuration qui en viole un est refusée, elle ne démarre pas dégradée. Verificados no boot. Uma configuração que viole um é recusada, ela não inicia degradada.

  • Aucun appel réseau en réunion. Les modèles sont sur disque. Rien ne sort de la machine.Nenhuma chamada de rede em reunião. Os modelos estão em disco. Nada sai da máquina.
  • Aucun audio sur disque. Les tampons vivent en mémoire et sont jetés par bloc.Nenhum áudio em disco. Os buffers vivem em memória e são descartados por bloco.
  • Ce qui est lu et ce qui est écrit ne se croisent jamais. Micro et câble de retour d'un côté, câble de sortie et casque de l'autre. Vérifié au démarrage.O que é lido e o que é escrito nunca se cruzam. Microfone e cabo de volta de um lado, cabo de saída e fone do outro. Verificado no boot.
  • La langue est une configuration de canal. Elle n'est jamais détectée.O idioma é configuração de canal. Nunca é detectado.
  • Une seule file d'inférence. Jamais deux appels de modèle en même temps.Uma única fila de inferência. Nunca duas chamadas de modelo ao mesmo tempo.

Comment c'est vérifiéComo é verificado

669 tests, dont ceux qui tiennent les défauts de la section précédente : la fenêtre sourde, le bâillon qui coupe, le sceau du bundle. 669 testes, incluindo os que prendem os defeitos da seção anterior: a janela surda, a mordaça que corta, o selo do bundle.

Preuve par mutation. Un test qui passe des deux côtés du correctif ne prouve rien. On enlève le correctif, et on vérifie que le test devient rouge. C'est rapporté en N sur M, avec le nom du test qui a rougi. Prova por mutação. Um teste que passa dos dois lados do conserto não prova nada. Tira-se o conserto, e confirma-se que o teste vermelha. Isso é reportado em N de M, com o nome do teste que vermelhou.

Chaque chiffre est consigné avec la commande qui l'a produit, dans le CHANGELOG.md. Une mesure sans commande n'entre pas. Cada número é registrado com o comando que o produziu, no CHANGELOG.md. Uma medição sem comando não entra.

Prochaine versionPróxima versão

Le problème que personne ne résoutO problema que ninguém resolve

Une réunion à quatre, quatre langues. Chaque personne reçoit la traduction à un moment différent, parce que les chaînes n'ont pas la même longueur. Uma reunião a quatro, quatro idiomas. Cada pessoa recebe a tradução num momento diferente, porque as cadeias não têm o mesmo comprimento.

L'anglais rit. Le japonais n'a pas encore compris. Celui qui présente passe la diapositive et la moitié de la salle est en retard. O inglês ri. O japonês ainda não entendeu. Quem apresenta passa o slide e metade da sala está atrás.

Ce n'est pas un problème de latence. C'est un problème de désynchronisation. Não é problema de latência. É problema de dessincronia.

L'horloge partagéeO relógio compartilhado

Tous les systèmes de traduction courent après la latence minimale, et échouent, parce que zéro est impossible. Todos os sistemas de tradução perseguem latência mínima, e falham, porque zero é impossível.

Bomzai Voice retourne le problème : si personne n'atteint zéro, on synchronise l'expérience. Bomzai Voice vira o problema: se ninguém chega a zero, sincroniza-se a experiência.

Victor parle en portugais. Quatre personnes écoutent.Victor fala em português. Quatro pessoas escutam.
PaulEN
reçurecebido
1,05 s
LéaFR
reçurecebido
1,15 s
CarlosES
reçurecebido
1,05 s
KenjiJA
reçurecebido
1,60 s
00,9 s1,8 s
Choisissez un mode pour voir la différence. Escolha um modo para ver a diferença.

Chaque participant annonce sa latence. La salle adopte la plus grande. Tout le monde livre à cet instant-là. Cada participante anuncia a própria latência. A sala adota a maior. Todos entregam nesse instante.

Personne ne se rend compte qu'il attend, parce que tout le monde attend ensemble. Ninguém percebe que espera, porque todos esperam junto.

Ce que ça changeO que isso muda

  1. La réunion redevient cohérente. Réaction, rire, question et réponse arrivent dans l'ordre pour tout le monde. A reunião volta a ser coerente. Reação, riso, pergunta e resposta chegam em ordem para todos.
  2. La diapositive se synchronise. Celui qui présente avance quand la dernière personne a entendu, automatiquement, par la même horloge. O slide sincroniza. Quem apresenta avança quando a última pessoa ouviu, automaticamente, pelo mesmo relógio.
  3. Et un effet de bord qui vaut de l'or. Ceux qui ont une chaîne rapide gagnent une fenêtre d'attente. Ils peuvent lire l'original avant d'entendre la traduction. C'est là que naît le mode apprentissage, sans rien construire de plus. E um efeito colateral que vale ouro. Quem tem cadeia rápida ganha uma janela de espera. Pode ler o original antes de ouvir a tradução. É onde nasce o modo de aprendizado, sem construir mais nada.
Écart de livraison entre participants : 150 ms au plusDesvio de entrega entre participantes: no máximo 150 ms
Au-dessus, la synchronisation n'est pas perçue et l'idée ne tient pas. C'est le critère de sortie de la version 0.9, et il sera mesuré avant d'être annoncé. Acima disso, a sincronia não é percebida e a ideia não se sustenta. É o critério de saída da versão 0.9, e será medido antes de ser anunciado.

Les versionsAs versões

  1. 0.63 semainessemanasSortir de ma machine.Sair da minha máquina.
  2. 0.74 semainessemanasQualité perçue : glossaire, compte rendu bilingue.Qualidade percebida: glossário, ata bilíngue.
  3. 0.83 semainessemanasL'horloge locale : mesurer sa propre latence.O relógio local: medir a própria latência.
  4. 0.98 semainessemanasLa maille : livraison synchronisée.A malha: entrega sincronizada.
  5. 1.012 semainessemanasLa plateforme.A plataforma.
AprèsDepois

La plateformeA plataforma

Aujourd'hui, Bomzai Voice est une couche au-dessus de Teams. Il traduit dans la réunion de quelqu'un d'autre, et il dépend de ce que Teams laisse faire : choisir le micro, choisir la sortie, rien de plus. Hoje o Bomzai Voice é uma camada sobre o Teams. Ele traduz dentro da reunião de outra pessoa, e depende do que o Teams deixa fazer: escolher o microfone, escolher a saída, nada mais.

Une fois l'horloge en place, la dépendance s'inverse. Ce n'est plus Bomzai Voice qui s'adapte à la réunion. C'est la réunion qui se tient dans Bomzai Voice. Com o relógio no lugar, a dependência se inverte. Deixa de ser o Bomzai Voice se adaptando à reunião. Passa a ser a reunião acontecendo dentro do Bomzai Voice.

Un lien d'invitation. Des participants dans plusieurs pays, chacun dans sa langue. Une présentation qui avance quand la dernière personne a entendu. Et personne n'installe autre chose. Um link de convite. Participantes em vários países, cada um no seu idioma. Uma apresentação que avança quando a última pessoa ouviu. E ninguém instala mais nada.

Ce que la plateforme estO que a plataforma é

Une salleUma sala Un lien. On entre par le navigateur ou par l'application. Pas de compte Teams, pas de licence tierce.Um link. Entra-se pelo navegador ou pelo aplicativo. Sem conta Teams, sem licença de terceiro.
L'horlogeO relógio Chaque participant annonce sa latence. La salle adopte la plus grande. Tout le monde entend au même instant.Cada participante anuncia a própria latência. A sala adota a maior. Todos ouvem no mesmo instante.
La présentationA apresentação Celui qui présente avance la diapositive. Elle change chez tout le monde à l'instant de livraison, pas avant.Quem apresenta avança o slide. Ele muda para todos no instante da entrega, não antes.
Le sous-titreA legenda Chacun lit dans sa langue, ou dans la langue de l'original s'il veut apprendre.Cada um lê no seu idioma, ou no idioma do original se quiser aprender.
Le compte renduA ata Ce qui a été dit, dans toutes les langues de la salle, avec l'heure. Exporté seulement si quelqu'un le demande.O que foi dito, em todos os idiomas da sala, com a hora. Exportado só se alguém pedir.
La confidentialitéA confidencialidade La traduction reste sur la machine de chacun. Le serveur ne voit que des horodatages. Aucun audio, aucun texte ne transite.A tradução fica na máquina de cada um. O servidor só vê timestamps. Nenhum áudio, nenhum texto trafega.

Une réunion, telle qu'elle se passeraitUma reunião, como ela aconteceria

Quatre personnes, quatre pays. Une réunion commerciale avec un client à Tokyo. Quatro pessoas, quatro países. Uma reunião comercial com um cliente em Tóquio.

  1. Léa crée la salle depuis Paris et envoie le lien. Kenji, à Tokyo, l'ouvre dans son navigateur. Il choisit le japonais. Rien à installer. Léa cria a sala de Paris e manda o link. Kenji, em Tóquio, abre no navegador. Escolhe japonês. Nada para instalar.
  2. La salle mesure. Quatre latences, quatre chaînes. La plus longue est celle de Kenji, à 1,60 s. La salle se cale à 1,70 s. Personne ne le voit, personne n'a besoin de le voir. A sala mede. Quatro latências, quatro cadeias. A mais longa é a de Kenji, em 1,60 s. A sala se ajusta em 1,70 s. Ninguém vê, ninguém precisa ver.
  3. Victor présente en portugais. Il passe la diapositive. Elle change chez les quatre au moment où le dernier a fini d'entendre la phrase. Paul, à Londres, a eu 650 ms de marge. Il les a passées à lire le sous-titre portugais, parce qu'il apprend. Victor apresenta em português. Passa o slide. Ele muda para os quatro no momento em que o último terminou de ouvir a frase. Paul, em Londres, teve 650 ms de folga. Passou lendo a legenda em português, porque está aprendendo.
  4. Kenji pose une question en japonais. Elle arrive en français chez Léa, en anglais chez Paul, en portugais chez Victor, au même instant. Victor répond. Personne n'a coupé personne. Kenji faz uma pergunta em japonês. Ela chega em francês para Léa, em inglês para Paul, em português para Victor, no mesmo instante. Victor responde. Ninguém cortou ninguém.
  5. La réunion se termine. Léa exporte le compte rendu, dans les quatre langues, avec l'heure de chaque tour. Le serveur n'a jamais entendu un mot. A reunião termina. Léa exporta a ata, nos quatro idiomas, com a hora de cada turno. O servidor nunca ouviu uma palavra.

Ce qui change pour une entrepriseO que muda para uma empresa

Une réunion en anglais approximatif coûte cher. Pas en argent, en compréhension : ce qui n'a pas été dit parce que la phrase était trop dure, ce qui a été mal compris et découvert deux semaines plus tard. Uma reunião em inglês aproximado custa caro. Não em dinheiro, em compreensão: o que não foi dito porque a frase era difícil demais, o que foi mal entendido e descoberto duas semanas depois.

La plateforme enlève cette taxe. Chacun parle sa langue, à sa vitesse, avec son vocabulaire. Et l'entreprise peut recruter quelqu'un de très bon qui ne parle pas la langue du siège. A plataforma tira esse imposto. Cada um fala o próprio idioma, no próprio ritmo, com o próprio vocabulário. E a empresa pode contratar alguém muito bom que não fala a língua da sede.

Ce n'est plus un outil qu'une personne utilise. C'est ce qu'une entreprise achète quand elle a des gens dans plusieurs pays. Deixa de ser uma ferramenta que uma pessoa usa. Passa a ser o que uma empresa compra quando tem gente em vários países.

Ce qu'il faut pour y arriverO que falta para chegar lá

Trois choses, dans l'ordre. Aucune ne demande un modèle meilleur, une GPU plus grosse, ni une technologie qui n'existe pas encore. Três coisas, na ordem. Nenhuma exige modelo melhor, GPU maior, nem tecnologia que ainda não existe.

  1. L'horloge locale. Chaque installation mesure sa propre latence en continu et sait la publier. Trois semaines. O relógio local. Cada instalação mede a própria latência continuamente e sabe publicá-la. Três semanas.
  2. Le coordinateur. Un serveur léger qui ne voit que des horodatages. Il tient l'horloge de la salle et rien d'autre. Huit semaines, et le critère de sortie est mesuré : moins de 150 ms d'écart entre participants. O coordenador. Um servidor leve que só vê timestamps. Ele mantém o relógio da sala e mais nada. Oito semanas, e o critério de saída é medido: menos de 150 ms de desvio entre participantes.
  3. La salle. L'audio directement entre participants, sans Teams au milieu. Le lien, la présence, l'invitation. Douze semaines. A sala. O áudio direto entre participantes, sem Teams no meio. O link, a presença, o convite. Doze semanas.

Six mois. Chaque étape est utilisable seule, et chacune a un chiffre qui dit si elle est réussie. Seis meses. Cada etapa é usável sozinha, e cada uma tem um número que diz se deu certo.