❌

Vue lecture

OmniVoice - Clonez votre propre voix en local et en français

L'équipe Next-gen Kaldi de Xiaomi a sorti OmniVoice, un modèle de synthèse vocale qui parle 646 langues et qui est capable de "recopier" une voix à partir d'un extrait de huit secondes minimum. Et tout ça en local et gratuitement !

Le français y est d'ailleurs la cinquième langue du corpus d'entraînement, avec 23 675 heures d'audio de référence sur les 581 000 qu'ils ont avalées. Autant dire que le modèle a entendu du français toute sa vie, et ça s'entend au résultat.

Voilà donc comment cloner votre propre voix, du début à la fin. Comptez 3,3 Go de poids que la première génération ira chercher toute seule, donc prévoyez une connexion pour ce coup-là, et quelques minutes de manipulation une fois qu'ils sont sur votre disque.

Installer OmniVoice

Pour cela, il vous faut Python 3.10 à 3.13 (PyTorch 2.8 n'existe pas encore pour 3.14, vous vous prendriez un "No matching distribution found"), et un environnement isolé (sinon vous allez casser autre chose). Sur Mac, les deux lignes suivantes suffiront puisque le modèle utilise le GPU intégré via MPS :

python3 -m venv ~/omnivoice-env && source ~/omnivoice-env/bin/activate
pip install torch==2.8.0 torchaudio==2.8.0
pip install omnivoice num2words

Sur Linux et Windows, ça devra se faire avec une carte NVIDIA (sous Windows, l'environnement s'active avec omnivoice-env\Scripts\activate) sauf que PyTorch doit venir de l'index CUDA, donc remplacez la deuxième ligne par celle-ci :

pip install torch==2.8.0+cu128 torchaudio==2.8.0+cu128 --extra-index-url https://download.pytorch.org/whl/cu128

Notez que sans carte graphique du tout, ça marche quand même. J'ai rejoué la même installation dans un conteneur Linux en processeur seul, elle passe sans rien changer... mais il m'a fallu cinq fois la durée de l'audio en temps de calcul.

Une fois installé, pour savoir que c'est en place, tapez omnivoice-infer --help et là, la liste des options doit s'afficher, sans la moindre erreur d'import. Le num2words de la troisième ligne, lui, ne sert qu'au chemin Python dont je parle plus bas, alors gardez-le sous le coude.

Les 8 secondes qui font tout

C'est l'étape que tout le monde bâcle et c'est pourtant celle qui est décisive pour avoir un bon résultat. Le projet recommande entre 3 et 10 secondes, pas plus car au-delà, ça ralentit le calcul et ça dégrade le clonage. Prenez donc un passage où vous parlez sans blanc, sans "euh", sans musique derrière, et découpez-le proprement comme ceci avec ffmpeg (ou autre logiciel de votre choix) :

ffmpeg -i mon-enregistrement.m4a -ss 12 -t 8 -ac 1 -ar 24000 moi.wav

La qualité de cet extrait est très importante donc si vous enregistrez votre voix, mettez bien le micro près de la bouche, dans une pièce sans écho, et évitez les MP3 récupéré à partir de YouTube .

Écrivez ensuite dans un fichier ce que dit exactement l'extrait, mot pour mot. Vous pouvez sauter cette étape (le modèle transcrit alors tout seul avec Whisper), sauf qu'il téléchargera 1,6 Go de plus pour ça et qu'il se plante parfois sur un nom propre, ce qui abîme le clonage.

C'est le moment de générer !

Avant de taper quoi que ce soit, relisez bien votre texte et réécrivez les chiffres en toutes lettres. La ligne de commande n'a aucune option de normalisation, donc "2345" sortira n'importe comment alors que "deux mille trois cent quarante-cinq" se lit tout seul. C'est du côté Python que la normalisation se fait, avec normalize_text=True, la langue passée en language="fr" et le num2words de tout à l'heure... sans la langue, votre texte français part chez le normaliseur anglais qui réclamera même une lib sans version précompilée pour les Mac Apple Silicon.

Voici la commande complète :

omnivoice-infer --model k2-fsa/OmniVoice \
 --text "Bonjour, ceci est un test de clonage de voix en français réalisé avec OmniVoice." \
 --ref_audio moi.wav --ref_text "$(cat moi.txt)" \
 --language fr --num_step 32 --output ma-voix.wav

Vous devez voir passer un "Saved to ma-voix.wav" au bout de quelques secondes. Sur mon M4 Max, j'ai compté 4 à 6 secondes de calcul pour 5,4 secondes d'audio, et moitié moins avec --num_step 16 au prix d'un peu de netteté. Au passage, le facteur 40 fois plus rapide que le temps réel qu'annonce le projet sur son site, ça a été mesuré sur un H100 avec des noyaux d'accélération maison, et pas sur un ordi de bureau...

Si la ligne de commande vous rebute, vous pouvez aussi passer par la commande : omnivoice-demo --ip 127.0.0.1 --port 8001 qui permet de faire la même chose mais dans le navigateur, avec le bouton d'import pour l'extrait et un menu déroulant pour la langue. Pensez juste à lancer export GRADIO_ANALYTICS_ENABLED=False avant, parce que l'interface web appelle les serveurs de Gradio au démarrage et qu'on n'a pas envie de leur filer nos data à ceux-là.

L'audio, lui, ne bouge pas de votre machine.

L'extrait de référence de 8 secondes chargé à gauche, la langue calée sur French, et la sortie de 5 secondes à droite une fois le clonage terminé.

Et si vous voulez vraiment débrancher la machine du réseau, faites-le dans le bon ordre, sinon la commande de génération part chercher les poids et se vautre sur un httpx.ConnectError suivi d'un LocalEntryNotFoundError. Récupérez donc le modèle d'abord, dans un dossier bien à vous :

hf download k2-fsa/OmniVoice --local-dir ~/omnivoice-modele

Ensuite vous coupez tout et vous passez ce dossier à --model à la place du nom du dépôt. Ça marche même sur une machine qui n'a jamais vu Internet, il suffit d'y copier le dossier. Et si vous préférez garder le cache par défaut, un export HF_HUB_OFFLINE=1 fait la même chose. J'ai rejoué la génération avec toutes les sorties réseau refusées par le système, le fichier sort quand même en 8 secondes... donc non, votre voix ne part chez personne.

Maintenant, une fois que c'est fait, écoutez le fichier avant d'en faire quoi que ce soit, parce que le modèle avale parfois des morceaux de phrase. Sur mes 24 générations de la même phrase, 5 ont perdu ou déformé un mot. C'était presque toujours le premier ou le dernier... et ce n'est pas une surprise, c'est un bug connu de l'outil. Faut donc relancer parfois plusieurs fois pour avoir un résultat OK.

Dernier truc pour ceux qui passeront par Python : la voix se sauvegarde une fois pour toutes. model.create_voice_clone_prompt() puis .save("ma_voix.pt") produisent un fichier minuscule que les sessions suivantes rechargeront sans repasser par l'extrait ni par la transcription. Regénérez alors une phrase avec, et comparez à l'oreille : si c'est bien la même voix, vous pouvez ranger le WAV de référence.

Voici l'extrait que j'ai généré avec ma voix. Ces 6 secondes d'audio ont pris 14 secondes à la génération sur mon Mac Studio :

Le kit à coller dans votre agent

Si vous faites faire le boulot par Claude Code, Codex ou n'importe quel agent IA, voilà le brief à lui donner tel quel. J'y ai mis les pièges qui m'ont coûté un peu de temps :

Ce que vous avez le droit d'en faire

Alors le code d'OmniVoice est bien sous licence Apache 2.0, mais les poids du modèle, eux, sont sous CC-BY-NC à cause du corpus qui a servi à les entraîner. Cela veut dire que tout usage commercial est interdit. Donc si vous avez prévu un projet afin de gagner de l'argent, regardez plutôt du côté de Chatterbox , qui est sous licence MIT, qui parle également français et qui "tatoue" même ses sorties (vu que maintenant c'est obligatoire avec la loi IA).

Pour l'usage perso, en revanche, rien ne vous arrête, et le règlement européen sur l'IA exclut explicitement de son champ l'activité personnelle non professionnelle.

Ce qui est cool avec Omnivoice, c'est que ce clonage de votre voix se fait à 100% en local et c'est bien tout l'intérêt de la manœuvre ! Et si l'idée c'est plutôt de faire lire vos ebooks par la machine, je vous invite à jeter un œil à MLX-Audio côté Mac.

Source : OmniVoice sur GitHub

  •  

Nvidia CMP 170HX - La VRAM était bien là, bridée par le firmware

Je viens d'apprendre qu'une carte Nvidia normalement dédiée au minage de cryptomonnaies, vendue avec 8 Go de mémoire en expose aujourd'hui 64 Go, sans que rien n'ait été remplacé ou soudé dessus... C'est ça la magie de Nvidia, la mémoire était bien là depuis le début, mais était juste maintenue en sommeil par le firmware.

Cette carte, la CMP 170HX est sortie il y a 5 ans pour miner de l'Ethereum. Elle est bâtie sur le GA100, le même silicium 7 nm que l'accélérateur A100 que Nvidia vend aujourd'hui autour de 3 500 dollars en version 40 Go. Et la mémoire HBM2e qu'on y trouve est physiquement présente sur la carte, quoi qu'affiche la fiche technique. Alors certes, débrider une carte Nvidia par logiciel n'a rien de neuf puisqu'on transformait déjà des GeForce en Quadro en 2013.

Mais cette fois, le déverrouillage exploite un bug de chargement de signature dans le BootROM du Falcon, le microcontrôleur de sécurité qui garde le démarrage de la puce. Et ce dernier se fait grâce à un outil nommé cmpunlocker , publié sous licence GPL.

Si vous voulez vous lancer, il vous faudra du Linux x86-64, un accès root et le pilote libre nvidia-open en version 610.43.0x. Votre carte 8 Go passera ainsi à 64 Go, une carte 10 Go à 40 Go, et les unités de calcul bridées reviendront naturellement avec. Et surtout, ce patch survit au redémarrage !

Le PCIe, lui, ne se déverrouille qu'à moitié. Passer de Gen1 à Gen2 est logiciel, mais la largeur reste coincée à quatre lignes parce que Nvidia a laissé 24 condensateurs de couplage vides sur le circuit imprimé. Aller au-delà du x4 veut donc dire les souder à la main et ça c'est pas donné à tout le monde.

Reste que ça donne environ 1 Go/s vers la carte. À titre d'exemple, un utilisateur du forum développeurs de Nvidia a réussi à charger un modèle 70B quantifié en une quarantaine de secondes, contre une dizaine avec la modification matérielle et le Gen2 x16. Pour de l'inférence sur une seule carte, ce goulot ne se paie donc qu'au chargement.

Le même utilisateur mesure un taux de 27,3 tokens par seconde en décodage sur un modèle Qwen2.5-72B, pour 150 à 180 watts, et explique que lors de ses tests, le GPU a réclamé un reset autour de 95% d'occupation mémoire, sur de très grandes fenêtres de contexte. Rien de gênant donc. Deux réserves par contre, et elles ne sont pas décoratives.... La première c'est que l' ECC figure toujours dans la liste des problèmes non résolus du projet, avec le NVLink et le PCIe Gen4, alors que c'est précisément le mécanisme qui pourrait nous dire si la mémoire déverrouillée tient dans la durée. Et la seconde, c'est que le palier des 80 Go a été testé, mais rejeté car instable.

Sur la question qui fâche maintenant, à savoir celle du silicium mis au rebut qui serait bridé car défectueux, ValdikSS, dans un fil sur Hacker News , écrit n'avoir trouvé jusqu'ici aucune carte dont la RAM soit réellement défectueuse. Le bridage ressemble donc à de la segmentation commerciale plus qu'à du recyclage de puces ratées, mais pour le moment, personne n'a fait tourner ces 64 Go assez longtemps pour le prouver.

Reste le prix... La 170HX se trouvait peu de temps avant ça, autour de 250 dollars sur eBay mais depuis que l'exploit circule, elle dépasse les 1 000 $... Bref, le verrou a sauté, et le prix est en train d'exploser !

Source : Tom's Hardware

  •  

Sa boîte à goûter fait tourner un LLM en local

Si vous avez eu une boîte à goûter M.A.S.K. dans les années 80 pour transporter vos BN, alors celle de RadioactiveArtist va vous plaire. Dans sa boite à goûter, pas de Princes ni de Balisto... lui, il embarque un Raspberry Pi 5, un écran tactile de 7 pouces et une IA qui tourne sans internet.

Le clin d'œil est calculé puisque M.A.S.K., c'était ce dessin animé de 85-86 dont les objets du quotidien planquaient tous une seconde vie. Fermé, l'engin reste donc une boîte à goûter d'époque. Mais ouverte, elle devient un cyberdeck complet, avec clavier et enceintes noyés dans la partie basse + un écran qui se redresse sur sa propre charnière.

Ce clic autorise une connexion à Google : adresse IP transmise et traceurs possibles. En savoir plus Voir cette vidéo sur YouTube

Un cyberdeck, pour ceux qui débarquent des âges farouches (vous l'avez ?), c'est un ordinateur portable assemblé à la main dans un boîtier détourné, fait pour être réparé et modifié plutôt qu'acheté.

Dedans, y'a donc un Pi 5 avec 16 Go de RAM et une microSD de 128 Go. L'alimentation passe par un HAT UPS Geekworm, la carte d'onduleur qui se clipse sur le Pi, nourrie par 4 accus 18650. En façade, des lecteurs de cartes, des ports USB 3 et un jack casque, plus un hub audio USB Waveshare qui pilote les enceintes. Par contre, on ne sait rien de son autonomie...

L'Ethernet a été une vraie plaie apparemment puisqu'aucun adaptateur du marché ne rentrait dans l'espace disponible. Il a donc poncé à fond un connecteur RJ45 nu jusqu'à ce qu'il clipse dans le port. Les charnières, elles, se sont révélées bien plus dures que prévu, et les pattes du circuit imprimé de l'écran n'étaient pas faites pour encaisser cette tension. Une plaque ABS récupérée sur une vieille caisse de transport a réglé le problème.

Et la boîte ressort intacte !

Puis je sais pas si vous avez vu dans la vidéo, mais il y a aussi un LLM là-dedans. Un modèle de 3 milliards de paramètres via Ollama, qui répond sans la moindre connexion. L'écran de boot, l'écran de login et les icônes maison, eux, ont été codés avec Claude Code, qu'il a installé sur la machine le temps de la configuration.

Si le format vous parle, le Hackberry Pi CM5 dont je vous ai parlé joue dans la même cour, et les cyberdecks faits maison ont droit à leur guide sur le site.

Bref, à moitié jouet, à moitié machine de terrain, et zéro trou dans la boîte ça, c'est du respect pour l'objet !!

Source

  •  

Dream Server - Un serveur IA complet chez vous en une commande

Monter une vraie IA à la maison, c'est vite une galère. Vous achetez une super machine puis vous collez dessus toute votre liste au père Noël (Chat local, reco vocale, génération d'image, RAG et compagnie) et vous voilà à empiler des dockers à n'en plus finir. Eh bien Light Heart Labs en a eu marre de ces bricolages et nous a pondu Dream Server, un outil qui câble tout ce petit monde à votre place !

Une seule commande et c'est parti mon kiki (Linux et macOS) :

curl -fsSL https://raw.githubusercontent.com/Light-Heart-Labs/DreamServer/main/dream-server/get-dream-server.sh | bash

Ou Windows :

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
git clone https://github.com/Light-Heart-Labs/DreamServer.git
cd DreamServer
.install.ps1

Ça va lancer le script qui va ensuite tout paramétrer tout seul et choisir le modèle d'IA qui collera le plus à votre matériel, et cela que vous ayez une RTX 4090, un Mac M4 avec mémoire unifiée ou encore une puce AMD Strix Halo voire un vieux PC sans GPU.

Edit : un lecteur m'a remonté un piège si vous êtes sous Linux configuré en français (ou n'importe quelle locale qui écrit les décimales avec une virgule). Le script génère tout seul les valeurs de votre fichier .env en suivant le format de nombres de votre système, et il vous colle des 16,0 au lieu de 16.0. Du coup l'install se vautre avec une erreur dans le genre COMFYUI_CPU_LIMIT: expected number, got '16,0'. La parade, confirmée par un des auteurs, c'est de relancer l'installeur en forçant la locale C (celle qui met des points à la place des virgules) :

LC_ALL=C ./install.sh

Ensuite, pendant que le LLM se télécharge à fond les ballons, un autre petit modèle de 1,5 milliards de paramètres en backup afin que vous puissiez quand même "discuter" avec votre Dreamserver.

Le rôle de Dreamserver c'est donc juste de prendre toutes les briques de l'IA pour vous en faire un truc clé en main. Open WebUI pour le chat, llama-server pour l'inférence, Whisper et Kokoro pour la voix, ComfyUI pour les images, Qdrant pour le RAG, SearXNG pour la recherche web sans mouchard, et bien sûr n8n pour brancher tout ça à vos automatisations.

Et une fois que c'est en route, suffit de lancer la commande dream et là vous pourrez tout faire.

Par exemple dream status pour visualiser l'état des services et du GPU, dream model swap T3 pour changer de "palier" sur votre matos, dream enable n8n pour activer une extension ou encore dream mode hybrid pour avoir de l'inférence en local avec possibilité de basculer sur une IA dans le cloud via une API.

Dreamserver reste un orchestrateur, et pas un moteur IA magique, donc si vous adorez tout assembler vous-même, vous n'avez clairement pas besoin de ça. Par contre, si vous vous en foutez, et que vous voulez juste votre IA qui tourne ce soir, ça vous fera gagner des heures de bidouille.

Faut dire qu'à mesure que l'IA devient une infrastructure de base, dépendre à 100% d'un abonnement cloud qui peut tripler ses tarifs ou couper votre accès du jour au lendemain, ça craint un peu. Donc je pense qu'on est tous bien contents d'avoir des solutions clé en main comme celle-ci.

Si ça vous tente, c'est sur le dépôt de Dream Server .

  •  
❌