Aller au contenu
Tous les travaux

ProduitsEn ligne

Keforo Studio

Vidéos publicitaires IA, visuels produit, voix off en darija et campagnes complètes pour l’e-commerce MENA, depuis un seul solde de crédits.

Statut
En ligne
Année
2025
Rôle
Fondateur

Le studio créatif des équipes e-commerce au Maroc et dans la région MENA. Décrivez un produit et obtenez des clips vidéo, des photos produit, des textes publicitaires en arabe, français ou anglais, des voix off en darija et des publicités vidéo complètes à plusieurs scènes, depuis un seul tableau de bord et un seul solde de crédits.

Ce que c'est

  • Une centaine d’actions cataloguées chez fal.ai, Replicate, OpenRouter et ElevenLabs, chacune avec son prix, son palier de plan et son schéma de paramètres : un nouveau modèle est une entrée de registre, pas un nouvel écran
  • Les crédits sont prélevés avant le travail et remboursés à l’identique en cas d’échec, depuis un solde à trois compartiments partagé par toute l’organisation
  • Les longs appels aux fournisseurs sortent de la requête HTTP : files BullMQ, petit pool de workers, statuts en WebSocket, chaque sortie copiée dans le stockage du studio
  • Un pipeline de campagne qui écrit un storyboard, attend la relecture, génère clips et voix off, puis compose une publicité 720p avec FFmpeg

Comment ça marche

Les règles que l’utilisateur rencontre, la vie d’une génération, le pipeline de campagne, le système de crédits, et pourquoi la pile est ce qu’elle est.

#Ce qu’il génère

Uniquement ce que le code fait tourner aujourd’hui. Chaque ligne ci-dessous est en production.

  • Vidéo. Clips texte-vers-vidéo et image-vers-vidéo de 4 à 12 secondes : Wan 2.5, Kling 2.6 Pro, Veo 3.1, Seedance 1.5, LTX 2.3, Hailuo-02. Veo et Seedance produisent leur propre son synchronisé ; les autres produisent des clips muets, sonorisés à la composition.
  • Image. Texte-vers-image, retouche, détourage, agrandissement, restauration de visages et packshots : la famille FLUX, Recraft v3, Nano Banana 2, Bria.
  • Voix et audio. Synthèse vocale dans de nombreuses langues dont la darija marocaine, courtes pistes musicales et transcription : ElevenLabs, CassetteAI, Whisper.
  • Texte. Assistants de chat et textes publicitaires en darija, français, arabe standard et anglais : Claude, GPT, Gemini et Mistral, via une seule passerelle.
  • Campagnes. Une publicité vidéo complète de 30 à 120 secondes assemblée à partir de clips et de voix off IA, avec un storyboard que vous relisez avant toute étape coûteuse.

Autour du studio : des projets qui regroupent les générations, une équipe avec des rôles qui partage un seul solde de crédits, et un portefeuille payable par carte via Stripe ou par virement en dirhams.

#Le formulaire vient du catalogue

Chaque modèle est une action dans un registre : son fournisseur, son identifiant de modèle, son coût en crédits, le plan minimum requis et les paramètres acceptés. Le studio construit le formulaire à partir de cette fiche.

Changez d’action et regardez les champs, le prix sur le bouton et le verrou de plan changer. Changez de plan pour voir le verrou se fermer. Rien ici n’est écrit à la main par modèle.

#Une génération, rejouée

Le chemin de chaque requête, qu’il s’agisse d’une image ou d’une scène de campagne. Les crédits sont prélevés d’abord, le job est mis en file, l’un des trois workers le réclame, le fournisseur tourne, la sortie est copiée dans le stockage du studio, et le navigateur est prévenu en WebSocket.

Keforo Studio · worker · ai-generation
inactif

Kling 2.6 Pro (Text to Video)

video.kling26_t2v · 43 crédits

Un flacon d’huile d’argan sur une table en bois, lumière du matin, lent travelling avant

Compartiment gratuit
12
Compartiment abonnement
1 540
Compartiment recharge
400
Solde
1 952
  1. 1POST /ai/generateaction activée, plan suffisant
  2. 2credits.deduct 4312 gratuits, puis 31 abonnement
  3. 3queue.add ai-generationjob durable, statut en file
  4. 4worker[2].claiml’un des trois workers, statut en cours
  5. 5fal.subscribe kling-video/v2.6/prol’appel au fournisseur, jusqu’à cinq minutes
  6. 6storage.import → r2://…/gen_8f2c.mp4copiée dans le stockage du studio, jamais liée en direct
  7. 7ws.emit generation.completedle navigateur l’apprend aussitôt

#Les règles que l’utilisateur ressent

  • Vous choisissez une action, pas un fournisseur. Le catalogue liste des actions comme « Kling 2.6 Pro, texte vers vidéo ». Chacune connaît son fournisseur, son identifiant de modèle, son coût, son palier et ses paramètres.
  • Le prix est sur le bouton. Chaque action a un coût fixe en crédits, affiché avant confirmation. Aucune surprise après coup.
  • Les crédits sont prélevés avant le travail. Si le solde est insuffisant, la requête échoue en 402 et rien n’est créé. Un job en file est un job payé.
  • Trois workers à la fois. Les appels aux fournisseurs bloquent jusqu’à cinq minutes, donc le pool est volontairement petit. Il plafonne l’argent engagé à un instant donné.
  • Les sorties nous appartiennent. Les URL des fournisseurs expirent. Chaque sortie est téléchargée dans le stockage du studio et servie depuis là.
  • L’échec rembourse, exactement. Une génération échouée rembourse les compartiments d’origine, d’après l’enregistrement du prélèvement. Elle ne peut pas rembourser deux fois.
  • Annuler seulement avant le départ. Une fois qu’un worker a réclamé la génération, l’appel au fournisseur ne peut plus être arrêté de l’extérieur.
  • Réessayer est une nouvelle génération. Il n’y a pas de relance automatique silencieuse, parce que chaque tentative coûte de l’argent réel chez le fournisseur.

#Le cycle des statuts

Tracé du diagramme

Quatre états visibles par l’utilisateur, et un cinquième pour un job annulé pendant qu’il attendait encore.

#Le trajet d’une requête dans le système

Tracé du diagramme

#Une campagne, du produit à la publicité

Une campagne transforme une description de produit en publicité vidéo 720p complète en cinq étapes, avec deux moments où un humain intervient : la relecture du storyboard, et une pause si une voix off échoue.

#Les règles à l’intérieur du pipeline

  • Le storyboard est un premier jet. Le pipeline s’arrête après lui. Modifiez une ligne, ajoutez ou supprimez des scènes, réordonnez-les ou réécrivez une seule scène avant toute étape coûteuse.
  • Le storyboard suit les règles du métier. La première scène accroche, la dernière est l’appel à l’action, la narration tourne autour de 2,5 mots par seconde, et un prompt de scène ne décrit jamais une personne qui parle, sinon le modèle vidéo génère sa propre parole et se bat avec la voix off.
  • Une seule réservation pour tout le job. Scènes × (clip + voix off) + composition + storyboard. Les sous-étapes n’ont pas de coût propre ; ce qui n’est pas utilisé est remboursé en une fois.
  • Les clips peuvent échouer, pas les voix. Un clip échoué est ignoré et la campagne continue. Une voix off échouée met la campagne en pause jusqu’à ce que vous la relanciez ou composiez sans elle.
  • Les voix off sont espacées. Trois secondes d’écart, avec une relance progressive en cas de conflit, parce que le fournisseur de voix refuse les requêtes simultanées sur un même compte.
  • La composition est locale et déterministe. FFmpeg ramène chaque clip en 1280×720 à 24 i/s, mixe le son du clip à 20 % sous la voix et enchaîne dans l’ordre du storyboard. Pas d’IA, pas de coût par campagne.

#Les crédits, en un seul solde

Les crédits sont la seule monnaie du produit. Un seul solde couvre vidéo, image, voix, texte et campagnes, et il appartient à l’organisation, pas à la personne : une équipe le partage.

  • Trois compartiments, un seul ordre. Les crédits gratuits partent en premier, puis ceux de l’abonnement mensuel, puis les recharges achetées. Chaque prélèvement note d’où vient quoi, ce qui rend possible un remboursement exact.
  • Les crédits mensuels se renouvellent avec un report. Chaque plan reporte un pourcentage des crédits d’abonnement non utilisés sur le mois suivant. Les crédits achetés n’expirent jamais.
  • Les modèles premium coûtent plus de crédits. Une image brouillon vaut 1 crédit ; une vidéo Wan 2.5 en vaut 31, Kling 2.6 Pro 43, Veo 3.1 193. L’utilisateur arbitre lui-même entre qualité et coût.
  • Les prix suivent le coût réel. Le coût réel du fournisseur est enregistré après chaque génération, les tarifs sont resynchronisés toutes les six heures, et un écart de plus de 10 % lève une alerte. Un administrateur peut changer un coût à chaud.
  • Deux façons de payer. Carte via Stripe pour les abonnements et les recharges, ou virement en dirhams avec des packs de crédits et des remises multi-mois, parce que la plupart des entreprises marocaines ne paient pas par carte.

Les prix des plans, les allocations mensuelles et les tarifs de recharge sont dans la note liée plus bas, datée, pour que cette page ne vieillisse pas.

#Pourquoi cette pile

Chaque choix est ancré dans quelque chose que le code doit faire.

  • Bun, pas Node. TypeScript de bout en bout, sans étape de build. Le même runtime sert l’API, fait tourner les workers et les scripts, et installe les dépendances. Une seule chaîne d’outils, des redémarrages rapides.
  • Hono. Petit, natif sur Bun, discret. Les routes sont déclarées comme des données avec leur rôle, leur schéma de validation et leur palier de limitation, si bien qu’une déclaration alimente le routeur, le contrôle de permission et la collection d’API générée.
  • MongoDB. Une génération stocke une copie de l’action dont elle est issue : un changement de prix ultérieur ne peut pas toucher un job déjà payé. Chaque action porte un schéma JSON de ses paramètres, c’est le formulaire essayé plus haut.
  • Redis et BullMQ. Un appel au fournisseur prend de dix secondes à cinq minutes et ne peut pas vivre dans une requête HTTP. BullMQ apporte une file durable, une réclamation qu’un seul worker peut gagner, un plafond de concurrence et aucune relance automatique, parce qu’une relance coûte de l’argent.
  • WebSocket, pas de polling. Le worker attend le fournisseur et rend compte lui-même ; l’API pousse les statuts sur une socket partagée avec le port HTTP. Pas de rappel fournisseur, un seul chemin de code.
  • Une passerelle pour les modèles de langage. Tous les appels de chat, de rédaction et de storyboard passent par OpenRouter : Claude, GPT, Gemini et Mistral sont des entrées de catalogue qui ne diffèrent que par un slug.
  • fal.ai d’abord. Il héberge la plupart des modèles vidéo et image derrière une seule API et publie ses tarifs en direct, ce qui rend possible le suivi du coût par génération.
  • Notre propre stockage. Les liens des fournisseurs expirent. Chaque sortie est retéléchargée dans un stockage compatible S3 sous le préfixe de l’organisation et servie depuis là.
  • FFmpeg sur le serveur. Assembler des clips et mixer le son est un travail déterministe. Le faire en local ne coûte rien par campagne et se comporte pareil à chaque fois.
  • Des crédits plutôt que des quotas de vidéos. Un seul solde fonctionne pour tous les médias, les modèles premium coûtent simplement plus, les campagnes sont la somme de leurs parties, et les marges sont protégées par modèle plutôt que par plan.

#Pas encore là

  • Le clonage de voix est catalogué mais le parcours n’est pas construit ; les voix off en darija utilisent des voix multilingues.
  • Les images produit jointes à une campagne n’alimentent pas encore les clips en entrée image-vers-vidéo.
  • Les textes incrustés et les transitions sont dans le storyboard mais pas rendus ; les publicités composées sont des coupes franches.
  • Un éditeur UGC dans le navigateur, pour couper et remonter, est en cours.

#La note complète

La version longue, avec les diagrammes de génération et de campagne, le tableau des plans et le raisonnement derrière chaque choix.

Lire comment fonctionne Keforo Studio

Ça vous a parlé ?

Conversation