Claude Code + Blotato : Comment j'ai automatise l'integralite de mon pipeline de contenu
Jeudi dernier, j'ai mis en ligne une video de 22 minutes sur YouTube a propos de la construction d'equipes d'agents IA. En 40 minutes, j'avais neuf contenus specifiques a chaque plateforme dans un dossier de brouillons sur ma machine — trois publications LinkedIn avec un formatage professionnel, trois scripts de carrousel Instagram avec des decoupages slide par slide, et trois publications X avec des visuels de citations percutantes. Tout personnalise. Tout conforme a ma marque. Tout en attente de ma relecture avant publication.
Je n'en ai ecrit aucun manuellement.
Le systeme qui les a produits est un projet Claude Code avec quatre scripts Python, une integration avec l'API de Blotato et un concept auquel je reviens sans cesse : les skills. Pas du type vague "l'IA peut faire des choses". Du type specifique, documente et reproductible — ou chaque automatisation a un nom, un ensemble d'ingredients, une sequence d'etapes et un format de sortie attendu.
Construire tout cela m'a pris environ trois week-ends d'iteration. La premiere version etait honteusement cassee. Claude Code essayait sans cesse de recuperer les pages YouTube directement et se heurtait aux murs de detection de bots. La generation d'images produisait des PNG surdimensionnes que l'API de Blotato rejetait. Mes ressources de marque ne se chargeaient pas parce que j'avais code en dur des chemins qui n'existaient que sur ma machine de travail.
Mais chaque echec a appris quelque chose au systeme — et c'est la partie que personne n'explique quand on travaille avec Claude Code pour l'automatisation. L'IA n'execute pas simplement vos instructions. Elle observe ce qui casse, propose des corrections et met a jour ses propres documents de skills pour que la meme erreur ne se reproduise pas.
Je veux vous guider exactement a travers le fonctionnement de ce pipeline, parce que le multiplicateur de contenu 9x qu'il cree a veritablement change ma facon de penser la publication. Mais d'abord, vous devez comprendre pourquoi j'ai abandonne trois autres outils avant d'arriver a cette approche.
Pourquoi les outils de reutilisation n'arretaient pas de me decevoir
J'ai essaye Repurpose.io, le prompting manuel avec ChatGPT, et un outil appele ContentFries qui promettait "une video, du contenu illimite". Ils avaient tous le meme probleme : ils traitaient chaque plateforme de la meme maniere.
La publication LinkedIn ressemblait a un tweet avec des paragraphes en plus. Les publications X etaient des versions tronquees de ce que l'outil generait en premier. Aucune intelligence de plateforme — aucune comprehension que les audiences LinkedIn veulent des frameworks professionnels tandis que les audiences X veulent une prise de position percutante qu'ils peuvent retweeter.
La coherence de marque etait le deuxieme echec. Ma photo de profil, mon badge de verification, ma palette de couleurs — aucun de ces outils ne me permettait d'injecter des ressources de marque. Chaque resultat avait l'air generique. Je passais 20 minutes par publication a ajuster manuellement le ton et le formatage. Vingt minutes fois neuf publications fois quatre videos par mois. Douze heures de travail mecanique sur du contenu que j'avais deja cree une fois.
Le troisieme probleme m'a pousse a construire mon propre systeme : le workflow d'approbation. Ou plutot, son absence. Ces outils voulaient publier automatiquement directement sur mes comptes sans etape de revision. Je m'etais deja fait avoir — un outil de planification avait une fois publie un brouillon avec "INSERER STATISTIQUE PERTINENTE ICI" aupres de 14 000 abonnes LinkedIn. Les commentaires etaient... educatifs.
J'avais besoin de trois choses : une intelligence de contenu specifique par plateforme, une integration des ressources de marque et une revision humaine obligatoire. Claude Code et Blotato m'ont donne les trois.
Ce qui rend une "Skill" differente d'un prompt
Si vous suivez mes ecrits sur les workflows d'agents Claude Code, vous savez que je considere les skills comme l'unite fondamentale de l'automatisation IA. Mais ce projet m'a oblige a etre beaucoup plus precis sur ce que cela signifie reellement.
Un prompt est une instruction a usage unique. "Ecris-moi une publication LinkedIn sur cette video." Vous le tapez, l'IA repond, et l'interaction est terminee. Si le resultat est mauvais, vous revisez le prompt et reessayez. La connaissance de ce qui fonctionne reste dans votre tete.
Une skill est une recette documentee. Elle comporte quatre composants :
Nom : Un identifiant clair. Les miennes s'appellent youtube-to-linkedin, youtube-to-instagram-carousel, youtube-to-x-quote.
Ingredients : Les entrees dont la skill a besoin avant de pouvoir s'executer. Pour youtube-to-linkedin, les ingredients sont : transcription de la video (texte brut), titre de la video, URL de la video, descripteur d'audience cible et chemin du repertoire des ressources de marque.
Etapes : La sequence ordonnee des operations. Pas des instructions vagues — des etapes specifiques et testables. "Extraire les trois declarations les plus citables de la transcription" est une etape. "Faire en sorte que ca sonne professionnel" n'en est pas une.
Resultat attendu : Le format et la structure exacte de ce qui sort. Pour la skill LinkedIn, le resultat attendu est un fichier markdown avec une ligne d'accroche (moins de 200 caracteres), une section corps (150-300 mots), trois hashtags et un CTA avec un lien vers la video complete.
La difference compte parce que les skills sont iterables. Quand le resultat LinkedIn est trop long, je ne refais pas le prompt de zero. J'ajuste l'etape 4 du document de la skill — "Comprimer la section corps a moins de 250 mots tout en preservant toutes les references aux frameworks" — et chaque execution future reflete ce changement.
C'est ce que je veux dire quand je dis que l'IA s'autocorrige. Le document de skill est un artefact vivant. Claude Code le lit avant chaque execution, suit ses etapes, et quand quelque chose casse — une requete web est bloquee, une image depasse la limite de taille de Blotato — je mets a jour le document de la skill avec la correction. L'execution suivante fonctionne correctement. Le systeme devient plus intelligent a chaque echec.
Mon projet compte actuellement sept documents de skills. Trois pour la generation de contenu (un par plateforme), deux pour la creation d'images (infographie LinkedIn et visuel de citation X), un pour l'extraction de transcription et un pour le workflow d'approbation. Chacun a commence brut et s'est ameliore par l'usage reel.
Cette boucle iterative — executer, echouer, corriger la skill, re-executer — est le veritable secret pour rendre l'automatisation IA fiable. Pas de meilleurs prompts. De meilleurs processus documentes.
Maintenant, laissez-moi vous montrer la structure du projet qui fait tenir tout cela ensemble.
La structure du projet qui fait tout fonctionner
Je fais tourner tout ce systeme depuis un seul projet VS Code. Voici a quoi ressemble le repertoire :
content-repurposer/
claude.md
scripts/
extract_transcript.py
generate_content.py
create_visuals.py
submit_to_blotato.py
skills/
youtube-to-linkedin.md
youtube-to-instagram-carousel.md
youtube-to-x-quote.md
linkedin-infographic.md
x-quote-visual.md
transcript-extraction.md
approval-workflow.md
drafts/
linkedin/
instagram/
x/
brand-assets/
profile-pic-square.png
profile-pic-round.png
verified-badge.png
color-palette.json
fonts/
approved/
linkedin/
instagram/
x/
.env
Quelques points a noter.
Le fichier claude.md a la racine est le prompt systeme pour Claude Code. C'est le cerveau de l'operation — il dit a Claude Code ce que fait ce projet, quelles skills sont disponibles et quelles contraintes suivre. Je maintiens le mien en dessous de 150 lignes. C'est une regle stricte que j'ai apprise par une experimentation douloureuse. Depassez 150 lignes et Claude Code commence a perdre le contexte sur les instructions les moins mises en avant. Le modele a largement la capacite, mais le ratio signal/bruit dans votre prompt systeme compte enormement.
Voici une version simplifiee de mon claude.md :
# Content Repurposer
## Purpose
Transform YouTube video content into platform-specific
social media posts for LinkedIn, Instagram, and X.
## Available Skills
- transcript-extraction: Get plain text from YouTube videos
- youtube-to-linkedin: Professional long-form posts
- youtube-to-instagram-carousel: Educational carousel scripts
- youtube-to-x-quote: Casual quote-style posts
## Constraints
- NEVER auto-publish. All content goes to drafts/ first.
- ALWAYS use brand assets from brand-assets/ directory.
- Image files must be under 4MB for Blotato API.
- LinkedIn posts: 150-300 words, professional tone.
- Instagram carousels: 5-8 slides, educational tone.
- X posts: Under 280 characters, casual tone.
## API Configuration
- Anthropic API via .env (ANTHROPIC_API_KEY)
- Blotato API via .env (BLOTATO_API_KEY)
- OpenRouter as fallback (OPENROUTER_API_KEY)
Le repertoire scripts/ contient quatre fichiers Python. Chacun gere une phase specifique du pipeline. J'utilise Python parce que Claude Code genere du Python fiable plus vite que tout autre langage dans mes tests, et l'ecosysteme de bibliotheques pour les appels API et la manipulation d'images est sans pareil.
Les repertoires drafts/ et approved/ sont les deux etapes du workflow d'approbation. Le contenu commence dans drafts/. Je le revois. Le contenu approuve est deplace dans approved/. Seul le contenu dans approved/ est soumis a Blotato pour planification.
Le repertoire brand-assets/ est etonnamment important. Sans lui, chaque visuel genere a l'air generique. Avec lui, Claude Code peut superposer ma photo de profil, appliquer ma palette de couleurs et inclure des elements de marque qui donnent aux publications sociales l'apparence d'avoir ete concues par un designer humain — pas par un script.
Cette integration des ressources de marque a ete l'une des choses les plus difficiles a reussir. Laissez-moi vous montrer pourquoi, et comment l'IA a fini par resoudre son propre probleme.
Configuration de la couche API : Anthropic et Blotato
Avant qu'un contenu ne soit genere, deux APIs doivent etre connectees. L'API Anthropic Claude gere toute l'intelligence — analyser les transcriptions, generer du texte specifique par plateforme, prendre des decisions creatives sur les accroches et le formatage. Blotato gere la distribution — planifier les publications, gerer les connexions aux plateformes et gerer la complexite OAuth pour publier sur LinkedIn, Instagram et X.
Voici ma configuration .env :
ANTHROPIC_API_KEY=sk-ant-api03-xxxxx
BLOTATO_API_KEY=bl_xxxxx
OPENROUTER_API_KEY=sk-or-xxxxx
BLOTATO_WORKSPACE_ID=ws_xxxxx
DEFAULT_SCHEDULE_OFFSET_HOURS=24
La cle OpenRouter est un fallback. Quand j'itere rapidement et que je consomme beaucoup de credits API Anthropic pendant le developpement, je redirige certains appels moins critiques — comme les ajustements de formatage ou la generation de hashtags — via l'acces d'OpenRouter a Claude 3.5 Sonnet, qui est moins cher par token. Le gros du travail — analyse de transcription, generation de contenu, ajustement du ton — passe toujours directement par l'API Anthropic pour la qualite.
La configuration de Blotato etait simple mais necessitait une sequence specifique. Vous creez un workspace, connectez vos comptes sociaux via le flux OAuth de Blotato (cela se passe dans leur tableau de bord web, pas via l'API), puis vous recuperez votre ID de workspace et votre cle API. La cle API est scopee a ce workspace, donc tous vos comptes connectes sont accessibles via une seule cle.
Voici la fonction Python que j'utilise pour verifier la connexion :
import requests
import os
from dotenv import load_dotenv
load_dotenv()
def verify_blotato_connection():
"""Check that Blotato API is reachable and workspace is valid."""
headers = {
"Authorization": f"Bearer {os.getenv('BLOTATO_API_KEY')}",
"Content-Type": "application/json"
}
response = requests.get(
f"https://api.blotato.com/v1/workspaces/{os.getenv('BLOTATO_WORKSPACE_ID')}",
headers=headers
)
if response.status_code == 200:
data = response.json()
print(f"Connected: {data['name']}")
print(f"Accounts: {len(data['accounts'])} linked")
return True
else:
print(f"Connection failed: {response.status_code}")
return False
Une chose que j'ai apprise : l'endpoint d'upload d'images de Blotato a une limite de 4 Mo par fichier. Mes premieres tentatives de generation visuelle produisaient des PNG de 6-8 Mo parce que je rendais a haute resolution sans compression. Claude Code a detecte cela pendant les tests — l'API a retourne une erreur 413 — et a automatiquement mis a jour la skill linkedin-infographic.md pour inclure une etape de compression d'image : "Apres avoir genere le visuel, comprimer en JPEG a 85% de qualite. Verifier que la taille du fichier est inferieure a 4 Mo avant l'envoi."
C'est la boucle d'amelioration iterative en action. Le document de la skill porte desormais la correction de maniere permanente.
Si vous preferez que quelqu'un construise ce type de configuration d'automatisation de zero, j'accepte des missions personnalisees de workflows IA. Vous pouvez voir ce que j'ai construit sur fiverr.com/s/EgxYmWD.
Mais la couche API n'est que de la plomberie. La vraie magie — la partie qui rend le contenu reellement bon — se passe dans les skills de generation specifiques par plateforme.
Generation de contenu specifique par plateforme : trois audiences, trois strategies
C'est la ou la plupart de la reutilisation de contenu echoue. Les gens prennent un contenu et le reformatent legerement pour chaque plateforme. Ce n'est pas de la reutilisation. C'est du copier-coller avec des limites de caracteres differentes.
La vraie reutilisation signifie reimaginer les memes idees centrales pour des audiences et des contextes de consommation fondamentalement differents. Voici comment chaque skill de plateforme fonctionne.
Comment la skill LinkedIn genere-t-elle des publications professionnelles ?
Les audiences LinkedIn naviguent pendant les heures de travail. Elles cherchent des insights professionnels, des frameworks qu'elles peuvent appliquer a leur travail, et du contenu qui les fait paraitre reflechies si elles le partagent. Le mode de consommation est delibere — les gens lisent les publications LinkedIn avec plus d'attention que les tweets.
Ma skill youtube-to-linkedin.md suit cette structure :
Etape 1 : Extraire les trois insights les plus pertinents pour l'industrie de la transcription. Ignorer les anecdotes personnelles, les blagues et le remplissage. Se concentrer sur les frameworks, les donnees et les decouvertes contre-intuitives.
Etape 2 : Ecrire une ligne d'accroche de moins de 200 caracteres qui remet en question une hypothese courante ou promet un resultat specifique. Ne jamais commencer par "Je viens de publier une nouvelle video" — personne ne se soucie de votre calendrier de publication.
Etape 3 : Structurer le corps comme un mini-framework. L'algorithme de LinkedIn recompense les publications qui semblent structurees — listes numerotees, titres en gras et conclusions claires obtiennent plus d'engagement que les paragraphes narratifs.
Etape 4 : Terminer par une question qui invite les commentaires. Pas "Qu'en pensez-vous ?" — c'est paresseux. Quelque chose de specifique : "Quelle est la chose la plus contre-intuitive que vous avez apprise sur [sujet] en production ?"
Etape 5 : Ajouter trois hashtags. Deux larges (#AIEngineering, #SoftwareDevelopment), un specifique (#ClaudeCode). Jamais plus de trois — LinkedIn penalise le bourrage de hashtags.
Etape 6 : Generer un visuel de style infographique en utilisant la skill visuelle linkedin-infographic.md. Cela recupere ma photo de profil dans brand-assets/, applique ma palette de couleurs et cree un graphique epure qui met en valeur le framework central de la publication.
La generation visuelle a ete un defi que je n'avais pas anticipe. Ma premiere approche utilisait Claude Code pour generer du HTML, le rendre en image avec un navigateur headless et sauvegarder le PNG. Ca fonctionnait, mais les images avaient l'air steriles. La percee est venue quand j'ai ajoute mon color-palette.json aux ressources de marque :
{
"primary": "#1a1a2e",
"secondary": "#16213e",
"accent": "#0f3460",
"highlight": "#e94560",
"text_light": "#ffffff",
"text_dark": "#1a1a2e",
"background": "#f5f5f5"
}
Avec ces couleurs chargees, les infographies generees sont passees de "art generique d'IA" a "on dirait que ca vient de mon systeme de design". Petit detail, enorme difference en termes de professionnalisme percu.
Carrousel Instagram : slides educatifs avec identite de marque
Instagram est une bete completement differente. Les gens scrollent vite, generalement sur mobile, et s'arretent pour les visuels — pas le texte. Le format carrousel est la solution : chaque slide est suffisamment visuel pour capter l'attention, mais la mecanique de balayage recompense le contenu educatif qui se construit slide apres slide.
Ma skill youtube-to-instagram-carousel.md genere 5-8 slides avec cette structure :
Slide 1 (Accroche) : Une declaration audacieuse ou une question en grand texte sur un fond de marque. Utilise ma couleur d'accentuation (#e94560) et ma photo de profil dans le coin avec la superposition du badge de verification.
Slides 2-6 (Contenu) : Chaque slide couvre un point cle de la video. Maximum 40 mots par slide. La skill specifie : "Ecrivez au niveau de lecture d'un adolescent intelligent de 16 ans. Pas de jargon sans explication immediate. Un concept par slide."
Slide 7 (Resume) : Un recapitulatif rapide de tous les points dans un format condense.
Slide 8 (CTA) : "Suivez-moi pour plus d'analyses en ingenierie IA" avec ma photo de profil et mon nom d'utilisateur.
L'integration du badge de verification utilise Pillow pour composer ma photo de profil avec un verified-badge.png positionne dans le coin inferieur droit standard. Le script create_visuals.py charge les couleurs de marque depuis color-palette.json, cree des slides 1080x1080, superpose la photo de profil et le badge, rend le texte en Inter Bold a 48pt et ajoute un compteur de slides dans le coin.
def create_instagram_slide(text, slide_number, total_slides):
"""Generate a single Instagram carousel slide with brand assets."""
with open("brand-assets/color-palette.json") as f:
colors = json.load(f)
slide = Image.new("RGB", (1080, 1080), colors["primary"])
# Composite profile pic + verified badge
profile = Image.open("brand-assets/profile-pic-round.png").resize((80, 80))
slide.paste(profile, (40, 40), profile)
badge = Image.open("brand-assets/verified-badge.png").resize((24, 24))
slide.paste(badge, (96, 96), badge)
# Render slide text and counter
draw = ImageDraw.Draw(slide)
font = ImageFont.truetype("brand-assets/fonts/Inter-Bold.ttf", 48)
draw.text((80, 200), text, fill=colors["text_light"], font=font)
return slide
Chaque slide est sauvegarde dans drafts/instagram/ en tant que PNG separe avec la convention de nommage {date}_{slug_video}_slide_{numero}.png.
Publications X : visuels de citations decontractes qui sont retweetes
X (anciennement Twitter) est la plateforme ou la brievete l'emporte et la personnalite compte le plus. Personne ne partage un tweet au ton corporate. Les gens partagent des observations incisives, des prises de position surprenantes et des phrases citables.
Ma skill youtube-to-x-quote.md adopte une approche completement differente de LinkedIn et Instagram. Au lieu d'extraire des frameworks ou des analyses educatives, elle cherche trois choses dans la transcription :
- La phrase la plus citable. La ligne que quelqu'un capturerait en screenshot et partagerait.
- La prise de position la plus contrariante. Le moment ou j'ai dit quelque chose avec lequel la plupart des gens seraient en desaccord.
- La phrase pratique la plus concise. Un conseil si specifique et immediatement actionnable que les gens le mettent en favori.
Pour chacune, la skill genere deux sorties : le texte du tweet (moins de 280 caracteres, ton decontracte, pas de hashtags — ils font desespere sur X) et un visuel de citation. Le visuel de citation est une image simple de marque avec le texte de la citation dans une police grande et epuree sur mon fond de palette de couleurs, avec ma photo de profil et mon pseudo dans le coin.
L'exigence de ton decontracte est la partie la plus difficile a reussir. LinkedIn et Instagram tolerent une ecriture polie et quelque peu formelle. X la penalise. Mon document de skill inclut une section de calibrage du ton :
## Tone Rules for X
- Write like texting a smart friend, not presenting at a conference.
- Contractions always. "I've" not "I have." "Don't" not "Do not."
- OK to start sentences with "So" or "Look" or "Honestly."
- One emoji maximum per post. Zero is fine.
- Never use corporate phrases: "leverage," "synergy," "ecosystem."
- If the tweet sounds like it could appear in a press release, rewrite it.
Cette section de ton a ete revisee quatre fois. La version un sonnait comme du LinkedIn raccourci. La version deux a surcompense vers le registre adolescent. La version trois utilisait trop de points d'exclamation. La version quatre produit systematiquement des tweets qui sonnent comme quelque chose que j'ecrirais reellement a 23h apres avoir eu une opinion tranchee.
Voici ce qui m'a surpris dans la generation pour trois plateformes simultanement : l'insight LinkedIn, le decoupage Instagram et la prise de position percutante X sont trois expressions de la meme idee sous-jacente. Cette coherence est le vrai multiplicateur. Pas juste un volume 9x — un volume 9x avec des messages coherents.
Mais le volume ne signifie rien sans la qualite. C'est la que le workflow d'approbation gagne sa place.
Le workflow d'approbation manuelle : pourquoi je refuse d'autopublier
Je sais ce que vous pensez. "Tu as construit toute cette automatisation juste pour... toujours tout verifier manuellement ?"
Oui. Absolument. Et je recommencerais.
Voici ce que j'ai appris apres un an a faire tourner divers systemes d'automatisation de contenu : le cout de publier un mauvais post est superieur au cout de revoir vingt bons. Cet incident du placeholder LinkedIn que j'ai mentionne ? Il m'a fallu trois semaines pour retrouver le taux d'engagement sur mon profil. Trois semaines de publications regulierement bonnes pour defaire trente secondes de negligence automatisee.
Mon workflow d'approbation comporte trois etapes :
Etape 1 : Generation. Tout le contenu arrive dans drafts/. Chaque piece recoit un en-tete de metadonnees :
---
platform: linkedin
video_source: "Building AI Agent Teams - March 2026"
generated_at: 2026-03-15T14:23:00Z
status: draft
skill_version: youtube-to-linkedin-v4
---
Etape 2 : Revision. J'ouvre le dossier drafts/ — generalement une fois le matin, une fois le soir. Je lis chaque piece. Je verifie : exactitude factuelle, adequation du ton, coherence de marque et le test instinctif du "est-ce que je publierais reellement ca ?". Si ca passe, je le deplace vers approved/. Si ca necessite des modifications, j'edite directement ou je relance la skill avec des parametres ajustes.
Etape 3 : Planification. Seuls les fichiers dans approved/ sont soumis a Blotato. Le script submit_to_blotato.py scanne le repertoire approved/, uploade tout contenu qui n'a pas encore ete soumis et le planifie en fonction du DEFAULT_SCHEDULE_OFFSET_HOURS de la configuration de l'environnement.
def submit_approved_content():
"""Submit all approved, unsubmitted content to Blotato."""
approved_dir = Path("approved")
headers = {
"Authorization": f"Bearer {os.getenv('BLOTATO_API_KEY')}",
"Content-Type": "application/json"
}
for platform in ["linkedin", "instagram", "x"]:
for content_file in (approved_dir / platform).glob("*.md"):
# Skip already-submitted files (.submitted marker)
if content_file.with_suffix(".submitted").exists():
continue
metadata, body = parse_front_matter(content_file.read_text())
offset = int(os.getenv("DEFAULT_SCHEDULE_OFFSET_HOURS", 24))
schedule_time = datetime.utcnow() + timedelta(hours=offset)
payload = {
"workspace_id": os.getenv("BLOTATO_WORKSPACE_ID"),
"platform": platform,
"content": body.strip(),
"scheduled_at": schedule_time.isoformat() + "Z",
}
response = requests.post(
"https://api.blotato.com/v1/posts",
headers=headers, json=payload
)
if response.status_code == 201:
# Write marker to prevent double-posting
content_file.with_suffix(".submitted").write_text(
json.dumps({"blotato_post_id": response.json()["id"]})
)
Les fichiers marqueurs .submitted empechent la double publication — j'ai appris ca a mes depens quand une version anterieure a soumis la meme publication LinkedIn trois fois via un cron job sans verifications d'idempotence.
Ma session de revision typique prend 10-15 minutes pour un lot de neuf publications. J'approuve environ 80% au premier passage. Les 20% restants necessitent des modifications mineures — generalement un ajustement de ton ou une correction factuelle ou l'IA a paraphrase quelque chose de la video de maniere legerement inexacte.
Quinze minutes pour revoir neuf publications. Compare aux plus de deux heures qu'il me fallait pour les creer de zero. C'est le gain d'efficacite qui compte — pas eliminer l'humain completement, mais eliminer le travail mecanique et garder le jugement.
Comment Claude Code s'autocorrige : la boucle iterative qui rend tout ca fiable
J'ai mentionne plus tot que Claude Code apprend de ses echecs. Laissez-moi vous montrer exactement a quoi ca ressemble, parce que c'est la partie du workflow qui m'a le plus surpris.
Pendant ma deuxieme semaine de tests, la skill d'extraction de transcription a rencontre un mur. Claude Code essayait de recuperer les pages YouTube directement en utilisant la bibliotheque requests de Python et d'extraire la transcription du HTML. La detection de bots de YouTube l'a bloque immediatement.
Voici ce qui s'est passe dans le terminal de Claude Code :
> Running transcript-extraction skill...
> Fetching https://youtube.com/watch?v=xxxxx
> ERROR: 403 Forbidden - Bot detection triggered
> Analyzing failure...
> Updating skill: transcript-extraction.md
> Added step: "Use youtube-transcript-api library instead
> of direct page fetching. Install via pip if not present."
> Retrying with updated skill...
> Success: Transcript extracted (4,847 words)
Claude Code n'a pas simplement signale l'erreur. Il a diagnostique la cause, identifie une approche alternative, mis a jour le document de la skill avec la correction et relance. La skill transcript-extraction.md contient desormais une ligne qui dit : "Ne JAMAIS tenter de recuperer les pages YouTube directement. Toujours utiliser le package Python youtube-transcript-api pour l'extraction de transcription."
Cette correction est permanente. Chaque execution future utilise l'approche corrigee.
Un autre exemple : la generation d'images pour les infographies LinkedIn produisait initialement des images de 2400x2400 pixels — bien trop grandes pour la limite de 4 Mo d'upload de Blotato. Le premier echec a declenche cette sequence :
> Generating LinkedIn infographic...
> Uploading to Blotato...
> ERROR: 413 Payload Too Large (6.2MB)
> Analyzing failure...
> Updating skill: linkedin-infographic.md
> Added step: "After rendering, resize to 1200x1200
> and compress to JPEG at 85% quality.
> Verify file size < 4MB before upload."
> Regenerating with compression...
> Upload successful (1.8MB)
J'ai compte quatorze mises a jour de documents de skills qui provenaient d'echecs a l'execution. Quatorze problemes qui se sont resolus d'eux-memes. Chacun aurait ete une session de debogage manuelle — trouver l'erreur, comprendre la correction, se rappeler de l'appliquer la prochaine fois. A la place, le document de la skill porte la memoire institutionnelle.
C'est pourquoi je considere les skills comme des documents vivants. Ce ne sont pas des instructions statiques. C'est une base de connaissances qui grandit a chaque fois que quelque chose tourne mal. Apres trois semaines d'utilisation de ce pipeline, mes documents de skills sont nettement plus eprouves que les versions que j'avais initialement redigees. Les corrections de l'IA gerent souvent des cas limites que je n'aurais jamais anticipes.
Le bemol : Claude Code ne trouve pas toujours la bonne correction du premier coup. Environ 30% du temps, la correction initiale cree un nouveau probleme. La correction de compression d'image comprimait d'abord en JPEG a 50% de qualite, rendant le texte illisible. J'ai ajuste manuellement a 85%. Les corrections de l'IA sont de bons points de depart, pas des solutions infaillibles.
Faites confiance a la boucle. Verifiez le resultat.
Executer le pipeline complet : de la video aux publications planifiees
Bien, voici le moment ou tout se connecte. Vous avez vu la structure du projet, la configuration API, les skills de plateforme, le workflow d'approbation et la boucle d'autocorrection. Laissez-moi vous guider a travers une execution complete.
Etape 1 : J'ouvre le projet dans VS Code, lance Claude Code et colle l'URL YouTube. Claude Code lit la skill transcript-extraction.md et extrait la transcription complete en utilisant youtube-transcript-api.
Etape 2 : Trois skills de generation de contenu s'executent en sequence. Chacune lit la transcription, applique les regles specifiques a la plateforme et sauvegarde le resultat dans drafts/linkedin/, drafts/instagram/ ou drafts/x/.
Etape 3 : Les skills de generation visuelle se declenchent ensuite — infographie LinkedIn, slides de carrousel Instagram, visuels de citation X. Toutes puisent dans brand-assets/.
Etape 4 : J'ouvre drafts/, je revois tout, fais des modifications et deplace le contenu approuve vers approved/.
Etape 5 : python scripts/submit_to_blotato.py recupere tout ce qui se trouve dans approved/, planifie via l'API de Blotato et marque chaque fichier comme soumis.
Temps total de l'URL video au contenu planifie : environ 40 minutes, dont 15 minutes de revision. Pour une seule video de 20 minutes, j'obtiens trois publications LinkedIn (angles differents), trois ensembles de carrousel Instagram (sections differentes) et trois publications X (citation, prise de position contrariante, conseil pratique). Neuf pieces de contenu a partir d'une seule video.
C'est le multiplicateur 9x. Pas theorique. De la production reelle que j'execute chaque semaine.
Ce que j'ai mal fait et ce que je ferais differemment
Trois semaines d'utilisation en production, une reflexion honnete.
Le fichier claude.md est passe par cinq reecritures. Ma premiere version faisait 300 lignes — Claude Code ignorait la moitie des instructions. A 150 lignes, l'execution est devenue fiable. Avec les prompts systeme d'IA, moins c'est mieux. Supprimez tout ce qui n'est pas une contrainte stricte ou un contexte critique.
J'ai surconcu la generation d'images. Rendre du HTML en PNG avec Chromium headless etait lent et fragile. Passer a Pillow etait plus rapide, plus previsible et donnait un controle au pixel pres. Evitez completement le rendu par navigateur.
La qualite n'est pas uniforme entre les plateformes. Les publications LinkedIn atteignent environ 90% de ce que j'ecrirais manuellement. Les carrousels Instagram se situent autour de 80%. Les publications X varient de super a mediocre — l'ecriture decontractee en format court est genuinement plus difficile pour l'IA. Je suis toujours en train d'affiner ce document de skill.
Commencez avec une plateforme, pas trois. Construire simultanement signifiait que chaque session de debogage etait triplee. Si je recommencais, je perfectionnerais LinkedIn d'abord, puis je clonerais et adapterais pour Instagram et X.
Le workflow d'approbation est non negociable. J'ai essaye l'autopublication des posts X pendant une semaine. Deux sur quatorze avaient des problemes de ton que j'aurais detectes manuellement. Un faisait reference a une "mise a jour recente" qui datait de trois mois. La revision manuelle reste.
A quoi ca ressemble a grande echelle : les chiffres apres 30 jours
Apres avoir fait tourner ce pipeline pendant un mois complet avec des uploads hebdomadaires : quatre videos ont produit 36 pieces de contenu. Parmi celles-ci, 29 ont passe la revision du premier coup (taux d'approbation de 81%). Cinq necessitaient des modifications mineures. Deux que j'ai regenerees avec des parametres de skill ajustes. Temps hebdomadaire moyen : 40 minutes pour neuf publications.
Avant ce systeme, je passais 3-4 heures par semaine a reutiliser du contenu — quand je le faisais. L'amelioration de la regularite compte plus que le gain de temps. Je suis passe de publications sporadiques a neuf fois par semaine, chaque semaine, avec des messages conformes a la marque sur toutes les plateformes.
La plus grande surprise ? La coherence multiplateforme a genere plus de visites de profil que le volume brut. Quand quelqu'un voyait ma publication framework sur LinkedIn, puis le meme concept sous forme de citation percutante sur X une heure plus tard, la reconnaissance de patterns se declenchait. Plusieurs personnes m'ont envoye des DM disant "Je vois ton contenu partout." Ce n'etait pas un accident — neuf publications a partir d'une video, diffusees sur les plateformes en 48 heures.
Vous ne pouvez pas obtenir cette coherence avec la reutilisation manuelle, parce que la reutilisation manuelle se fait a des jours differents, avec des humeurs differentes et des niveaux d'effort differents. La reutilisation automatisee se fait en un lot, a partir d'une source, avec des parametres de qualite constants.
Ou cela va-t-il a partir d'ici ?
Trois extensions dans ma feuille de route. La generation parallelisee utilisant asyncio de Python pour reduire le temps de generation de 25 minutes a environ 10. Une boucle de feedback analytique qui alimente les donnees de performance des publications dans les documents de skills — si les CTA terminant par une question surpassent systematiquement les affirmations sur LinkedIn, la skill devrait l'apprendre automatiquement. Et l'integration newsletter comme quatrieme type de sortie, que l'architecture de skills supporte naturellement avec un nouveau fichier markdown.
L'architecture sous-jacente monte en charge parce que chaque nouvelle plateforme n'est qu'un nouveau document de skill. Le workflow d'approbation, les ressources de marque et l'integration Blotato restent les memes. C'est le pouvoir de construire sur des skills plutot que des scripts isoles — le systeme est modulaire par nature.
J'ai commence ce projet parce que j'en avais assez du travail mecanique de contenu. J'ai fini par repenser entierement la relation entre creer et distribuer du contenu. La creation est la partie difficile — la reflexion, l'enregistrement, l'explication. La distribution devrait etre automatique. Vos idees meritent d'atteindre chaque plateforme ou vit votre audience, dans le format que chaque plateforme recompense.
Une video. Neuf publications. Quarante minutes. Le systeme s'ameliore chaque semaine.
Quel est ce contenu que vous voulez toujours reutiliser mais pour lequel vous ne trouvez jamais le temps ? C'est votre premier document de skill.
Foire aux questions
Puis-je utiliser Claude Code et Blotato sans ecrire de scripts Python ?
Vous pouvez utiliser le terminal integre de Claude Code pour executer des commandes de skills individuelles sans scripts personnalises. Mais la couche Python gere la generation d'images, la gestion de fichiers et les appels API Blotato de maniere plus fiable que les commandes shell seules. Pour le pipeline complet, Python vaut la mise en place.
Combien coute la combinaison API Blotato et Anthropic par mois ?
Mes depenses API mensuelles se situent en moyenne entre 25 et 40 $ pour la generation de contenu de quatre videos. L'API Anthropic gere la generation lourde de texte (environ 15-25 $), et l'utilisation de l'API Blotato entre dans le tarif de leur plan standard. OpenRouter en fallback ajoute 5-10 $ pour les taches plus legeres. Pour un regard approfondi sur la gestion des couts d'API IA, consultez mon guide d'optimisation des couts d'agents IA.
Que se passe-t-il quand l'API de Blotato rejette une publication ?
Le script submit_to_blotato.py enregistre le rejet avec la reponse d'erreur complete. Causes courantes : images surdimensionnees (comprimer en dessous de 4 Mo), heures de planification invalides (doivent etre des timestamps futurs), ou tokens OAuth expires (se reauthentifier via le tableau de bord de Blotato). Le rejet n'affecte pas les autres publications du lot.
Comment garder le prompt systeme claude.md en dessous de 150 lignes ?
Concentrez-vous uniquement sur les contraintes et les skills disponibles. Supprimez les explications, exemples et contexte que Claude Code peut inferer. Chaque ligne doit etre soit une regle stricte ("JAMAIS autopublier") soit une reference a un document de skill qui contient les instructions detaillees. Deplacez tous les details d'implementation dans les fichiers de skills eux-memes.
Ce workflow supporte-t-il du contenu video dans des langues autres que l'anglais ?
La bibliotheque youtube-transcript-api supporte les transcriptions dans plusieurs langues. Les skills de generation de contenu auraient besoin de regles de ton specifiques par langue, mais l'architecture du pipeline reste identique. Je n'ai pas encore teste cela personnellement avec du contenu non anglophone — c'est dans ma liste pour le Q2 2026.
Let's Work Together
Looking to build AI systems, automate workflows, or scale your tech infrastructure? I'd love to help.
- Fiverr (custom builds & integrations): fiverr.com/s/EgxYmWD
- Portfolio: mejba.me
- Ramlit Limited (enterprise solutions): ramlit.com
- ColorPark (design & branding): colorpark.io
- xCyberSecurity (security services): xcybersecurity.io