Machine 01/Documentation
Documentation technique

Machine 01 · Script Generator Shorts

Pipeline quotidien : scrape → Whisper → Claude → compliance → B-rolls. Ton, sources, coûts, reproduction.

Vue d'ensemble

Machine 01 produit chaque matin à 2h00 (Europe/Paris) 7 scripts de Reels Instagram / TikTok lus face caméra, prêts à être tournés. Elle consomme en entrée les signaux du web (Instagram, X, YouTube, RSS, Product Hunt) et les transcriptions audio des reels top-performants, puis elle les passe dans un prompt enrichi du Second Cerveau pour générer des scripts qui sonnent comme Romain.

7

Scripts / jour

58+

Sources scrappées

~0,90€

Coût par run

10 pts

Conforme

Pipeline complet

  1. 1

    Scrape multi-sources

    ~4-6 min

    Apify Instagram (14 comptes, filtre ≥10k vues, J-3), xAI Grok (20 posts X / 24h, 49 keywords IA), YouTube Data API (3 queries), 20+ flux RSS, Product Hunt daily. Résultat : jusqu'à 100+ signaux bruts stockés dans m01_signals.

  2. 2

    Whisper transcription

    ~3-5 min

    Top 30 reels (par score d'engagement) envoyés à Replicate Whisper pour récupérer le voice-over. Injection dans rawData.transcript du signal. Permet au LLM de voir ce qui a été dit, pas juste le titre.

  3. 3

    Second Cerveau chargé

    ~1 s

    12 fichiers chargés depuis GitHub Romstjames/cerveauvia l'API GitHub : tone-of-voice, voice-samples/instagram, hooks-putaclic, strategy, leads-magnets, etc. Liste configurable via UI Machine 01 → Réglages → Cerveau M01. Cache 5 min.

  4. 4

    Claude CLI génération

    ~45-90 s

    Le prompt system (cerveau + consignes machine depuis m01_prompt_config) + les signaux sélectionnés sont envoyés au CLI Claude via shell redirect (claude -p < file). 0€ d'APIgrâce à l'abonnement Max d'OAuth. Retourne un JSON avec 7 scripts complets (hook, body, cta, tool_name, broll_segments).

  5. 5

    Compliance 10 points

    ~15 s

    Checklist auto-évaluée par Claude (hook putaclic, anti-IA, tutoiement, mots évidence, parenthèses vécu, closer insight, chiffres, em dash absent, CTA 2-7 lettres, tutoiement strict). Score entre 0 et 10. Les scripts sous 7/10 sont flaggés pour révision.

  6. 6

    B-roll pool

    ~30-60 s / script

    Pour chaque script, récupération de B-rolls : CDN videos (deep crawl du site officiel de l'outil), X videos (Twitter syndication API, MP4 directs), Hyperframes (HTML+GSAP→MP4, à venir M02). Stocké en JSON dans m01_scripts.brollPool. YouTube désactivé par défaut (trop de faux positifs).

  7. 7

    Stockage + cleanup

    ~2 s

    Les 7 scripts atterrissent en m01_scripts (status draft). Signaux de la veille purgés pour ne pas polluer les runs suivants. Run loggé dans machine_runs.

Sources de signaux

Apify Instagram

~0,05€

14 comptes suivis, scraper officiel. Filtre ≥10k vues, J-3. Injection en DB + trigger Whisper sur top 30.

xAI Grok (X/Twitter)

~0,80€

20 posts / 24h, 49 keywords IA. Utilise aussi pour re-ranker les B-rolls via prompt dédié.

YouTube Data API v3

0€

3 queries (IA / automation / ecom), filtres CPC récents. Gratuit jusqu'à 10k quota/jour.

RSS feeds (x20+)

0€

Veille tech/IA : The Rundown, Ben's Bites, Batch, The Neuron, etc. Parser natif node-rss-parser.

Product Hunt

0€

Catégorie artificial-intelligence, posts du jour. API publique.

Replicate Whisper

~0,04€

Transcription audio des top 30 reels Instagram. Modèle large-v3.

Claude CLI — cœur de la machine

🎯 Pourquoi pas l'API Anthropic ?

L'abonnement Claude Max permet d'utiliser Claude à volonté via le CLI local sans facturation API. ~0,07€ / appel API → 0€ via CLI. Sur 7 scripts + compliance + B-roll ranking par jour, économie mensuelle ≈ 50€.

Invocation CRITIQUE: le CLI est appelé via shell redirect, PAS via Node spawn (le pipe buffer > 64Ko cause un deadlock).

// lib/claude-cli.ts
const cmd = `${CLAUDE_PATH} -p --allowed-tools '' < ${JSON.stringify(tmpFile)}`
const { stdout } = await execAsync(cmd, {
  timeout,
  maxBuffer: 50 * 1024 * 1024,
  env: minimalEnv,     // ANTHROPIC_API_KEY: undefined ← force OAuth
  cwd: os.tmpdir(),
  shell: process.env.SHELL || "/bin/bash",
})
  • CLAUDE_PATH auto-détecté : /Users/romainbrunel/.local/bin/claude (macOS) / /usr/bin/claude (VPS).
  • ANTHROPIC_API_KEY doit être UNSET, sinon le CLI bascule en mode API facturé.
  • --allowed-tools ''désactive le tool loop (pur LLM, pas d'agentic).
  • Env minimal (pas de vars Next.js/Turbopack qui hangent le CLI).
  • Pas de --dangerously-skip-permissions (refusé en root sur Linux).

Second Cerveau (source de vérité)

Le Cerveau est un repo GitHub privé (Romstjames/cerveau) contenant l'ADN éditorial de Romain. L'app lit les fichiers via l'API GitHub (PAT CERVEAU_GITHUB_TOKEN) et les injecte dans le system prompt. Cache 5 min.

Fichiers critiques par défaut (configurables via Réglages → Cerveau M01) :

  • • identity/tone-of-voice.md
  • • canals/instagram/voice.md
  • • canals/instagram/hooks.md
  • • canals/instagram/wiki.md
  • • knowledge/copywriting/wiki/masterclass.md
  • • canals/instagram/strategy.md
  • • products/leads-magnets.md + 4 fiches produits

Checklist compliance (10 points)

Claude auto-évalue chaque script contre 10 critères. Score = nombre de critères validés.

Hook suit un des 7 patterns (pas descriptif)
Hook 8 à 16 mots, une seule phrase
Aucun mot IA interdit (crucial, delve, découvre…)
Zéro em dash (— ou –)
Tutoiement 100%
≥1 mot d'évidence OU ≥1 parenthèse de vécu
Closer = insight, pas résumé
CTA keyword 2-7 lettres, pas le nom de l'outil
Chiffres en chiffres (14, pas « quatorze »)
Dernière phrase impactante

B-rolls — comment ça marche

Chaque script contient 5 à 8 broll_segments générés par le LLM (une phrase du script = un segment). Pour chaque segment, un pool de B-rolls est scrapé depuis 3 sources en parallèle :

CDN videos (screencasts outils)

Deep crawl du site officiel de l'outil (tool_name) via scraper maison. Cherche les vidéos MP4 en CDN. Fonctionne bien sur Vercel, Supabase, Notion, Anthropic, OpenAI, Claude, ElevenLabs, HeyGen.

Qualité pro, orientées démo~30% des outils n'ont pas de CDN directement exposé

X (Twitter) videos

Twitter syndication API (cdn.syndication.twimg.com) pour récupérer les MP4 directs. Recherche via xAI Grok avec prompt qui combine hook + body + tool_name. Filtre relevance ≥ 80.

Très récent, cinématiqueQualité variable, parfois hors-sujet

Hyperframes (à venir M02)

HTML + CSS + GSAP rendus en MP4 via Chromium headless. 40+ blocs disponibles (Instagram Follow, TikTok, X Post Card, Mac window, Code terminal...). Prérequis : Node ≥ 22 + FFmpeg.

100% sur-mesure, toujours pertinentPrompt engineering requis, plus lent (~2 min / B-roll)

Règle Romain

Ne jamais screenshoter les sites directement (Cloudflare bloque). Toujours passer par les CDN ou les videos tierces. Romain est TOUJOURS visible en bas de l'écran en talking head, donc il faut un visuel plein écran derrière lui pour chaque phrase.

Planification (4 crons)

HeureJobFichierRôle
02:00Pipeline M01m01-daily.sh → m01-daily.tsRun principal
02:30Watchdogm01-watchdog.sh3 retries si 0 scripts générés
03:00Backupbackup-daily.shDB + secrets + n8n, rotation 14j
04:00Safety netm01-safety-net.shDernier recours si watchdog échoue

Coûts quotidiens

ServiceCoût / run
Apify Instagram0,05 €
xAI Grok (scrape + B-roll x7)0,80 €
Whisper Replicate0,04 €
YouTube / RSS / GitHub0 €
Claude génération + compliance0 € (CLI)
Total par run~0,90 €
Mensuel estimé~27 €

Comment reproduire (fresh install)

  1. 1

    Cloner le repo + installer

    git clone git@github.com:Romstjames/affiseo-os.git && cd affiseo-os && npm install
  2. 2

    Configurer les API keys

    Aller dans /settings → API & Secrets. Toutes les clés nécessaires sont listées par catégorie, avec liens vers la doc de chaque fournisseur et explications pour obtenir chaque clé. Les copier aussi dans .env (les services runtime lisent process.env).

  3. 3

    Installer Claude CLI (0€)

    Puis claude login pour OAuth. Laisser ANTHROPIC_API_KEY UNSET.

    curl -fsSL https://claude.ai/install.sh | bash
  4. 4

    Initialiser la DB

    npx prisma migrate deploy && npx prisma generate
  5. 5

    Seeder les sources + Cerveau + API keys

    Démarrer l'app (npm run build && npm start), puis visiter /machines/01. Les tables m01_sources, m01_prompt_config, m01_cerveau_files et api_keys sont seedées automatiquement au premier accès.

  6. 6

    Configurer les crons

    # crontab -e
    0 2 * * * /root/affiseo-os/scripts/m01-daily.sh
    30 2 * * * /root/affiseo-os/scripts/m01-watchdog.sh
    0 3 * * * /root/affiseo-os/scripts/backup-daily.sh
    0 4 * * * /root/affiseo-os/scripts/m01-safety-net.sh
  7. 7

    Premier run manuel

    Dans /machines/01, cliquer Lancer le pipeline. Durée totale attendue : 5 à 10 minutes. Vérifier les logs PM2 (pm2 logs affiseo-ui) pour tracer chaque étape.

Tables SQLite impliquées

m01_sourcesScrapers (type, config JSON, enabled, lastRun)
m01_signalsSignaux scrapés (title, url, score, rawData)
m01_scriptsScripts générés (hook, body, cta, brollSegments, compliance, status)
m01_cerveau_filesFichiers Cerveau activés (path, label, priority)
m01_prompt_configConsignes machine éditables (mission, répartition, CTA, B-roll)
api_keysRegistry des clés API (valeur, metadata, scope machine)
machine_runsHistorique des runs pipeline (status, durée, output)

Recherche rapide

Rechercher dans les semaines, machines, contenus et sponsors