Préparation Upload YouTube

VérifiéPrudence

Prépare et valide tous les fichiers pour un upload YouTube sans effectuer l'upload. Crée une checklist complète incluant vérification des langues, fichiers vidéo/audio et vignettes.

Spar Skills Guide Bot
ContenuIntermédiaire
11/03/2026
Claude Code
#youtube-upload#audiobook#validation#thumbnail#checklist

Recommandé pour

Synthèse automatique

Prépare et valide tous les éléments d'une vidéo de livre audio bilingue (fichiers, langues, wordcards, miniature) avant l'envoi sur YouTube, sans réaliser l'envoi lui-même.

Points forts

  • Contrôle les langues en lisant des traductions au milieu du livre, ce qui détecte les projets où la mauvaise langue cible a été générée.
  • Vérifie la présence des champs wordcard_start et wordcard_duration dans timeline.json et fait écouter un wordcard du milieu du livre.
  • Donne des commandes shell concrètes pour chaque vérification (fichiers vidéo, fond, audio, timeline, base SQLite).
  • Prévoit une recherche de miniature par paire de langues et une génération de secours, y compris un script par lot.

Limites

  • Le fichier est tronqué à l'étape 6 : l'invocation de la skill de métadonnées YouTube et la construction de la commande d'envoi ne sont pas décrites.
  • Fortement dépendant d'un environnement précis : schéma SQLite implicite, modules Python internes (video.thumbnail_variants, scripts/generate_thumbnails.py) et lecture audio via afplay (macOS).
  • Ne couvre que la préparation : aucune étape d'envoi, de publication ou de gestion des erreurs d'upload.
Quand l'utiliser

À utiliser lorsqu'on veut une liste de contrôle de pré-vol avant de publier une vidéo de livre audio bilingue sur YouTube.

Quand l'éviter

À éviter pour d'autres types de vidéos ou de projets sans la structure projects/ et bases SQLite attendues, ou si l'on cherche à effectuer réellement l'envoi.

Analyse de sécurité

Prudence
Score qualité80/100

The skill is a local validation/preparation workflow: it reads SQLite metadata, checks files exist, plays a wordcard sample, and optionally generates a thumbnail image with Pillow. All commands are local and non-destructive, and it explicitly forbids performing the actual upload. The main risks are operational rather than malicious — unquoted variable interpolation into shell commands, reliance on external scripts/skills not included in the package, and a ready-to-run upload command with public privacy and a confirmation-skip flag that a user might execute unknowingly.

Points d'attention
  • •Uses Bash for local inspection (ls, sqlite3 SELECT, grep, head) and executes an inline python3 -c thumbnail generator (PIL): powerful but read-only/local in intent.
  • •Project names and book metadata are interpolated directly into shell command templates (e.g. `ls projects/{project_name}/`, `sqlite3 projects/{project_name}/project.db`) without quoting; a project name containing spaces or shell metacharacters could break out of the intended command.
  • •Runs `afplay` on local audio files as a verification step — a side-effecting (audio playback) command, macOS-only, not destructive.
  • •Depends on artifacts not shipped in this skill (Skill 'youtube-metadata', scripts/youtube_upload.py, video.thumbnail_variants, sqlite DB schema); behavior depends on external code the reviewer cannot inspect here.
  • •Constructs a YouTube upload command with `--privacy public` and a `-y` skip-confirmation flag in the documented flag list; the skill explicitly says not to execute it, but a user copying the command line could publish publicly and bypass confirmation.
  • •No destructive commands, no credential/secret handling, no network exfiltration, no obfuscation or encoded payloads, and no instruction-injection attempts found in the content.
  • •Uses Bash, sqlite3, python3, and a local audio player (afplay) to inspect project files, query databases, and generate thumbnails — powerful but legitimate for a local prep workflow.
  • •Includes an upload command (scripts/youtube_upload.py ... --privacy public) intended for the user to copy and run manually; the skill explicitly instructs not to execute it, but the command would publish publicly if run.
  • •Runs inline python3 that imports project-local modules (video.thumbnail_variants) — execution depends on whatever code is in the repo.
  • •Delegates part of the workflow to another skill (youtube-metadata) whose behavior is not evaluated here.
Comment cette analyse est faite

Exemples

Prepare a project upload
Prepare the YouTube upload for the project 'atomic_habits' — validate the languages, files and wordcards, and give me the full checklist.
Check before upload
Check before upload: verify the thumbnail exists for ru_en and that the wordcard audio plays in the middle of the book.
Validate languages only
Validate for YouTube: read a few translations from the middle of the book so I can confirm the target language is correct.

name: upload-prepare description: Prepare YouTube upload for bilingual audiobook video. Runs youtube-metadata skill, builds upload command, validates all files, checks languages by reading translations from middle of book, verifies wordcards play, shows thumbnail/background/output. Does NOT upload - only preparation and checklist. Use when user wants to prepare upload, check before upload, or validate video for YouTube. allowed-tools: Read, Bash, Glob, Skill

Upload Prepare - YouTube Upload Preparation & Validation

Overview

Prepare and validate everything for YouTube upload without actually uploading. Creates comprehensive checklist for user verification.

Activation Triggers

  • "prepare upload"
  • "check before upload"
  • "validate for youtube"
  • "upload checklist"
  • "готовь к загрузке"
  • "проверь перед аплоадом"

Workflow

Step 1: Identify Project

  1. Get project name from user or detect from context
  2. Verify project exists in projects/ directory
  3. Load project metadata from SQLite database
# Check project exists
ls projects/{project_name}/

# Get meta from DB
sqlite3 projects/{project_name}/project.db "SELECT key, value FROM meta;"

Step 2: Validate Languages

  1. Read source and target language from project meta
  2. Read 2-3 translations from MIDDLE of the book (not beginning!)
  3. Display translations for user to verify correct language
# Get total sentences
sqlite3 projects/{project_name}/project.db "SELECT value FROM meta WHERE key='total_sentences';"

# Read translations from middle (e.g., sentences 100-102)
sqlite3 projects/{project_name}/project.db "SELECT sentence_idx, text FROM sentences WHERE lang='{target_lang}' LIMIT 3 OFFSET 100;"

Step 3: Validate Files

Check all required files exist:

# Video output
ls -lh projects/{project_name}/video/output.mp4

# Background image
ls -la projects/{project_name}/video/background.*

# Timeline with wordcards
head -30 projects/{project_name}/audio/timeline.json | grep -E "(wordcard_start|wordcard_duration)"

# Wordcard audio files
ls projects/{project_name}/audio/wordcards/ | head -5

Step 4: Verify Wordcards

  1. Check timeline.json contains wordcard_start and wordcard_duration fields
  2. Play one wordcard audio from middle of book for verification
# Check timeline has wordcard data
grep -c "wordcard_start" projects/{project_name}/audio/timeline.json

# Play wordcard from middle (user listens)
afplay projects/{project_name}/audio/wordcards/0000100_combined.mp3

Step 5: Find Thumbnail

  1. Determine language pair from project (e.g., ru_en, ru_es-latam)
  2. Check thumbnails/{lang_pair}/ directory for matching thumbnail
  3. If not found, generate using thumbnail generator
# Find thumbnail in language-specific folder
# Structure: thumbnails/ru_en/, thumbnails/ru_es-latam/
ls -la thumbnails/{source}_{target}/ | grep -i {project_base_name}

If thumbnail NOT found, generate it:

# Quick one-liner to generate single thumbnail
python3 -c "
from pathlib import Path
from video.thumbnail_variants import prepare_background, variant_13, load_fonts
from PIL import ImageDraw

fonts = load_fonts()
img = prepare_background(Path('txt_source/{book_name}.png'))
draw = ImageDraw.Draw(img)

# For RU→EN use tgt_lang='ENGLISH'
# For RU→ES-LATAM use tgt_lang='LATAM SPANISH'
img = variant_13(img, draw, fonts,
    author_en='{Author English}',
    title_en='{Title English}',
    src_lang='RUSSIAN',
    tgt_lang='ENGLISH',  # or 'LATAM SPANISH'
    title_ru='{Название}',
    author_ru='{Автор}'
)
img = img.convert('RGB')
img.save('thumbnails/ru_en/{book_name}.png', quality=95)
"

Batch generation (all books):

# Generate all thumbnails for specific language pair
python3 scripts/generate_thumbnails.py thumbnails/ru_es-latam  # default LATAM SPANISH

To add target language option to batch script, edit generate_thumbnails.py.

Step 6: Generate Metadata

Invoke youtube-metadata skill to generate title, description, tags:

Skill(skill: "youtube-metadata")

Follow youtube-metadata workflow to generate proper metadata.

Step 7: Build Upload Command

Construct the upload command (do NOT execute):

python3 scripts/youtube_upload.py upload {project_name} {thumbnail_path} --playlist "{playlist_name}"

Playlist selection:

  • RU → EN: --playlist "RU - EN"
  • RU → ES-LATAM: --playlist "RU - ES (LATAM)"
  • Other: ask user

Step 8: Display Checklist

Output comprehensive checklist for user:

============================================================
UPLOAD PREPARATION CHECKLIST
============================================================

PROJECT: {project_name}
LANGUAGES: {SOURCE} → {TARGET}

------------------------------------------------------------
FILES (clickable paths)
------------------------------------------------------------
[✓/✗] Video:      file://{full_video_path} ({size})
[✓/✗] Background: file://{full_background_path}
[✓/✗] Thumbnail:  file://{full_thumbnail_path}
[✓/✗] Timeline: {has wordcard data}
[✓/✗] Wordcards: {count} files

------------------------------------------------------------
LANGUAGE VERIFICATION (from middle of book)
------------------------------------------------------------
Sentence 100: "{source_text}"
Translation:  "{target_text}"

Sentence 101: "{source_text}"
Translation:  "{target_text}"

>>> Verify translations are in {target_lang}! <<<

------------------------------------------------------------
WORDCARD AUDIO
------------------------------------------------------------
[✓/✗] Timeline has wordcard timing
[✓/✗] Wordcard files exist
[PLAYED] Wordcard sample from sentence 100

------------------------------------------------------------
METADATA (use youtube-metadata skill format!)
------------------------------------------------------------
Title: [Bilingual][{SOURCE}→{TARGET}] {Author} - {Title}

Description:
🎧 AI-generated bilingual audio for passive language learning.
Each sentence: first {source_language}, then {target_language}.

⚠️ Neural TTS - minor errors possible. Premium voices coming soon.

📩 Want other languages or texts? Drop a comment!

#{hashtag1} #Bilingual #LanguageLearning #{hashtag2}

Tags: (from youtube-metadata skill, NO # symbols)
Playlist: {playlist}

------------------------------------------------------------
UPLOAD COMMAND (copy & run when ready)
------------------------------------------------------------
python3 scripts/youtube_upload.py upload {project_name} {thumbnail_path} \
  --title "[Bilingual][{SOURCE}→{TARGET}] {Author} - {Title}" \
  --playlist "{playlist}" \
  --privacy public

============================================================

Upload command flags:

  • --title — REQUIRED! Title in youtube-metadata format
  • --thumbnail — path to thumbnail image (positional arg)
  • --playlist — playlist name (RU - EN, RU - ES (LATAM), etc.)
  • --privacy — private/unlisted/public (use public for immediate publish)
  • --schedule — optional: "tomorrow", "tomorrow 14:00", "18:00", "+2h", or ISO datetime
  • --dry-run — preview without uploading
  • -y — skip confirmation

Optimal premiere times for language learning content:

  • Best days: Wednesday, Thursday, Friday
  • Best time: 10:00-14:00 (target audience timezone)
  • For RU→EN: 14:00 MSK (11:00 UTC) — catches both Russian and European learners
  • For RU→ES LATAM: 18:00 MSK (15:00 UTC, 12:00 Argentina) — catches LATAM afternoon

CRITICAL: Metadata MUST follow youtube-metadata skill format exactly:

  • Title: [Bilingual][{SOURCE}→{TARGET}] {Author} - {Title}
  • Author and Title MUST be in ENGLISH
  • Description: standard template from youtube-metadata skill
  • Tags: from youtube-metadata skill (NO hashtag symbols)

Quality Checklist

Before showing final checklist, verify:

  • [ ] Video file exists and size > 10MB
  • [ ] Background image exists
  • [ ] Thumbnail exists
  • [ ] Timeline contains wordcard_start fields (if wordcards enabled)
  • [ ] Wordcard audio files exist (if wordcards enabled)
  • [ ] Translations are in correct target language
  • [ ] Metadata generated via youtube-metadata skill
  • [ ] Upload command is valid

Anti-Patterns to Avoid

  • Don't execute the upload command
  • Don't skip language verification
  • Don't use translations from beginning (use middle of book)
  • Don't skip wordcard audio playback
  • Don't generate metadata manually (use youtube-metadata skill)

Example Execution

User: prepare upload nabokov_uzhas_ru_en

Claude:
Starting upload preparation for nabokov_uzhas_ru_en...

[Validates project exists]
[Reads meta: ru → en, 209 sentences]
[Reads translations from middle - sentences 100-102]
[Checks video: 192MB ✓] → file:///Users/.../video/output.mp4
[Checks background ✓] → file:///Users/.../video/background.png
[Checks thumbnail ✓] → file:///Users/.../thumbnails/ru_en/nabokov_uzhas.png
[Checks timeline: has wordcard_start ✓]
[Plays wordcard audio from sentence 100]
[Invokes youtube-metadata skill]
[Builds upload command]

============================================================
UPLOAD PREPARATION CHECKLIST
============================================================
[Full checklist output...]
============================================================

All checks passed! Review the checklist and run the upload command when ready.

Summary

This skill prepares everything for YouTube upload:

  1. Validates all files exist
  2. Verifies languages by checking translations from middle of book
  3. Confirms wordcards are included
  4. Generates metadata via youtube-metadata skill
  5. Builds upload command
  6. Displays comprehensive checklist

User makes final decision to upload.

Du fichier au premier essai

Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.

Consulter la source et ses fichiers annexes

Ce téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.

1. Télécharger le fichier

Télécharger SKILL.md

Depuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/youtube-upload-preparation-mmlj2nyp/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.

Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.

mkdir -p '.skill-downloads/youtube-upload-preparation-mmlj2nyp' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/youtube-upload-preparation-mmlj2nyp/download' --output '.skill-downloads/youtube-upload-preparation-mmlj2nyp/SKILL.md.part' && mv '.skill-downloads/youtube-upload-preparation-mmlj2nyp/SKILL.md.part' '.skill-downloads/youtube-upload-preparation-mmlj2nyp/SKILL.md'

2. Vérifier les prérequis

Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.

Outils déclarés par l’auteur (à vérifier dans votre agent) : Read, Bash, Glob, Skill

Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.

Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.

3. Charger la skill

Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.

Claude Code
test -f '.skill-downloads/youtube-upload-preparation-mmlj2nyp/SKILL.md' && test -s '.skill-downloads/youtube-upload-preparation-mmlj2nyp/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/upload-prepare' && cp -R '.skill-downloads/youtube-upload-preparation-mmlj2nyp' '.claude/skills/upload-prepare'

OpenSkills

OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.

Installation officielle d’OpenSkills
openskills install './.skill-downloads/youtube-upload-preparation-mmlj2nyp'

openskills read 'youtube-upload-preparation-mmlj2nyp'

La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.

Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.

openskills sync

Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.

4. Faire un premier essai

Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :

Lis .skill-downloads/youtube-upload-preparation-mmlj2nyp/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.

Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.

Skills similaires