Vue lecture

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.

Sora ferme - Comment sauvegarder vos vidéos IA avant la coupure

Sora, c’est fini les amis !

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 :

// ==========================================================
// SORA BACKUP - Sauvegarde complète vidéos + images + prompts par Korben
// ==========================================================
// Usage : Ouvrir https://sora.com, F12 > Console, coller ce script
// Les fichiers sont téléchargés via le navigateur (dossier Downloads)
// Un fichier manifest.json récapitule tout (prompts, metadata, URLs)
// ==========================================================

(async () => {
 // --- Mini ZIP builder (STORE, pas de lib externe) ---
 const crc32table = new Uint32Array(256);
 for (let i = 0; i < 256; i++) {
 let c = i;
 for (let j = 0; j < 8; j++) c = (c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1);
 crc32table[i] = c;
 }
 function crc32(buf) {
 let c = 0xFFFFFFFF;
 for (let i = 0; i < buf.length; i++) c = crc32table[(c ^ buf[i]) & 0xFF] ^ (c >>> 8);
 return (c ^ 0xFFFFFFFF) >>> 0;
 }
 const zipFiles = []; // {name, data (Uint8Array), crc, size}

 const PAGE_SIZE = 50;
 const DELAY_MS = 1500;
 const manifest = [];
 let totalDownloaded = 0;
 let totalErrors = 0;

 // --- Auth : récupérer le Bearer token ---
 // OPTION 1 : Coller ton token ici (Network tab > Authorization header)
 // OPTION 2 : Laisser vide, le script tentera de le récupérer auto
 let AUTH_TOKEN = '';

 async function getAuthToken() {
 if (AUTH_TOKEN) return AUTH_TOKEN;

 // Auto-detect : endpoint session ChatGPT
 for (const path of ['/api/auth/session', '/backend-api/auth/session']) {
 try {
 const r = await fetch(path, { credentials: 'include' });
 if (r.ok) {
 const json = await r.json();
 if (json.accessToken) {
 AUTH_TOKEN = json.accessToken;
 console.log(' 🔑 Token récupéré automatiquement');
 return AUTH_TOKEN;
 }
 }
 } catch(e) {}
 }

 // Fallback : demander à l'utilisateur
 const input = 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();
 return AUTH_TOKEN;
 }

 console.error(' ❌ Pas de token. Annulation.');
 return null;
 }

 // --- Fetch API avec auth ---
 async function apiFetch(url) {
 const token = await getAuthToken();
 const headers = {};
 if (token) headers['Authorization'] = 'Bearer ' + token;

 // oai-device-id requis par certains endpoints
 const deviceId = localStorage.getItem('oai-did') || '';
 if (deviceId) headers['oai-device-id'] = deviceId;

 const resp = await fetch(url, {
 method: 'GET',
 credentials: 'include',
 headers
 });

 if (!resp.ok) throw new Error(`HTTP ${resp.status} for ${url}`);
 return resp.json();
 }

 // --- Pagination générique ---
 async function fetchAllPages(baseUrl, dataField = 'data', cursorParam = 'after', cursorField = 'last_id') {
 let allItems = [];
 let cursor = '';
 let page = 0;

 while (true) {
 let url = baseUrl;
 if (cursor) url += `&${cursorParam}=${cursor}`;

 console.log(` 📄 Page ${++page} (${allItems.length} items so far)...`);
 const json = await apiFetch(url);

 const items = json[dataField];
 if (!Array.isArray(items) || items.length === 0) break;

 allItems = allItems.concat(items);
 cursor = json[cursorField] || '';

 if (!json.has_more && !cursor) break;
 await sleep(DELAY_MS);
 }

 return allItems;
 }

 // Variante pour les endpoints project_y (cursor-based)
 async function fetchAllPagesCursor(baseUrl) {
 let allItems = [];
 let cursor = '';
 let page = 0;

 while (true) {
 let url = baseUrl;
 if (cursor) url += `&cursor=${cursor}`;

 console.log(` 📄 Page ${++page} (${allItems.length} items so far)...`);
 const json = await apiFetch(url);

 const items = json.items;
 if (!Array.isArray(items) || items.length === 0) break;

 allItems = allItems.concat(items);
 cursor = json.cursor || '';

 if (!cursor) break;
 await sleep(DELAY_MS);
 }

 return allItems;
 }

 function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }

 // --- Extraire URL du média depuis une generation ---
 function getMediaUrl(gen) {
 return gen?.encodings?.source?.path
 || gen?.downloadable_url
 || gen?.url
 || '';
 }

 // --- Extraire le prompt (peut être dans actions, prompt, ou input_text) ---
 function getPrompt(item, gen) {
 // Prompt direct
 if (gen?.prompt) return gen.prompt;
 if (item?.prompt) return item.prompt;
 if (item?.input_text) return item.input_text;
 // Storyboard : les actions sont les descriptions des scènes
 if (item?.actions && typeof item.actions === 'object') {
 return Object.entries(item.actions)
 .sort((a,b) => Number(a[0]) - Number(b[0]))
 .map(([frame, desc]) => `[frame ${frame}] ${desc}`)
 .join(' | ');
 }
 if (gen?.actions && typeof gen.actions === 'object') {
 return Object.entries(gen.actions)
 .sort((a,b) => Number(a[0]) - Number(b[0]))
 .map(([frame, desc]) => `[frame ${frame}] ${desc}`)
 .join(' | ');
 }
 return '';
 }

 // --- Dérouler les items du profil Sora en items plats ---
 function flattenProfileItems(items) {
 const flat = [];
 for (const item of items) {
 const post = item.post || item;
 const attachments = post.attachments || [];
 if (attachments.length === 0) continue;

 for (const att of attachments) {
 const url = 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 ? new Date(post.posted_at * 1000).toISOString() : '',
 url: url,
 permalink: post.permalink || '',
 username: item.profile?.username || '',
 });
 }
 }
 return flat;
 }

 // --- Sanitize filename ---
 function sanitize(name) {
 return name.replace(/[<>:"\/\\|?*\x00-\x1f]/g, '_').substring(0, 100);
 }

 // --- Ajouter un fichier au ZIP ---
 async function addToZip(url, filename) {
 try {
 const resp = await fetch(url);
 if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
 const buf = await resp.arrayBuffer();
 const data = new Uint8Array(buf);
 zipFiles.push({ name: filename, data, crc: crc32(data), size: data.length });
 totalDownloaded++;
 return true;
 } catch(e) {
 console.warn(` ⚠️ Erreur ${filename}:`, e.message);
 totalErrors++;
 return false;
 }
 }

 // --- Déduire l'extension ---
 function getExt(url, type) {
 if (!url) return type === 'video' ? '.mp4' : '.png';
 const m = url.match(/\.(mp4|webm|mov|png|jpg|jpeg|webp|gif)/i);
 return m ? '.' + m[1].toLowerCase() : (type === 'video' ? '.mp4' : '.png');
 }

 // ==========================================================
 // MAIN
 // ==========================================================
 const origin = window.location.origin;
 console.log('🎬 SORA BACKUP - Démarrage');
 console.log('='.repeat(50));

 // 1. Mes posts Sora (profil)
 console.log('\n📦 1/2 - Récupération de mes posts Sora...');
 let myPosts = [];
 try {
 myPosts = await fetchAllPagesCursor(
 `${origin}/backend/project_y/profile_feed/me?limit=${PAGE_SIZE}&cut=nf2`
 );
 console.log(`  ${myPosts.length} posts de profil`);
 // Debug premier item
 if (myPosts.length > 0) {
 const first = 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. Mes likes sur Sora
 console.log('\n📦 2/2 - Récupération de mes likes Sora...');
 let myLikes = [];
 try {
 myLikes = await fetchAllPagesCursor(
 `${origin}/backend/project_y/profile_feed/me?limit=${PAGE_SIZE}&cut=appearances`
 );
 if (myCameos.length) console.log(`  ${myCameos.length} cameos trouvés`);
 } catch(e) {}

 // --- Dérouler les generations et dédupliquer ---
 console.log('\n🔄 Extraction des vidéos...');
 const rawAll = [...myPosts, ...myLikes];
 const flatItems = flattenProfileItems(rawAll);

 const seen = new Set();
 const allItems = [];
 for (const item of flatItems) {
 if (item.id && seen.has(item.id)) continue;
 // Filtrer : vidéos uniquement
 const isVideo = 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(`📊 Total unique: ${allItems.length} vidéos à télécharger`);
 console.log('='.repeat(50));

 // --- Construire le manifest et télécharger ---
 console.log('\n⬇️ Téléchargement en cours...');
 console.log('(Les fichiers arrivent dans ton dossier Downloads)');

 for (let i = 0; i < allItems.length; i++) {
 const meta = allItems[i];
 const url = meta.url;

 if (!url) {
 console.log(` ⏭️ [${i+1}/${allItems.length}] ${meta.id} - pas d'URL, skip`);
 meta.downloaded = false;
 manifest.push(meta);
 continue;
 }

 const type = (meta.task_type === 'image_gen' || url.match(/\.(png|jpg|jpeg|webp|gif)/i)) ? 'image' : 'video';
 const ext = getExt(url, type);
 const nameBase = meta.title
 ? sanitize(meta.title)
 : (meta.prompt ? sanitize(meta.prompt.substring(0, 60)) : meta.id);
 const filename = `sora_${String(i+1).padStart(4,'0')}_${nameBase}${ext}`;

 console.log(` ⬇️ [${i+1}/${allItems.length}] ${filename}`);
 meta.filename = filename;
 meta.downloaded = await addToZip(url, filename);
 manifest.push(meta);

 // Pause entre downloads pour pas surcharger
 if (i < allItems.length - 1) await sleep(800);
 }

 // --- Ajouter le manifest au ZIP ---
 console.log('\n📝 Ajout du manifest au ZIP...');
 const manifestData = new TextEncoder().encode(JSON.stringify(manifest, null, 2));
 zipFiles.push({ name: 'manifest.json', data: manifestData, crc: crc32(manifestData), size: manifestData.length });

 // --- Générer le ZIP (format STORE, pas de compression) ---
 console.log('\n📦 Génération du ZIP...');
 const enc = new TextEncoder();
 const blobParts = [];
 const centralParts = [];
 let offset = 0;

 for (const f of zipFiles) {
 const nameBytes = enc.encode(f.name);
 // Local file header (30 bytes + name)
 const lh = new ArrayBuffer(30);
 const lv = new DataView(lh);
 lv.setUint32(0, 0x04034b50, true);
 lv.setUint16(4, 20, true);
 lv.setUint16(8, 0, true); // STORE
 lv.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(new Uint8Array(lh), nameBytes, f.data);

 // Central directory entry (46 bytes + name)
 const ch = new ArrayBuffer(46);
 const cv = new DataView(ch);
 cv.setUint32(0, 0x02014b50, true);
 cv.setUint16(4, 20, true);
 cv.setUint16(6, 20, true);
 cv.setUint16(10, 0, true); // STORE
 cv.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(new Uint8Array(ch), nameBytes);

 offset += 30 + nameBytes.length + f.size;
 }

 const centralSize = centralParts.reduce((s, p) => s + p.length, 0);
 const eocd = new ArrayBuffer(22);
 const ev = new DataView(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);

 const zipBlob = new Blob([...blobParts, ...centralParts, new Uint8Array(eocd)], { type: 'application/zip' });

 const zipName = `sora_backup_${new Date().toISOString().split('T')[0]}.zip`;
 const a = 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é ---
 const sizeMB = (zipBlob.size / 1024 / 1024).toFixed(1);
 console.log('\n' + '='.repeat(50));
 console.log('🎬 SORA BACKUP TERMINÉ');
 console.log(`  Vidéos dans le ZIP : ${totalDownloaded}`);
 console.log(`  Erreurs : ${totalErrors}`);
 console.log(` 📦 Fichier : ${zipName} (${sizeMB} MB)`);
 console.log(` 📝 manifest.json inclus dans le ZIP`);
 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.

Source

Sora 2 - Comment y accéder depuis l'Europe ?

– Article en partenariat avec Surfshark

OpenAI a lancé Sora 2 fin septembre, et pour l’avoir testé, je peux vous dire que c’est un sacré bond en avant pour la génération vidéo par IA. Leur modèle génère maintenant de la vidéo ET de l’audio synchronisé, avec des dialogues, des effets sonores et des musiques réalistes…etc.

Mais il y a un hic car Sora 2 est dispo uniquement aux USA et au Canada. Le reste du monde, dont l’Europe, est donc bloqué. Mais rassurez-vous, je vais vous expliquer comment y accéder.

Sora 2 fonctionne en text-to-video et image-to-video. En gros, vous tapez une description, et le modèle génère la vidéo avec l’audio qui va bien. Comparé à la première version , Sora 2 respecte donc bien mieux la physique. Par exemple, on arrive à obtenir un ballon de basket qui rate le panier rebondit correctement sur le panneau… les mouvements sont plus cohérents, et les instructions complexes sur plusieurs plans sont suivies en gardant l’état du monde.

La fonctionnalité qui fait du bruit, c’est surtout Cameo. Vous uploadez une courte vidéo de vous, et Sora 2 peut vous insérer dans n’importe quelle scène générée. Le modèle reproduit alors votre apparence et votre voix avec assez de précision pour que ça fonctionne. Ça marche aussi avec des animaux ou des objets. OpenAI a sorti une app iOS sociale autour de ça, où vous créez des vidéos, remixez les générations des autres, et ajoutez vos potes en cameo.

Maintenant, comme je vous le disais, le problème c’est que Sora 2 est réservé aux Etats-Unis et au Canada uniquement donc si vous tentez d’y accéder depuis l’Europe, le Royaume Uni, l’Australie ou ailleurs, vous tomberez sur un message du style “Service not available in your region”. Et malheureusement, OpenAI n’a pas communiqué de dates pour l’expansion internationale, même si des sources parlent de déploiements progressifs dans les prochaines semaines.

Pourquoi Surfshark est la solution idéale pour accéder à Sora 2

Une solution technique existe pour contourner ce problème : utiliser un VPN pour apparaître aux yeux de Sora 2 comme si vous étiez aux USA ou au Canada. Et c’est là que Surfshark entre en jeu .

Surfshark dispose d’un réseau impressionnant de plus de 3200 serveurs répartis dans 100 pays, dont de nombreux serveurs performants aux États-Unis et au Canada. Les débits dépassent régulièrement 950 Mbps via le protocole WireGuard, ce qui garantit un streaming fluide et sans latence pour vos générations vidéo sur Sora 2. Fini les connexions qui rament au moment crucial.

Le gros plus de Surfshark ? Le tarif ultra-compétitif à environ 3€ par mois (avec l’offre actuelle), ce qui en fait l’un des VPN avec le meilleur rapport qualité-prix du marché. Mais ce n’est pas tout : contrairement à la plupart des concurrents, Surfshark permet des connexions simultanées illimitées. Vous pouvez protéger tous vos appareils (PC, smartphone, tablette, smart TV, et même celui de votre famille) avec un seul abonnement.

Des fonctionnalités qui vont au-delà du simple VPN

Ce qui distingue vraiment Surfshark, ce sont ses fonctionnalités avancées qui renforcent votre sécurité et votre anonymat en ligne. Le Dynamic MultiHop fait transiter votre connexion par plusieurs serveurs dans différents pays, brouillant totalement les pistes. Même les plus curieux auront du mal à vous suivre.

La plateforme Nexus centralise toute la gestion de vos paramètres de sécurité dans une interface intuitive. Vous pouvez analyser les fuites potentielles, gérer vos connexions multiples, et activer les protections avancées en quelques clics, même si vous n’êtes pas un expert technique.

Côté innovation, Surfshark ne chôme pas. Ils ont récemment déposé un brevet pour un système de chiffrement de bout en bout qui élimine les métadonnées. Contrairement aux VPN classiques qui laissent parfois des traces temporelles ou de volume, ce nouveau système efface absolument toutes les miettes numériques. Et ça ne ralentit pas votre connexion, ce qui est crucial pour du streaming 4K ou des générations vidéo gourmandes en bande passante.

Surfshark a également lancé son propre service DNS public gratuit, qui chiffre et anonymise toutes vos requêtes DNS via DNS-over-HTTPS et DNS-over-TLS. Même votre fournisseur d’accès Internet ne peut plus voir quels sites vous visitez. Et contrairement à d’autres DNS publics, Surfshark ne collecte ni ne vend vos données de navigation.

CleanWeb et Alternative ID : la protection complète

En bonus, tous les abonnements Surfshark incluent désormais CleanWeb, un bloqueur de publicités et de trackers ultra-efficace. Il fonctionne sur tous vos appareils (Windows, Mac, Android, iOS, Linux, même FireTV) et bloque non seulement les pubs classiques, mais aussi les pop-ups, les cookies invasifs, les tentatives de phishing et les sites vérolés. Vous naviguez plus vite, plus proprement, et en toute sécurité.

Et si vous voulez aller encore plus loin dans la protection de votre vie privée, Alternative ID (inclus dans l’abonnement) vous permet de générer des identités fictives (noms, adresses mail temporaires, numéros de téléphone) pour vous inscrire sur des services sans jamais donner vos vraies informations. Pratique pour tester Sora 2 ou d’autres plateformes sans se faire spammer par la suite.

Comment accéder à Sora 2 depuis l’Europe avec Surfshark

Notez quand même qu’utiliser un VPN pour contourner les restrictions géographiques d’OpenAI viole leurs conditions d’utilisation donc s’ils le décident, ils peuvent suspendre votre compte. Mais pour le moment, ce n’est arrivé à aucun utilisateur de VPN et je pense pas que ce serait dans leur intérêt.

Comme l’app Sora est dispo uniquement sur iOS pour l’instant, vous devrez aussi vous créer un compte Apple américain pour avoir l’appstore US et pouvoir installer l’app. Rien de bien compliqué et une fois que c’est installé, vous pouvez rebasculer sur votre compte FR.

Voici donc comment créer un compte Apple américain (US) :

  1. Rendez-vous sur le site https://appleid.apple.com/us/ puis cliquez sur “Create your Apple ID”.
  2. Remplissez les informations demandées (nom, date de naissance, adresse e-mail) et choisissez bien “United States” comme pays/région.
  3. Vous pouvez utiliser un numéro de téléphone français pour la validation (le préfixe +33 est accepté) en recevant un SMS pour confirmer.
  4. Validez votre adresse e-mail via le code envoyé.
  5. À la création du compte, vous pouvez choisir “None” comme mode de paiement, ce qui signifie que vous n’êtes pas obligé de fournir une carte bancaire américaine.
  6. Pour utiliser ce compte sur un appareil iOS, déconnectez votre compte Apple actuel dans AppStore > Compte > Déconnexion (tout en bas), puis connectez-vous avec votre nouvel identifiant Apple US.

Cette méthode vous permettra de créer un Apple ID pour accéder à l’App Store américain sans nécessiter obligatoirement une carte bancaire US.

Le système d’accès est en invitation pour l’instant et chaque personne invitée reçoit 4 codes à partager. TOUS LES CODES ONT ÉTÉ DISTRIBUÉS ! Maintenant si vous voulez tester Sora 2 et que vous êtes parmi les 4 premiers à m’envoyer un mail, je vous file un de mes codes d’invitation. Après ça, vous pourrez à votre tour inviter 4 personnes.

Maintenant, niveau contenu généré, on voit déjà des trucs hallucinants sur les réseaux… et aussi beaucoup de problèmes de copyright. Des users génèrent des Bobs l’Eponge, des Mario, des persos Nintendo…etc ce qui pose évidemment des questions légales mais bon, c’est rigolo quand même. OpenAI a d’ailleurs intégré un watermarking dans chaque vidéo générée, afin de pouvoir remonter la piste de chacune des générations.

En résumé : la marche à suivre

Si vous êtes en Europe et que vous voulez vraiment accéder à Sora 2 maintenant malgré les risques, voici comment ça fonctionne avec Surfshark :

  1. Installez l’application Surfshark VPN sur votre appareil
  2. Connectez-vous à un serveur US ou canadien (choisissez-en un avec une faible latence)
  3. Créez un compte Apple américain comme expliqué plus haut
  4. Installez l’app Sora via l’App Store US
  5. Normalement, vous passerez le geo-blocking sans problème

Avec Surfshark, vous bénéficiez non seulement d’un accès fiable à Sora 2, mais aussi d’une protection complète pour toute votre navigation. À environ 3 € par mois pour une sécurité sur un nombre illimité d’appareils, c’est clairement l’une des meilleures options du marché.

Ou sinon, vous attendez sagement qu’OpenAI déploie officiellement son service en Europe mais faudra être encore un peu patient.

Essayer Surfshark VPN maintenant

OpenAI Sora - Obligés d'opt-out pour protéger vos droits

OpenAI vient de lancer Sora 2 , son générateur de vidéos par IA et le truc, c’est que si vous êtes créateur de contenu, vous devez opt-out manuellement pour éviter que vos œuvres servent à entraîner le modèle. Pas d’opt-in par défaut, pas de respect automatique du droit d’auteur. C’est à vous de faire la démarche pour dire non.

Selon Cartoon Brew , la politique d’OpenAI oblige donc les détenteurs de droits à signaler chaque violation spécifique. Pas de formulaire global genre “je refuse que vous utilisiez mes trucs”. Non, vous devez rapporter chaque contenu un par un si vous le trouvez dans les datasets d’entraînement…

Le problème, c’est que personne sait vraiment ce qu’OpenAI a utilisé pour entraîner Sora. Il y a des rumeurs sur l’utilisation massive de vidéos YouTube, de contenus de jeux vidéo, de films, mais OpenAI reste hyper flou sur les sources. Du coup, comment vous voulez opt-out de quelque chose dont vous ignorez l’existence dans leur base de données d’entrainement ?

Et malheureusement, cette approche opt-out est la norme chez les géants de l’IA… Meta, Google, OpenAI, tous adoptent le même principe qui est on prend d’abord, et vous vous opposez après si vous avez le courage. Le fardeau de la preuve et de la protection repose donc sur les créateurs, et pas sur les entreprises qui exploitent les contenus. De quoi faire encore grincer des dents !

Maintenant, pour les personnalités publiques, OpenAI a mis en place un système de cameo … Cela veut dire que si quelqu’un veut générer une vidéo avec votre visage ou votre voix, il faut votre permission explicite. C’est un début, mais ça ne couvre que les cas évidents… Il n’y a rien de tel par exemple pour les styles artistiques, les techniques de réalisation, les univers visuels créés par des artistes et j’en passe…

Bref, les experts juridiques commencent donc à s’inquiéter car ce modèle d’opt-out pose des problèmes de droit d’auteur majeurs, surtout dans des pays comme la France où le droit moral est inaliénable. Vous ne pouvez pas par exemple renoncer à vos droits d’auteur même si vous le voulez. Donc comment une politique opt-out peut-elle être légale alors qu’elle force la main aux créateurs pour abandonner leurs droits par défaut ?

Et la situation devient encore plus complexe avec les contenus sous licence restrictive car des chaînes YouTube ont des CGU qui interdisent l’utilisation commerciale de leurs vidéos et les jeux vidéos ont des EULA qui limitent l’exploitation de leurs assets. Cela veut donc dire que Sora s’assoit sur tout ça en considérant que l’absence d’opt-out équivaut à un consentement.

Pour sa défense, OpenAI nous explique que l’entraînement d’IA relève du fair use aux États-Unis mais le problème, c’est que cette jurisprudence n’existe pas partout. En Europe par exemple, le règlement sur l’IA impose des obligations de transparence et de traçabilité sur les données d’entraînement et OpenAI le sait très bien et joue avec ce flou entre les différentes juridictions.

Puis ce système de signalement proposé par OpenAI est aussi hyper critiquable car c’est, comme je vous l’expliquais, à vous de prouver que votre contenu a été utilisé pour l’entraînement. Mais alors comment faire quand les datasets ne sont pas publics ??? Comment vérifier que Sora a bien appris à partir de vos vidéos si vous n’avez pas accès aux données d’entraînement ???

Certains créateurs envisagent donc déjà des recours collectifs car si OpenAI a effectivement utilisé des millions de vidéos YouTube sans autorisation, ce serait une violation massives du droit d’auteur… Est-ce que développer une IA générative justifie de récupérer tout ce travail créatif humain sans apporter ni compensation ni consentement ?

OpenAI sembler penser que oui et mise sur l’inertie des créateurs et la complexité de ses démarches d’opt-out pour continuer son petit business…

Mais en attendant, si vous voulez protéger vos créations de Sora, vous devez aller sur le site d’OpenAI, trouver le formulaire de signalement , prouver que vous êtes le détenteur des droits, identifier chaque contenu concerné, et espérer qu’OpenAI respecte votre demande.

C’est donc la lose pour les créateurs, c’est sûr. Comme je le disais dans un de mes précédents articles sur le sujet, ce dont on a besoin maintenant c’est de cohérence et de clarté au niveau des lois, car là on discute des détails mais la question du “vol” par ces GAMMO (Google / Anthropic / Meta / Microsoft / OpenAI) n’est pas vraiment tranchée au niveau de la loi. J’ai l’impression que ça traine et que personne n’est pressé de trancher la question car ça arrange bien tout le monde (sauf les créateurs).

❌