Recipe2Video, de A à Z
#16 - Ou comment j'ai assemblé Cursor SDK et Runway pour industrialiser mes vidéos de recettes
Bonjour !
La semaine dernière, je t’expliquais pourquoi j’avais construit Recipe2Video pendant le hackathon Runway. Cette semaine, on rentre dans les détails : comment c’est construit, comment ça tourne, et ce que Seedance 2.0 a vraiment changé dans ma façon de travailler.
C'est une édition un peu plus technique que d'habitude. Mais je pense que même si tu ne codes pas, les grands principes valent le coup d'être compris.
Si ce n’est pas déjà le cas, tu peux aussi :
Me suivre sur Linkedin, où je publie des posts complémentaires,
Découvrir les services que je propose, notamment dans le secteur de la finance…
… mais pas encore découvrir Licorn, ma nouvelle boîte.
Allez, c’est parti !
Au programme
Deux repos GitHub, pas un — et pourquoi
L’agent créatif persistant (Cursor SDK)
Le pipeline : Inngest + Runway + Supabase + Mux
Seedance 2.0 — le game changer
L’assemblage final : Remotion + Suno
Ce que ça m’a vraiment coûté
Deux repos GitHub, pas un
Recipe2Video repose sur deux dépôts séparés.
Le premier, recipe2video, c’est l’application : le cockpit de production, l’interface, toute la logique métier, les appels API.
Le deuxième, recipe2video-agent-workspace, c’est le workspace des agents Cursor SDK. Il ne contient pas de code applicatif. C’est uniquement l’espace de travail dans lequel les agents créatifs opèrent — ils y lisent leurs instructions, et y écrivent les artefacts qu’ils produisent.

Pourquoi cette séparation ?
Le Cursor SDK est encore très récent. Et à ce stade, son API de récupération des artefacts produits par l’agent est limitée. En pratique, il n’était pas simple de récupérer depuis l’application les fichiers que l’agent venait d’écrire.
La solution : l’agent push ses fichiers dans son repo GitHub courant. Et l’API GitHub, elle, est bien plus riche pour aller récupérer ces fichiers. C’est un contournement propre — on utilise le Cursor SDK pour la puissance des agents, et l’API GitHub pour la récupération des livrables. Le meilleur des deux mondes, en attendant que le SDK évolue.
L’agent créatif persistant
Pour chaque recette, l’application crée un agent Cursor SDK dédié, qui tourne dans son propre workspace.
Ce que cet agent produit :
Un storyboard de 30 à 48 scènes éditorielles ;
Les segments Seedance compressés (5 à 10 segments de génération), contenant chacun une séquence de shots qui vont ensemble (les parties d’une étape d’une recette) ;
Un plan de références visuelles (pour garder une consistance entre les vidéos, comme un influenceur culinaire qui se filmerait dans sa cuisine) ;
Un prompt Suno pour la musique.


Ce qu’il ne touche pas : la base de données, les credentials Runway, Supabase, Mux — rien. C’est délibéré. L’agent est un cerveau créatif, pas un exécutant technique. Il produit des fichiers structurés, l’application les valide, les intègre, et prend la suite.
Le pipeline : Inngest + Runway + Supabase + Mux
Une fois le storyboard validé et les références approuvées, la génération peut démarrer.
Inngest orchestre les tâches en background. Concrètement : je peux lancer la génération de plusieurs segments, fermer l’onglet, aller sur un autre projet, et revenir plus tard voir les résultats. Rien ne se perd.

Les vidéos sont générées via l’API Runway avec le modèle Seedance 2.0 en References mode. Dès qu’un clip arrive, il est immédiatement téléchargé et stocké dans Supabase Storage (chez AWS). C’est important : les URLs de sortie de Runway sont temporaires. Si on ne persiste pas le fichier rapidement, il disparaît. Supabase Storage est la source de vérité durable.
Mux reçoit ensuite une copie pour la lecture et la review dans l’interface. On peut comparer des variantes du même segment, voir le prompt, les références, le coût.
Seedance 2.0 — le game changer
C’est là que les choses ont vraiment changé pour moi.
Avant Seedance, le workflow ressemblait à ça :
je générais une image de référence,
je la passais à un modèle vidéo avec un prompt,
et j’espérais que le modèle fasse le lien.
Le meilleur résultat qu’on pouvait obtenir pour quelque chose de précis, c’était en définissant une first frame et une last frame — le modèle animait l’entre-deux. C’était quand même très dur. Il y avait toujours une déperdition entre ce que l’image montrait et ce que le modèle interprétait.
Seedance change ça fondamentalement. On peut passer jusqu’à 9 références images — et même des vidéos — directement dans le prompt de génération vidéo. En une seule passe. Sans passer par une étape image intermédiaire.
Résultat : la cuisine reste la même d’un segment à l’autre. Le personnage garde ses proportions, ses expressions, sa tenue. Les ustensiles sont reconnaissables. Ce niveau de cohérence était franchement difficile à tenir avant.
Voici un exemple de prompt Seedance pour une séquence (les @ correspondent aux références que je lui passe) :
Use @KitchenIslandDefault for global Licorn kitchen identity. Use @KitchenIslandOverhead for overhead countertop identity on râpé and riz. Use @InductionCloseup for hot pan close context. Use @SaucepanLarge only as pan shape. Use @Spatula only as tool shape. Use @CharacterSheet and @PoseTopDown for visible hands.
Generate exactly 7 short shots with hard cuts, total duration 6 seconds, no slow motion, no soft transitions, no extra shots. Vertical 1080:1920 TikTok food ASMR, no text on screen, no captions.
Integrated audio: no speech, no voiceover, no music; only synchronized kitchen ASMR.
Mandatory timing:
- 0.0-1.0s: parmesan showers as powder snow macro;
- 1.0-2.0s: shallot cubes glassy piled payoff;
- 2.0-3.2s: butter foaming blond with fine bubbles;
- 3.2-4.2s: shallots glassy sweat without deep brown;
- 4.2-5.2s: dry risotto rice slides and toasts glossy in fat, grains still identifiable;
- 5.2-6.0s: quick rake with @Spatula showing chalk-to-gloss edge.
Global negatives: no mise-en-place parade, no cookbook text readable, no extra hands, no music, no voice.
Mandatory audio: fine grate tick; butter sizzle; rice clatter; spatula scrape softer ASMR.Ce qui reste difficile : la physique fine. Un caramel qui se casse en morceaux nets, de la pâte à choux qui gonfle correctement, un geste précis avec un ustensile. Sur ces points, le modèle interprète encore beaucoup — et c’est là que la boucle de feedback de l’application prend tout son sens : on décrit ce qui cloche en langage naturel, l’agent réécrit le prompt, on voit le diff, on approuve, on régénère ce segment uniquement.
Et j’ai aussi prévu une sauvegarde des diffs et une vectorisation de ces infos, pour intégrer l’amélioration et l’apprentissage continu de mes agents Cursor.
Ce que je pense : on est à l’aube de quelque chose. Seedance a montré que le References mode ouvre une nouvelle ère pour la cohérence des personnages et des décors. Les autres modèles vont suivre, les références vidéo vont s’améliorer, et les possibilités vont exploser. Ce n’est que le début.
L’assemblage final : Remotion + Suno
Pour l’assemblage, j’ai abandonné CapCut.
CapCut est une usine à gaz. C’est très bien si tu fais des vidéos variées avec des besoins changeants. Mais mon cas d’usage est très spécifique : monter des vidéos en série, sur un format identique, à la chaîne. Pour ça, un éditeur généraliste est contre-productif.
J’ai donc intégré Remotion directement dans l’application, avec une timeline construite pour ce besoin précis. Je place les segments, j’ajuste les durées, j’uploade le fichier audio Suno, et je prévisualise l’ensemble avant d’exporter.

Pour Suno : il n’existe pas d’API officielle. L’application, via mon agent Cursor, génère le prompt musical à partir de la recette — tempo, ambiance, instrumentation suggérée — je le copie, je génère la musique manuellement dans Suno, et j’uploade le fichier audio dans le projet. Pas parfait, mais suffisant pour le workflow actuel.
Ce que ça m’a vraiment coûté
Je préfère te donner les vrais chiffres. C’est plus concret.
Pour développer l’application, j’ai utilisé ma licence Cursor Ultra (200$/mois). Le hasard a fait que je n’avais quasi pas utilisé mon quota d’avril (j’ai passé la deuxième quinzaine d’avril à faire de l’admin). Résultat : j’ai eu un mois d’avril presque intact plus la moitié de ma licence de mai pour construire Recipe2Video. Soit environ 1,5 mois de licence Cursor Ultra, l’équivalent de ~600$ de crédit API, ou environ 300$ au tarif licence.
En face : 500$ de crédits Runway offerts par le hackathon, qui me permettront de générer une vingtaine de vidéos.
J’ai donc échangé 300$ de Cursor contre 500$ de Runway. Et en plus, j’ai une application fonctionnelle qui va continuer à tourner bien après que les crédits du hackathon seront épuisés.
Je n’ai clairement pas perdu au change.
Le mot de la fin
C’est carrément excitant ce qu’on vit actuellement, où l’on peut se permettre de faire des choses qu’on n’aurait jamais imaginées avant. En termes de possibilités de création, de marketing, ou juste d’outils… c’est fou ce qu’on peut faire soi-même désormais avec des agents IA.
Avant, il aurait fallu l’acheter, et pour certaines choses on n’en aurait juste pas eu les moyens. Ce que tu pouvais faire avec 10 millions sur le compte en banque trois ans après ta création, tu peux le faire aujourd’hui pour quelques centaines de dollars dès le début.
Quel monde de dingue dans lequel monter une entreprise aujourd’hui !
Bonne semaine.
Yoann



