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.
Apple is reportedly preparing a major Siri overhaul with chatbot-style features, deeper app awareness, and possible Google Gemini support later in 2026.
Faire de la
synthèse vocale
, de la transcription et du voice cloning en local sur son Mac, sans envoyer le moindre octet dans le cloud... hey bien c'est possible mes petits foufous et en plus comme je sais que vous avez des oursins dans les poches, hé bien bonne nouvelle : C'est gratuit !
MLX-Audio
, c'est donc une bibliothèque Python qui exploite le framework MLX d'Apple pour faire tourner des modèles audio directement sur les puces M1, M2, M3, M4 et maintenant M5. Cette liste est trop longue, la prochaine fois, j'écrirais M* ou M1-5 ^^. Avec cette lib, du coup, tout se fait en local sur votre machine. Si je devais oser une comparaison un peu casse gueule, je dirais que c'est un peu le Ollama de l'audio.
Côté text-to-speech, y'a surtout du choix. Une dizaine de modèles sont disponibles, dont Kokoro pour du multilingue (français, anglais, japonais, chinois, espagnol...), Chatterbox qui gère 23 langues, ou encore Dia pour les dialogues. Et voici comment ensuite avec une commande dans le terminal, on peut faire parler la machine :
mlx_audio.tts.generate --model mlx-community/Kokoro-82M-bf16 --text "Salut les copains" --lang_code f --play
Le truc sympa, c'est que ça ne s'arrête pas à la synthèse vocale. Côté transcription, on retrouve Whisper (le modèle d'OpenAI qui gère 99 langues), Parakeet de NVIDIA pour les langues européennes, et même VibeVoice-ASR de Microsoft qui fait de la diarization (identifier qui parle dans une conversation).
Pour transcrire un fichier audio, c'est donc tout aussi simple :
Y'a aussi le
voice cloning
avec CSM, où vous filez un fichier audio de référence et le modèle reproduit la voix. Perso, ça fait un peu flipper mais qui est carrément bluffant ! Sauf si vous avez une voix super particulière (trop de clope hein ^^), au final le résultat est assez bon.
Attention, tout ça a besoin de mémoire ! Heureusement, la bibliothèque gère la quantization (de 3 à 8 bits), du coup les modèles sont compressés pour tenir dans la mémoire unifiée des puces Apple Silicon. Le plus léger, Kokoro, fait 82M de paramètres et le plus costaud, Ming Omni, monte à 16.8 milliards de paramètres (mais en mixture-of-experts, donc seulement 3B activés à la fois). Pour ce dernier, faut donc un Mac avec pas mal de RAM.
D'ailleurs, si vous êtes développeur, la bibliothèque expose également une API REST compatible OpenAI. Ça veut dire que vos apps qui causent déjà avec l'API d'OpenAI peuvent basculer sur du local sans changer une ligne de code... enfin presque. Car faut quand même pointer vers localhost au lieu des serveurs d'OpenAI, mais c'est à peu près tout. Y'a même un package Swift pour intégrer ça dans une app iOS ou macOS native.
Voilà, pour ceux qui préfèrent une interface graphique, un mode web avec visualisation 3D de l'audio est même intégré. C'est super joli !
Ce projet est sous licence MIT, et le mainteneur, Prince Canuma, est un ancien ingénieur ML chez Arcee AI, donc pas un random qui a forké un truc un dimanche ^^.
Voilà, si vous avez un Mac et que l'audio IA en local vous branche, c'est open source, c'est gratuit et ça marche carrément bien !
GitHub Copilot has added support for OpenAI’s GPT-5.4 coding model, bringing improved reasoning and support for multi-step tasks. The model is available across several development environments.
In this photo illustration, the GitHub Copilot logo is seen displayed on a smartphone screen.
GitHub Copilot has added support for OpenAI’s GPT-5.4 coding model.
OpenAI says scammers are using ChatGPT to commit romance scams and impersonate law firms. Learn the fastest verification steps to avoid AI-assisted fraud.
Microsoft's financial earnings report reveals that OpenAI accounts for 45% of its Azure cloud computing backlog, yet Microsoft's net income jumped by $7.6 billion, primarily due to its investment in OpenAI.
OpenAI CEO Sam Altman recently revealed that the company has declared "code red" multiple times as a response to competitive threats in the ever-evolving AI industry.
Open AI CEO Sam Altman speaks during a talk session with SoftBank Group.
Photoshop inside ChatGPT lowers the barrier to image editing, making advanced effects and adjustments accessible without subscriptions, tutorials, or prior experience with Adobe software.
OpenAI is reportedly in initial talks with investors to raise funds, which could push its market valuation to approximately $750 billion.
ANKARA, TURKIYE - AUGUST 13: In this photo illustration, the logo of OpenAI logo is being displayed on a mobile phone screen in front of another screen displaying a robotic hand, in Ankara, Turkiye on August 13, 2025. (Photo by Ismail Aslandag/Anadolu via Getty Images)
OpenAI has unveiled ChatGPT Images with new capabilities, which Sam Altman described as “something fun.” The update promises greater precision, enhanced creativity, and is said to be four times faster.
OpenAI logo with ChatGPT images promotional video screencap
OpenAI finally launched its GPT-5.2 model after CEO Sam Altman declared code red following Google's successful Gemini 3 launch. The model ships with advanced capabilities across coding, text, image, and video.
Sam Altman, CEO of Open AI, is pictured on September 25, 2025 in Berlin, Germany.