Vidéo Podcast
Génère une vidéo 1920x1080 de deux animateurs discutant d'un sujet. Chaque sujet possède sa propre photo d'arrière-plan, carte de titre, icône et étiquette de locuteur avec barres vocales animées. Les changements de sujet s'accompagnent d'un fondu en plein écran et d'un whoosh, les icônes apparaissent avec un pop, et la dernière scène comporte un bouton d'abonnement et des crédits. Elle peut s'ouvrir avec la voix clonée de l'utilisateur.
Lisez /hyperframes avant de modifier une composition. Les scripts ci-dessous se trouvent dans le dossier scripts/ de cette compétence. Exécutez-les depuis le dossier du projet vidéo.
0. Entretien préalable
Ne faites aucune recherche, n'écrivez ni ne générez quoi que ce soit tant que ceci n'est pas terminé. Une vidéo rendue est longue à refaire, alors tranchez les décisions en amont. La méthode provient de la compétence d'interrogatoire de Matt Pocock.
Les décisions forment un arbre : certaines ne peuvent être posées qu'une fois que d'autres sont réglées. Travaillez par tours :
- Posez toutes les questions dont vous pouvez répondre aux prérequis maintenant, et rien qui dépende d'une réponse que vous n'avez pas encore entendue. Cette question attend un tour ultérieur.
- Numérotez chaque question et donnez votre réponse recommandée, formulée de sorte que « oui » l'accepte.
- Attendez les réponses, puis déterminez ce qu'elles débloquent et posez le tour suivant. Une réponse peut également rendre une question prévue inutile : abandonnez-la.
Formatez chaque question comme ceci :
❓ **Q1** - **<titre>** : <la question>
➡️ <votre réponse recommandée>
Les faits sont votre travail, les décisions sont les leurs. Ne demandez jamais ce que vous pouvez rechercher : si VoiceStudio fonctionne, quels profils vocaux existent (GET /profiles), ce qu'il y a dans le dossier, ce que dit la recherche. Ne répondez jamais à une décision à leur place. Posez les questions en texte brut, afin qu'ils puissent répondre avec leurs propres mots.
Les décisions à couvrir, approximativement dans cet ordre :
| Tour | Décisions |
|---|---|
| 1 | Le sujet et l'angle spécifique. Qui regarde et ce qu'ils savent déjà. Ce que les spectateurs devraient faire ensuite. Durée cible. |
| 2 | Les deux animateurs : qui ils sont et comment ils se rapportent, par exemple expert et client. Ton. Nom de l'émission. Si elle s'ouvre avec la propre voix de l'utilisateur. |
| 3 | Si elle s'ouvre avec leur voix : quel profil, et les mots exacts. Accents et caractéristiques vocales pour les animateurs conçus. |
| 4 | Après la recherche : quels résultats utiliser, et toute affirmation qu'ils veulent omettre. La liste des sujets, dans l'ordre. |
| 5 | Aspect et son : le type de photos, l'icône pour chaque sujet, les modifications éventuelles des fondus, du whoosh et du pop. Où la vidéo sera publiée. |
Passez tout ce qui est déjà répondu dans la demande. S'ils disent « vas-y » ou « décide toi-même », arrêtez de demander, prenez vos réponses recommandées et listez-les. Il n'y a pas de limite de questions, mais ne demandez pas pour le plaisir : chaque question doit modifier la vidéo.
Terminez en décrivant le plan en quelques lignes : sujet, public, durée, animateurs, ouverture, liste des sujets et appel à l'action. Attendez qu'ils confirment avant de commencer l'étape 1. Si quelque chose rouvre une décision plus tard, comme une recherche qui contredit l'angle, arrêtez-vous et demandez.
1. Vérifier la configuration
curl -s "$VOICESTUDIO_URL/profiles"devrait répondre. URL par défaut :http://localhost:3000. Si le serveur a une clé API,VOICESTUDIO_API_KEYdoit être définie. N'écrivez jamais la clé dans un fichier de projet.ffmpegetnodesont dans le PATH, et les compétences HyperFrames sont installées.
Si quelque chose manque, arrêtez-vous et orientez l'utilisateur vers le README de cette compétence.
2. Créer le projet
npx hyperframes init <dir>, puis copiez templates/script.example.json dans <dir>/script.json.
3. Rechercher et écrire script.json
Recherchez d'abord le sujet. Chaque statistique a besoin d'une source réelle : mettez-la dans le champ source de cette scène et n'inventez pas de chiffres. Écrivez un langage naturel, environ 150 mots par minute.
| Champ | Signification |
|---|---|
show | Nom de l'émission, affiché sur chaque scène |
chips | Étiquettes de crédit sur la dernière scène |
voices | Une entrée par locuteur. name, role, color, plus soit profile_id soit instruct et seed |
scenes | Ordonnées par apparition. kicker, title, icon, facultatif sub et source. La dernière est l'outro |
lines | Tours de parole dans l'ordre : who, scene, text. Les lignes d'une scène doivent être contiguës |
icon est un nom d'icône de Lucide qui convient au sujet, par exemple phone-call.
Pour commencer par la propre voix clonée de l'utilisateur, ajoutez une voix avec son profile_id VoiceStudio (depuis GET /profiles), donnez-lui une première scène, et terminez la ligne par un transfert comme « C'est parti ! » Ne clonez une voix qu'avec l'autorisation de son propriétaire.
Montrez le script à l'utilisateur avant de générer les voix.
4. Générer les voix
python3 <skill>/scripts/make_voice.py
Cela écrit assets/audio/ et assets/lines.json. L'audio est mis en cache, donc après avoir modifié le script, il ne génère que ce qui a changé. Si l'utilisateur reclone une voix, supprimez son audio de assets/audio/ pour qu'il se régénère, et confirmez d'abord que le ref_audio_path du profil a changé : un clone qui n'a pas été sauvegardé laisse l'ancienne voix en place. Faites écouter l'audio à l'utilisateur avant de rendre.
5. Ajouter images, icônes et sons
Images : chaque scène a besoin de assets/img/<id-scène>.jpg, paysage, au moins 1920 de large, et une photo différente de la scène précédente, pour que chaque changement de sujet soit visible. Utilisez uniquement des images que l'utilisateur peut publier, par exemple des photos sous licence CC de Wikimedia Commons. Enregistrez chacune dans assets/img/credits.json comme {"<id-scène>": {"artist": "...", "license": "...", "page": "..."}}. La dernière scène affiche les noms des artistes.
Icônes :
npm pack [email protected] --silent && tar xzf lucide-static-0.460.0.tgz
mkdir -p assets/icons && cp package/LICENSE assets/icons/LICENSE
cp package/icons/<nom-icône>.svg assets/icons/ # une fois par icône de scène
rm -rf package lucide-static-0.460.0.tgz
Sons : exécutez ceci et copiez le fichier que chacun affiche :
npx hyperframes media-use resolve --type sfx --intent "short whoosh transition" --project .
npx hyperframes media-use resolve --type sfx --intent "quick pop badge" --project .
mkdir -p assets/sfx
cp <chemin whoosh> assets/sfx/whoosh.mp3
cp <chemin pop> assets/sfx/pop.mp3
Créditez tout son CC BY sur la dernière scène via chips.
6. Construire et vérifier
python3 <skill>/scripts/build.py
puis npx hyperframes check. Corrigez toutes les erreurs. Exécutez ensuite npx hyperframes snapshot --at <secondes> et regardez les images aux changements de scène avant de rendre. Les fondus sont en plein écran aux heures de début de scène que build.py affiche.
7. Rendre
npx hyperframes render. Le fichier MP4 atterrit dans renders/. Comptez plusieurs minutes par minute de vidéo.
Vérifiez le fichier, puis dites à l'utilisateur ce que vous avez mesuré : npx hyperframes audio <video> --json indique si le son est présent et si l'intensité sonore est dans la plage. Vous pouvez mesurer le son mais pas l'entendre, alors demandez-leur d'écouter.