Pipeline automatique : télécharge une vidéo YouTube, extrait les meilleurs moments, brûle les sous-titres, sort des MP4 prêts à uploader.
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # remplir OPENAI_API_KEYsource venv/bin/activate
# Pipeline complet (compilations + shorts par défaut)
python src/pipeline.py --url "https://youtube.com/watch?v=xxx"
# Choisir le format
python src/pipeline.py --url "..." --format compilation
python src/pipeline.py --url "..." --format shorts
python src/pipeline.py --url "..." --format both
# Stopper après une étape
python src/pipeline.py --url "..." --only transcribe
python src/pipeline.py --url "..." --only score
# Reprendre depuis une étape (saute les étapes précédentes si déjà en cache)
python src/pipeline.py --url "..." --from score
python src/pipeline.py --url "..." --from clip
# Avec config de chaîne
python src/pipeline.py --url "..." --channel ma_chaine
python src/pipeline.py --url "..." --channel ma_chaine --assemble
# Uploader les clips en privé sur YouTube
python src/pipeline.py --url "..." --upload
# Tests
make testÉtapes disponibles : download → transcribe → score → clip → assemble
OPENAI_API_KEY=sk-...
WHISPER_MODEL=base # tiny | base | small | medium
TMP_DIR=./tmp
OUTPUT_DIR=./output
YOUTUBE_CLIENT_SECRETS_PATH=./config/client_secrets.json
MIN_CLIP_DURATION=60
MAX_CLIP_DURATION=240
CLIPS_PER_VIDEO=3
MIN_CLIP_DURATION_SHORT=45
MAX_CLIP_DURATION_SHORT=90
CLIPS_PER_VIDEO_SHORT=5
MIN_CLIP_SCORE=70
LOG_LEVEL=INFOCréer channels/{channel_id}/channel.json :
{
"channel_id": "ma_chaine",
"name": "Ma Chaîne",
"topic_hint": "tech et startups",
"format_target": "both",
"min_clip_duration_compilation": 60,
"max_clip_duration_compilation": 240,
"clips_per_video_compilation": 3,
"min_clip_duration_short": 45,
"max_clip_duration_short": 90,
"clips_per_video_short": 5,
"min_score": 70,
"branding": {
"subtitle_font": "Arial",
"subtitle_size": 18,
"subtitle_primary_colour": "ffffff",
"subtitle_outline_colour": "000000",
"source_card_bg_color": "#1a1a1a",
"source_card_text_color": "#ffffff",
"source_card_duration": 3
}
}Pour la doc technique (modules, data flow, exceptions) : docs/REFERENCE.md