SynthID, le filigrane invisible que Google injecte dans chaque image Gemini, c'était censé être incassable. Sauf qu'un dev a eu l'idée toute bête de générer des images noires et blanches avec Gemini, puis de regarder ce qui restait dans le domaine fréquentiel. Et là, surprise... le watermark est apparu en clair avec toutes ses fréquences porteuses !
Le projet
reverse-SynthID
documente le truc de A à Z où on comprend en gros, que le marquage IA de Google fonctionne en injectant de l'énergie à des fréquences bien précises dans le spectre de l'image via une
transformation de Fourier
. Le chercheur a identifié 6 fréquences porteuses principales, toutes avec une cohérence de phase supérieure à 99,9% et la blague, c'est que ce pattern est fixe. Donc pas de message unique par image, pas de clé qui change... c'est juste la même empreinte spectrale sur toutes les images sorties du modèle Gemini.
Spectre FFT du watermark SynthID - les pics lumineux correspondent aux fréquences porteuses identifiées
Du coup, une fois que vous avez profilé cette empreinte avec une cinquantaine d'images PNG de référence (25 noires, 25 blanches, générées via l'API Gemini), vous pouvez faire deux trucs. D'abord, détecter le filigrane avec 90% de précision, sans avoir le moindre accès au code source de Google. Et ensuite le retirer en soustrayant les composantes spectrales identifiées, fréquence par fréquence, tout en préservant la qualité de l'image à plus de 40 dB PSNR. Visuellement identique à l'original !
Et c'est là que la différence avec
UnMarker
(dont je vous avais parlé) saute aux yeux car ce dernier "secoue" l'image en aveugle pour casser le watermark. Alors que Reverse-SynthID, c'est plutôt scruté à la loupe et hyper ciblé. Résultat, y'a clairement moins de dégradation et un drop de confiance du détecteur.
Les fréquences porteuses reconstruites - la structure diagonale du watermark SynthID
Par contre, je l'ai implémenté en Rust et j'ai essayé de voir si ça marchait vraiment sur mes propres images générée avec Gemini. Hé bien non, car le bypass ne fait PAS chuter la confiance du détecteur de 100 à 0, mais juste de quelques pourcents.
Le watermark est atténué, mais pas effacé. Ce n'est donc pas un outil clé en main pour faire disparaître tous les filigranes SynthID en un clic. Mais le fait qu'une seule personne, avec du Python et du traitement de signal classique (FFT, filtres notch, soustraction spectrale), ait pu reverse-engineerer un système que Google présente comme LA solution anti-deepfakes...
Ça confirme ce que les chercheurs de l'Université de Waterloo avaient déjà démontré : le watermarking d'images IA, c'est pété by design.
D'ailleurs, Google le sait très bien et ils pourraient changer le pattern demain et tout serait à refaire, mais ça confirme surtout que le principe même du watermarking spectral a une date de péremption. Après, ça arrange tout le monde d'avoir un truc à montrer quand les gouvernements demandent "et contre les deepfakes, vous faites quoi ?"
Et si c'est la petite étoile visible en bas à droite des images Gemini qui vous gêne (pas le watermark spectral invisible, juste le marqueur visuel), j'ai développé
un outil pour mes Patreons
qui s'en occupe.
Bref, tout est
sur le repo
si le reverse-engineering de watermarks IA, ça vous branche !
Des chercheurs de l'université de Californie du Sud viennent de publier une étude improbable : demander à un modèle d'IA de jouer les experts dégrade ses performances sur les tâches factuelles. Commencer un prompt par "Tu es un expert en programmation" produit de moins bons résultats que de poser la question directement.
Le piège du "tu es un expert"
L'étude, intitulée "Expert Personas Improve LLM Alignment but Damage Accuracy", a mesuré l'impact des instructions de rôle sur les réponses des modèles de langage.
Sur le benchmark MMLU, qui teste les connaissances générales et le raisonnement, les modèles avec une persona d'expert ont obtenu 68 % de bonnes réponses contre 71,6 % sans aucune instruction de rôle.
La baisse est constante sur toutes les catégories testées : maths, code, sciences, culture générale. Bref, dire à une IA qu'elle est brillante la rend un peu moins brillante.
Quand ça marche quand même
Par contre, le persona prompting fonctionne très bien pour un autre type de tâches : la sécurité et l'alignement. En attribuant un rôle de "moniteur de sécurité" au modèle, les chercheurs ont augmenté le taux de refus d'attaques de 53,2 % à 70,9 %, soit une hausse de 17,7 points. Pour les tâches d'écriture et de mise en forme, les personas aident aussi.
L'explication est assez logique : quand on colle un rôle d'expert au modèle, il bascule en mode "suivi d'instructions" et mobilise moins de ressources pour aller chercher les faits dans ses données d'entraînement. Aucune connaissance n'est ajoutée, on déplace juste l'attention du modèle.
Le bon réflexe à adopter
Les chercheurs de l'USC proposent un outil baptisé PRISM qui active automatiquement les personas uniquement quand c'est utile. Mais en attendant que ce genre de système soit intégré aux chatbots grand public, la recommandation est simple : si vous avez besoin de réponses factuelles ou de code, posez votre question directement sans ajouter de rôle.
Si vous voulez que l'IA respecte un ton, un format ou des consignes de sécurité, le persona prompting reste la bonne approche.
On a quand même passé deux ans à répéter partout qu'il fallait commencer ses prompts par "Tu es un expert en..." pour avoir de meilleurs résultats. Visiblement, c'était un peu du vent.
Dirt 3 qui passe de 110 à 860 FPS sous nunux, non, j'ai pas fumé la moquette ! En fait c'est surtout grâce au fameux module de synchronisation kernel NTSYNC promis avec
Wine 11
qui est enfin dispo dans certaines distros. Et la bonne nouvelle c'est que les premiers benchmarks développeurs viennent de tomber, donc on va regarder ça ensemble !
Concrètement, Fedora 42, Ubuntu 25.04 et SteamOS 3.7.20 beta embarquent maintenant le module par défaut avec le kernel 6.14. Du coup Resident Evil 2 bondit de 26 à 77 FPS, Call of Juarez grimpe de 99 à 224 FPS, et Tiny Tina's Wonderlands passe de 130 à 360. Et Call of Duty Black Ops est maintenant devenu... jouable ! Woohoo !
Alors attention, ces benchmarks comparent Wine vanilla (sans aucune optimisation) avec Wine + le module. Cela veut dire que si vous utilisiez déjà fsync via Proton ou Lutris, les gains seront moins spectaculaires. Après les jeux qui en profitent le plus sont ceux avec de grosses charges multi-thread où la synchronisation était vraiment le problèmo noméro uno.
Pour capter pourquoi cette news est un gros morceau, faut regarder un peu sous le capot. Au temps jadis, chaque fois qu'un jeu Windows devait coordonner ses threads (genre, attendre qu'une texture finisse de charger), Wine faisait des allers-retours avec wineserver... des milliers de fois par seconde. Du coup, on se tapait des micro-sacades et une cadence d'images pourrie.
Y'a eu des tentatives pour arranger ça. D'abord esync, puis fsync... ça améliorait les choses mais c'était du bricolage. Ça nécessitait des patchs kernel non-officiels que personne ne maintenait vraiment, et certains jeux gourmands faisaient carrément tout planter.
Mais tout cela c'est de l'histoire ancienne puisque NTSYNC, semble être enfin la bonne approche. Elizabeth Figura (CodeWeavers), la même dev qui avait pondu les solutions précédentes, a créé, cette fois, un vrai module intégré directement dans le noyau Linux. Comme ça, plus de bidouilles à la con et surtout plus d'approximations. Le noyau gère enfin la synchronisation lui-même, nativement, comme il aurait toujours dû le faire.
La stonksitude du barbu gamer est à son maaaax
Après des années de boulot et une présentation à la Linux Plumbers Conference 2023, le module a fini par être mergé dans le kernel mainline il y a peu. Ça marche donc "out of the box" et ça c'est plutôt chouette !
Et pour les possesseurs de Steam Deck, quand Valve rebasera Proton officiel sur Wine 11, tout le monde aura ça gratos !! En attendant, si vous êtes impatient, sachez que
Proton-GE
le supporte déjà ! Entre ça et le fait que
90% des jeux Windows tournent maintenant sous Linux
, y'a clairement plus d'excuses pour rester sous Windows si c'est le gaming qui vous retenait, mes cocos !
Bref, c'est carrément la plus grosse avancée gaming Linux depuis Proton. Pas mal pour un module kernel bien velu quand même !
Hé oui, cest chacals d'OpenAI ferment leur plateforme de vidéos IA, et franchement, ça me rend un peu triste. À vrai dire, même si c’était que de la vidéo générée à partir de prompts, moi je me marrais bien. C'était fun de regarder le produit de ses prompts mais aussi de regarder les conneries des autres. Les versions québécoises, aïe aïe aïe, c’était quelque chose quand même !
Mais bon, le plus urgent maintenant, c’est de sauvegarder vos vidéos avant que tout disparaisse. OpenAI n’a pas encore communiqué de date précise pour la coupure, juste un vague « on vous dira bientôt ». Du coup, autant ne pas traîner, parce que quand ce genre de service cloud ferme, en général c’est pas 6 mois de préavis qu’on vous file...
Depuis
la fuite du modèle
jusqu’à aujourd’hui, Sora aura fait parler de lui. Côté raisons, c’est Fidji Simo (la patronne de la division Applications) qui a lâché le morceau : ils éparpillent leurs efforts sur trop d’apps, d’API et de stacks serveur différents, et ça les ralentit. En gros, entre préparer une entrée en bourse pour fin 2026 et cramer du GPU H100 sur des vidéos de chats en IA, le choix est vite fait. L’équipe de recherche Sora, elle, continuera à bosser sur la simulation de mondes 3D... mais pour la robotique. Et le fameux deal à 1 milliard de dollars avec Disney pour des films et séries ? Pouf, magie magie, c'est envolé !!
Faut dire que les chiffres n’étaient pas glorieux non plus. Après un lancement en fanfare fin 2024 (et une app iOS lancée à l’automne 2025 qui avait cartonné dans les charts), les téléchargements sur l’App Store avaient plongé de 32% entre novembre et décembre 2025. La hype, ça dure qu’un temps.
Mais maintenant les gens, on passe aux choses sérieuses !
Sora Backup - le script qui sauve vos vidéos
Je n'avais absolument pas de temps aujourd'hui, mais j'ai quand même taffé pour vous développer un petit script JavaScript qui récupère TOUTES vos vidéos Sora d’un coup, avec les prompts et les métadonnées, et qui vous génère un joli ZIP prêt à archiver. Pas besoin d’installer quoi que ce soit, pas d’extension louche. Vous avez juste besoin d'être connecté à votre profil Sora et d'un navigateur.
Comment ça marche
Allez sur
sora.com
, connectez-vous à votre compte, puis ouvrez la console JavaScript de votre navigateur (F12 sur Chrome ou Firefox, onglet Console). Ensuite, glissez-déplacez ou collez le script ci-dessous dedans et appuyez sur Entrée.
Le script va automatiquement récupérer votre token d’authentification (pas besoin de le chercher vous-même), puis il va paginer sur votre profil Sora pour récupérer tous vos posts publiés. Pour chaque post, il extrait les vidéos attachées (MP4), les télécharge, et empaquette le tout dans un fichier ZIP directement dans votre navigateur.
Y’a même un fichier manifest.json dans le ZIP qui contient tous vos prompts, les dimensions, les durées, les permalinks, les dates de création... bref, tout ce qu’il faut pour retrouver vos petits. Le ZIP est généré en format STORE (pas compressé, parce que compresser du MP4 ça sert à rien), avec un calcul CRC32 maison et sans aucune librairie externe.
Le script complet
Voici le code à coller dans la console :
//==========================================================//SORABACKUP-Sauvegardecomplètevidéos+images+promptsparKorben//==========================================================//Usage:Ouvrirhttps://sora.com,F12>Console,collercescript//Lesfichierssonttéléchargésvialenavigateur(dossierDownloads)//Unfichiermanifest.jsonrécapituletout(prompts,metadata,URLs)//==========================================================(async()=>{//---MiniZIPbuilder(STORE,pasdelibexterne)---constcrc32table=newUint32Array(256);for(leti=0;i<256;i++){letc=i;for(letj=0;j<8;j++)c=(c&1)?(0xEDB88320^(c>>>1)):(c>>>1);crc32table[i]=c;}functioncrc32(buf){letc=0xFFFFFFFF;for(leti=0;i<buf.length;i++)c=crc32table[(c^buf[i])&0xFF]^(c>>>8);return(c^0xFFFFFFFF)>>>0;}constzipFiles=[];//{name,data(Uint8Array),crc,size}constPAGE_SIZE=50;constDELAY_MS=1500;constmanifest=[];lettotalDownloaded=0;lettotalErrors=0;//---Auth:récupérerleBearertoken---//OPTION1:Collertontokenici(Networktab>Authorizationheader)//OPTION2:Laisservide,lescripttenteradelerécupérerautoletAUTH_TOKEN='';asyncfunctiongetAuthToken(){if(AUTH_TOKEN)returnAUTH_TOKEN;//Auto-detect:endpointsessionChatGPTfor(constpathof['/api/auth/session','/backend-api/auth/session']){try{constr=awaitfetch(path,{credentials:'include'});if(r.ok){constjson=awaitr.json();if(json.accessToken){AUTH_TOKEN=json.accessToken;console.log(' 🔑 Token récupéré automatiquement');returnAUTH_TOKEN;}}}catch(e){}}//Fallback:demanderàl'utilisateurconstinput=prompt('Token non trouvé automatiquement.\n\n'+'Pour le récupérer :\n'+'1. F12 > onglet Réseau\n'+'2. Rafraîchis la page\n'+'3. Clique sur une requête /backend/...\n'+'4. Copie le header Authorization\n\n'+'Colle le token ici (Bearer eyJ...):');if(input){AUTH_TOKEN=input.replace(/^Bearer\s+/i,'').trim();returnAUTH_TOKEN;}console.error(' ❌ Pas de token. Annulation.');returnnull;}//---FetchAPIavecauth---asyncfunctionapiFetch(url){consttoken=awaitgetAuthToken();constheaders={};if(token)headers['Authorization']='Bearer '+token;//oai-device-idrequisparcertainsendpointsconstdeviceId=localStorage.getItem('oai-did')||'';if(deviceId)headers['oai-device-id']=deviceId;constresp=awaitfetch(url,{method:'GET',credentials:'include',headers});if(!resp.ok)thrownewError(`HTTP${resp.status}for${url}`);returnresp.json();}//---Paginationgénérique---asyncfunctionfetchAllPages(baseUrl,dataField='data',cursorParam='after',cursorField='last_id'){letallItems=[];letcursor='';letpage=0;while(true){leturl=baseUrl;if(cursor)url+=`&${cursorParam}=${cursor}`;console.log(`📄Page${++page}(${allItems.length}itemssofar)...`);constjson=awaitapiFetch(url);constitems=json[dataField];if(!Array.isArray(items)||items.length===0)break;allItems=allItems.concat(items);cursor=json[cursorField]||'';if(!json.has_more&&!cursor)break;awaitsleep(DELAY_MS);}returnallItems;}//Variantepourlesendpointsproject_y(cursor-based)asyncfunctionfetchAllPagesCursor(baseUrl){letallItems=[];letcursor='';letpage=0;while(true){leturl=baseUrl;if(cursor)url+=`&cursor=${cursor}`;console.log(`📄Page${++page}(${allItems.length}itemssofar)...`);constjson=awaitapiFetch(url);constitems=json.items;if(!Array.isArray(items)||items.length===0)break;allItems=allItems.concat(items);cursor=json.cursor||'';if(!cursor)break;awaitsleep(DELAY_MS);}returnallItems;}functionsleep(ms){returnnewPromise(r=>setTimeout(r,ms));}//---ExtraireURLdumédiadepuisunegeneration---functiongetMediaUrl(gen){returngen?.encodings?.source?.path||gen?.downloadable_url||gen?.url||'';}//---Extraireleprompt(peutêtredansactions,prompt,ouinput_text)---functiongetPrompt(item,gen){//Promptdirectif(gen?.prompt)returngen.prompt;if(item?.prompt)returnitem.prompt;if(item?.input_text)returnitem.input_text;//Storyboard:lesactionssontlesdescriptionsdesscènesif(item?.actions&&typeofitem.actions==='object'){returnObject.entries(item.actions).sort((a,b)=>Number(a[0])-Number(b[0])).map(([frame,desc])=>`[frame${frame}]${desc}`).join(' | ');}if(gen?.actions&&typeofgen.actions==='object'){returnObject.entries(gen.actions).sort((a,b)=>Number(a[0])-Number(b[0])).map(([frame,desc])=>`[frame${frame}]${desc}`).join(' | ');}return'';}//---DéroulerlesitemsduprofilSoraenitemsplats---functionflattenProfileItems(items){constflat=[];for(constitemofitems){constpost=item.post||item;constattachments=post.attachments||[];if(attachments.length===0)continue;for(constattofattachments){consturl=att.encodings?.source?.path||att.downloadable_url||att.url||'';if(!url)continue;flat.push({id:post.id||att.generation_id||'',generation_id:att.generation_id||'',task_id:att.task_id||'',title:att.title||post.discovery_phrase||'',prompt:post.text||'',emoji:post.emoji||'',type:att.generation_type||att.kind||'',width:att.width||0,height:att.height||0,duration_s:att.duration_s||0,is_public:!!post.posted_to_public,created_at:post.posted_at?newDate(post.posted_at*1000).toISOString():'',url:url,permalink:post.permalink||'',username:item.profile?.username||'',});}}returnflat;}//---Sanitizefilename---functionsanitize(name){returnname.replace(/[<>:"\/\\|?*\x00-\x1f]/g, '_').substring(0, 100);}//---AjouterunfichierauZIP---asyncfunctionaddToZip(url,filename){try{constresp=awaitfetch(url);if(!resp.ok)thrownewError(`HTTP${resp.status}`);constbuf=awaitresp.arrayBuffer();constdata=newUint8Array(buf);zipFiles.push({name:filename,data,crc:crc32(data),size:data.length});totalDownloaded++;returntrue;}catch(e){console.warn(`⚠️Erreur${filename}:`,e.message);totalErrors++;returnfalse;}}//---Déduirel'extension ---functiongetExt(url,type){if(!url)returntype==='video'?'.mp4':'.png';constm=url.match(/\.(mp4|webm|mov|png|jpg|jpeg|webp|gif)/i);returnm?'.'+m[1].toLowerCase():(type==='video'?'.mp4':'.png');}//==========================================================//MAIN//==========================================================constorigin=window.location.origin;console.log('🎬 SORA BACKUP - Démarrage');console.log('='.repeat(50));//1.MespostsSora(profil)console.log('\n📦 1/2 - Récupération de mes posts Sora...');letmyPosts=[];try{myPosts=awaitfetchAllPagesCursor(`${origin}/backend/project_y/profile_feed/me?limit=${PAGE_SIZE}&cut=nf2`);console.log(`✅${myPosts.length}postsdeprofil`);//Debugpremieritemif(myPosts.length>0){constfirst=myPosts[0];console.log(' 🔍 Premier item - clés:',Object.keys(first).join(', '));console.log(' 🔍 URL:',first.url?.substring(0,80)||'none');console.log(' 🔍 DL:',first.downloadable_url?.substring(0,80)||'none');console.log(' 🔍 ENC:',first.encodings?.source?.path?.substring(0,80)||'none');console.log(' 🔍 GENS:',first.generations?.length||'none');console.log(' 🔍 TITLE:',first.title||'none');}}catch(e){console.warn(' ⚠️ profil failed:',e.message);}//2.MeslikessurSoraconsole.log('\n📦 2/2 - Récupération de mes likes Sora...');letmyLikes=[];try{myLikes=awaitfetchAllPagesCursor(`${origin}/backend/project_y/profile_feed/me?limit=${PAGE_SIZE}&cut=appearances`);if(myCameos.length)console.log(`✅${myCameos.length}cameostrouvés`);}catch(e){}//---Déroulerlesgenerationsetdédupliquer---console.log('\n🔄 Extraction des vidéos...');constrawAll=[...myPosts,...myLikes];constflatItems=flattenProfileItems(rawAll);constseen=newSet();constallItems=[];for(constitemofflatItems){if(item.id&&seen.has(item.id))continue;//Filtrer:vidéosuniquementconstisVideo=item.type==='video_gen'||item.url.includes('/videos/')||item.url.includes('.mp4');if(!isVideo)continue;if(item.id)seen.add(item.id);allItems.push(item);}console.log(`📊Totalunique:${allItems.length}vidéosàtélécharger`);console.log('='.repeat(50));//---Construirelemanifestettélécharger---console.log('\n⬇️ Téléchargement en cours...');console.log('(Les fichiers arrivent dans ton dossier Downloads)');for(leti=0;i<allItems.length;i++){constmeta=allItems[i];consturl=meta.url;if(!url){console.log(`⏭️[${i+1}/${allItems.length}]${meta.id}-pasd'URL, skip`);meta.downloaded=false;manifest.push(meta);continue;}consttype=(meta.task_type==='image_gen'||url.match(/\.(png|jpg|jpeg|webp|gif)/i))?'image':'video';constext=getExt(url,type);constnameBase=meta.title?sanitize(meta.title):(meta.prompt?sanitize(meta.prompt.substring(0,60)):meta.id);constfilename=`sora_${String(i+1).padStart(4,'0')}_${nameBase}${ext}`;console.log(`⬇️[${i+1}/${allItems.length}]${filename}`);meta.filename=filename;meta.downloaded=awaitaddToZip(url,filename);manifest.push(meta);//Pauseentredownloadspourpassurchargerif(i<allItems.length-1)awaitsleep(800);}//---AjouterlemanifestauZIP---console.log('\n📝 Ajout du manifest au ZIP...');constmanifestData=newTextEncoder().encode(JSON.stringify(manifest,null,2));zipFiles.push({name:'manifest.json',data:manifestData,crc:crc32(manifestData),size:manifestData.length});//---GénérerleZIP(formatSTORE,pasdecompression)---console.log('\n📦 Génération du ZIP...');constenc=newTextEncoder();constblobParts=[];constcentralParts=[];letoffset=0;for(constfofzipFiles){constnameBytes=enc.encode(f.name);//Localfileheader(30bytes+name)constlh=newArrayBuffer(30);constlv=newDataView(lh);lv.setUint32(0,0x04034b50,true);lv.setUint16(4,20,true);lv.setUint16(8,0,true);//STORElv.setUint32(14,f.crc,true);lv.setUint32(18,f.size,true);lv.setUint32(22,f.size,true);lv.setUint16(26,nameBytes.length,true);blobParts.push(newUint8Array(lh),nameBytes,f.data);//Centraldirectoryentry(46bytes+name)constch=newArrayBuffer(46);constcv=newDataView(ch);cv.setUint32(0,0x02014b50,true);cv.setUint16(4,20,true);cv.setUint16(6,20,true);cv.setUint16(10,0,true);//STOREcv.setUint32(16,f.crc,true);cv.setUint32(20,f.size,true);cv.setUint32(24,f.size,true);cv.setUint16(28,nameBytes.length,true);cv.setUint32(42,offset,true);centralParts.push(newUint8Array(ch),nameBytes);offset+=30+nameBytes.length+f.size;}constcentralSize=centralParts.reduce((s,p)=>s+p.length,0);consteocd=newArrayBuffer(22);constev=newDataView(eocd);ev.setUint32(0,0x06054b50,true);ev.setUint16(8,zipFiles.length,true);ev.setUint16(10,zipFiles.length,true);ev.setUint32(12,centralSize,true);ev.setUint32(16,offset,true);constzipBlob=newBlob([...blobParts,...centralParts,newUint8Array(eocd)],{type:'application/zip'});constzipName=`sora_backup_${newDate().toISOString().split('T')[0]}.zip`;consta=document.createElement('a');a.href=URL.createObjectURL(zipBlob);a.download=zipName;document.body.appendChild(a);a.click();document.body.removeChild(a);URL.revokeObjectURL(a.href);//---Résumé---constsizeMB=(zipBlob.size/1024/1024).toFixed(1);console.log('\n'+'='.repeat(50));console.log('🎬 SORA BACKUP TERMINÉ');console.log(`✅VidéosdansleZIP:${totalDownloaded}`);console.log(`❌Erreurs:${totalErrors}`);console.log(`📦Fichier:${zipName}(${sizeMB}MB)`);console.log(`📝manifest.jsoninclusdansleZIP`);console.log('='.repeat(50));})();
Quelques précisions
Si le token n’est pas récupéré automatiquement (ça peut arriver selon votre config), le script vous demandera de le coller manuellement. Pour le trouver, c’est simple : F12 > onglet Réseau > rafraîchissez la page > cliquez sur n’importe quelle requête vers /backend/... > copiez le header Authorization.
D’ailleurs, si la vidéo IA vous branche toujours,
Higgsfield
propose des séries entièrement générées par IA. C’est pas la même approche que Sora, mais c’est un signe que la vidéo IA ne meurt pas avec la fermeture d’un seul service.
Bon, bref, c’est la fin d’un truc sympa. Moi je préférais largement scroller sur Sora sur d'aller sur TikTok ou Instagram parce qu'au moins c'était drôle !
Merci à mes
Patreons
qui me permettent de prendre le temps de développer ce genre de petits outils pour vous. Sans eux, j’aurais jamais pu me poser une après-midi pour coder ça.
Un groupe de pirates a compromis Trivy, un scanner de vulnérabilités open source très utilisé dans les pipelines de développement. Résultat : plus de 1 000 environnements SaaS infectés par un malware qui vole des clés API, des identifiants cloud et des tokens GitHub.
Un scanner de sécurité devenu vecteur d'attaque
Trivy est un outil open source maintenu par Aqua Security. Il sert à détecter des failles, des mauvaises configurations et des secrets exposés dans du code, et il est intégré dans les chaînes de déploiement continu (CI/CD) d'un très grand nombre d'entreprises. Le groupe TeamPCP a réussi à compromettre la version 0.69.4 de Trivy en exploitant une mauvaise configuration dans le composant GitHub Action du projet.
En février, ils ont volé un token d'accès privilégié, et ce token n'a jamais été correctement révoqué. En mars, les attaquants l'ont utilisé pour injecter du code malveillant directement dans le projet, en poussant des images Docker et des versions GitHub vérolées vers les utilisateurs.
Le résultat : 75 des 76 tags de trivy-action ont été remplacés par des versions malveillantes.
La contamination s'étend
L'attaque ne s'est pas arrêtée à Trivy. Le même groupe a aussi compromis liteLLM, une bibliothèque Python qui sert d'interface pour les modèles de langage et qui est présente dans 36 % des environnements cloud.
Ils ont aussi touché KICK (un outil d'analyse statique de Checkmarx) et déployé CanisterWorm, un ver qui se propage via des paquets npm vérolés. Le malware installé est un infostealer qui extrait les clés API, les identifiants de bases de données, les tokens GitHub et toute information sensible accessible dans l'environnement de build.
Mandiant, la branche cybersécurité de Google, estime que plus de 1 000 environnements SaaS sont actuellement compromis, et que ce chiffre pourrait grimper à 10 000. TeamPCP travaillerait avec le groupe Lapsus$, connu pour ses attaques contre Microsoft, Nvidia et Uber.
Des révélations à la conférence RSA
Les détails de l'attaque ont été rendus publics lors de la conférence RSA. Le chercheur en sécurité Paul McCarty a été le premier à tirer la sonnette d'alarme, suivi par les équipes de Socket, Wiz et Aikido.dev. Aqua Security a vu ses 44 dépôts GitHub internes défacés, avec une exposition du code source et des configurations CI/CD.
L'affaire montre à quel point les outils de sécurité open source, quand ils sont mal protégés, peuvent devenir le point d'entrée idéal pour une attaque à grande échelle.
C'est quand même un comble : un scanner de vulnérabilités qui devient lui-même le vecteur d'une attaque. Le fait qu'un simple token non révoqué ait suffi pour compromettre toute la chaîne montre que la sécurité des projets open source reste un vrai sujet. Et quand on sait que liteLLM est présent dans plus d'un tiers des environnements cloud, on mesure l'ampleur du problème...
Le pilote Vulkan open source d'Intel pour Linux vient de recevoir une optimisation qui améliore les performances des jeux DirectX 12 tournant via Proton.
La modification a été intégrée à Mesa 26.1 et concerne les cartes graphiques Arc Alchemist et Battlemage. Le patch avait été proposé pour la première fois en 2020, il aura donc fallu plus de cinq ans pour le voir arriver.
Ce qui change pour les joueurs Linux
L'optimisation porte sur la façon dont le pilote ANV gère le cache d'état graphique. En utilisant une combinaison de deux identifiants internes (Binding Table Pointer et Binding Table Index) au lieu d'un seul pour référencer les textures, le pilote peut supprimer certaines étapes de synchronisation qui ralentissaient le rendu.
Les développeurs d'Intel indiquent que le gain est mesurable sur tous les jeux DirectX 12 qu'ils ont testés via VKD3D-Proton, la couche de traduction utilisée par Steam pour faire tourner les jeux Windows sur Linux.
Pas de chiffres précis dans la note technique, mais une autre modification récente du même pilote (un simple changement d'une ligne de code pour le prefetch des tables de textures) avait déjà montré des gains allant jusqu'à 3 à 4 % sur God of War et Destiny 2.
Un patch qui a mis cinq ans à arriver
L'anecdote vaut quand même le détour. Ce patch a été proposé pour la première fois en novembre 2020, et il vient d'être fusionné dans Mesa en mars 2026.
Plus de cinq ans entre la proposition et l'intégration, ce qui donne une idée du rythme de développement des pilotes graphiques open source. Le code nécessite aussi un correctif au niveau du noyau Linux (dans le pilote Xe), qui devrait arriver avec Linux 7.1.
Les GPU concernés sont les Intel Arc à partir de la génération Alchemist (Arc A770, A750, etc.) et les plus récents Battlemage (Arc B580, B570).
Quelques limites quand même
L'optimisation ne fonctionne bien qu'avec les jeux DirectX 12. Sur les titres DirectX 11, les développeurs ont constaté des baisses de performances, ce qui fait que le mécanisme est activé automatiquement pour DX12 et désactivé pour DX11. Il est aussi possible de forcer son activation ou sa désactivation via un réglage dans la configuration DRI.
C'est le genre de petite avancée qui, mise bout à bout avec les autres, finit par rendre les GPU Intel Arc de plus en plus viables sous Linux pour le jeu. Cinq ans pour un patch, c'est long, mais le résultat est là. Et puis ça montre aussi que l'approche open source d'Intel sur ses pilotes graphiques continue de porter ses fruits, même si le chemin est quand même un peu plus lent que chez NVIDIA ou AMD.
Europol vient de coordonner un coup de filet massif contre le dark web. En dix jours, 23 pays ont fermé plus de 373 000 sites frauduleux qui proposaient des contenus pédocriminels.
Le plus ironique : l'opérateur n'a jamais livré la moindre donnée, il arnaquait ses propres clients. Et ces clients sont désormais dans le viseur de la police.
Une opération dans 23 pays
L'opération Alice a été lancée le 9 mars et a duré dix jours. Sous la direction des autorités allemandes et avec le soutien d'Europol, des policiers de 23 pays ont participé à ce coup de filet, de la France aux États-Unis en passant par la Suisse, l'Australie et le Royaume-Uni.
L'enquête avait démarré en 2021 autour d'une plateforme baptisée "Alice with Violence CP", qui proposait des contenus pédocriminels à la vente sur le dark web. Au total, 105 serveurs ont été saisis, tous hébergés en Allemagne, et l'opérateur a été identifié : un homme de 35 ans basé en Chine, visé par un mandat d'arrêt international.
L'arnaqueur arnaqué
Le détail qui rend cette affaire si particulière : le suspect n'a jamais livré les contenus qu'il vendait. Il gérait environ 90 000 sites sur le réseau Tor qui proposaient des "packs" de 17 à 215 euros, payables en Bitcoin. Les acheteurs recevaient en échange... rien du tout.
En cinq ans d'activité, il a encaissé 345 000 euros auprès de 10 000 clients qui pensaient acheter des contenus pédocriminels. Un escroc qui arnaque des criminels, en somme.
440 suspects identifiés
Sauf que ces clients, même s'ils n'ont rien reçu, ont quand même tenté d'acheter des contenus illégaux. Europol a donc remonté les paiements en cryptomonnaies et identifié 440 personnes à travers le monde.
Plus de 100 d'entre elles font l'objet d'enquêtes actives. En Suisse, cinq personnes ont été placées en détention. En Allemagne, 14 suspects sont visés par des procédures. La France a mobilisé l'Office de protection des mineurs pour sa part de l'enquête.
On a quand même un type qui a monté 373 000 faux sites depuis la Chine et qui a encaissé 345 000 euros en arnaquant des gens qui voulaient acheter les pires contenus imaginables. Et grâce à lui, la police a maintenant une liste de 440 noms.
James Gullberg a mis en ligne un projet de bras robotique à 6 axes, principalement imprimé en 3D et conçu pour apprendre la robotique. Ce petit robot embarque un Raspberry Pi, des microcontrôleurs STM32 et tourne sous ROS 2.
Le tout pour un budget qui reste accessible, avec des mouvements décrits comme étonnamment fluides pour du fait maison.
Un bras robot signé James Gullberg
James Gullberg a publié
sur son site
un projet qui risque de plaire aux bricoleurs : un bras robotique compact à 6 degrés de liberté, dont la structure est quasi intégralement imprimée en 3D. Seuls les systèmes d'entraînement font appel à des pièces métalliques.
Le projet est pensé comme un outil pédagogique. On n'est pas sur un robot industriel, mais sur une plateforme d'expérimentation qui permet de toucher à la conception mécanique, à la planification de mouvement et au contrôle logiciel.
Six axes, un Raspberry Pi et ROS 2 sous le capot
Côté mécanique, chaque articulation a droit à son propre système de réduction. La base utilise un réducteur planétaire classique, tandis que l'épaule et le coude embarquent des réducteurs planétaires à anneau fendu, qui offrent une densité de couple élevée par rapport à leur encombrement.
Le poignet s'appuie sur un différentiel à courroie inversé. Pour le retour de position, des aimants alternés sont intégrés directement dans la couronne de sortie et suivis par un encodeur magnétique.
Un microcontrôleur STM32 gère le contrôle moteur avec des boucles PID et de la génération de pas. Un Raspberry Pi fait office d'ordinateur de bord et communique avec les moteurs via un bus CAN. Le tout tourne sous ROS 2.
Le résultat est visiblement assez bluffant : les vidéos montrent des mouvements fluides, bien loin de ce qu'on pourrait attendre d'un projet fait maison.
Apprendre la robotique sans se ruiner
Ce projet rejoint une vague de bras robotiques open source accessibles. On pense au Thor, au HELENE ou encore au BCN3D Moveo. Mais celui de Gullberg se distingue par la variété des mécanismes employés. Chaque articulation utilise un design différent, et c'est voulu : le but est d'expérimenter, pas de produire en série.
Côté budget, on ne connaît pas le coût exact, mais les composants restent a priori sur des montants franchement raisonnables, puisqu'on parle là d'un simple STM32, d'un modeste un Raspberry Pi, e quelques moteurs et bien évidemment du filament pour imprimante 3D. Bref, on est loin des prix d'un kit de robotique du commerce.
Ce mini bras robotique coche quand même beaucoup de cases. Il est ouvert, documenté, modulaire, et il permet de toucher à des concepts qui coûtent habituellement une fortune en formation.
Un développeur a réussi à porter MS-DOS 2.0 sur l'Apple IIe, l'ordinateur personnel d'Apple sorti en 1983. Le projet, baptisé "reboot-camp-83", repose sur une carte d'extension qui embarque un processeur Intel 8088 à 8 MHz.
Le tout communique avec le processeur 6502 de l'Apple II, et le code est en accès libre. Quarante ans de retard, mais le geste est là, et il est plutôt classe.
Un processeur Intel dans un Apple II
Seth Kushniryk vient de publier "reboot-camp-83", un projet open source qui permet de faire tourner des applications MS-DOS 2.0 sur un Apple IIe. Pour que ça fonctionne, il faut une carte d'extension AD8088, fabriquée à l'époque par ALF Products.
Cette carte contient un processeur Intel 8088 qui tourne à 8 MHz et qui se branche sur le bus d'extension de l'Apple II. On se retrouve avec deux processeurs dans la même machine : le 6502 d'Apple et le 8088 d'Intel.
Kushniryk a développé un programme "pont" qui fait communiquer les deux processeurs. Il a aussi déplacé ce programme dans une zone différente de la RAM pour libérer de la place et permettre l'affichage en haute résolution.
Le tout a demandé pas mal de travail de débogage, avec entre autres un problème lié à une contrainte non documentée de ProDOS.
Ce que ça fait tourner, et ce que ça ne fait pas
Le port est compatible avec la quasi-totalité des logiciels MS-DOS 2.0, à une condition : que le programme n'écrive pas directement dans la mémoire vidéo. C'est une limitation qui exclut pas mal de jeux, mais les applications de productivité et les utilitaires fonctionnent.
Pour l'époque, avoir un processeur à 8 MHz dans un Apple IIe, c'était quand même une sacrée puissance de calcul, et pouvoir lancer des applications DOS en parallèle du système Apple aurait été un vrai avantage.
Le projet est entièrement open source et disponible sur le dépôt git de Kushniryk. Les mises à jour et la documentation sont publiées sur son site personnel.
Quarante ans de retard, mais c'est le geste qui compte
L'Apple IIe a été commercialisé en 1983, et MS-DOS 2.0 la même année. À l'époque, les cartes coprocesseur existaient déjà pour faire tourner CP/M-86 sur Apple II, mais le port complet de MS-DOS n'avait jamais été finalisé publiquement.
Kushniryk comble ce vide quarante ans plus tard, avec un projet qui relève plus de la prouesse technique et de la passion du rétro-computing que d'un usage pratique.
C'est le genre de projet qui ne sert à rien... et c'est pour ça qu'on l'aime bien. Faire tourner MS-DOS sur un Apple IIe, c'est un peu comme mettre un moteur de Porsche dans une 2CV : ça ne va pas révolutionner les transports, mais ça force le respect.
Le fait que le projet soit open source et bien documenté en fait aussi une ressource intéressante pour ceux qui s'intéressent au fonctionnement des processeurs de cette époque. Franchement, si en 1983 quelqu'un avait pu lancer Lotus 1-2-3 sur son Apple IIe, on en parlerait encore.