Aller au contenu

Blog Narration

AI generated translation.

A clean, corporate workspace scene showing a stylized open laptop on a desk. From the laptop’s screen, a colorful geometric blog post splits into two paths: one morphs into a text document symbol and the other into a bold, wavy audio waveform. Clear, simple arrows and icons show the transformation, with shapes hinting at narration, AI, and summarization, all rendered in 8-bit style with a striking five-color palette. No people, text, or clutter are present.
Generated by 🤖 AI

Avez-vous déjà souhaité une manière simple de créer un résumé et une narration audio pour votre article de blog ? Ce script vous aide à faire cela grâce à l’IA, transformant le contenu de votre blog en un résumé textuel et un fichier audio vocal.
Voir la source sur GitHub.

Passons en revue le script étape par étape en expliquant ce que fait chaque partie.

script({
title: "Blog Post Narrator",
description: "Creates narrated summaries of blog posts",
accept: ".mdx,.md",
model: "large",
system: ["system.annotations"],
files: "docs/src/content/docs/blog/azure-ai-search.mdx",
parameters: {
force: false,
},
});
  • définit les métadonnées du script : titre, description, quels types de fichiers il traite (.mdx, .md), et quel modèle d’IA utiliser.
  • "files" pointe vers l’article de blog d’exemple à narrer.
  • "parameters" définit les options facultatives du script.
const { force } = env.vars;
const file = env.files[0];
if (!file) cancel("No file provided");
  • lit les paramètres d’entrée à partir des variables d’environnement et des fichiers.
  • Si aucun fichier n’est fourni, le script s’annule immédiatement.
const targetName = path.basename(
path.changeext(file.filename, ".mp3"),
);
const target = path.join(`./docs/public/blog`, targetName);
if (!force && (await workspace.stat(target))) {
cancel(`File already exists: ${target}`);
}
  • prépare le nom et l’emplacement cible pour le fichier audio .mp3 de sortie.
  • Si le fichier existe déjà et que force n’est pas défini, le script s’annule.
const examples = {
dramatic: `Voice Affect: Low, hushed, and suspenseful; convey tension and intrigue....`,
friendly: `Affect/personality: A cheerful guide...`, ...
}
  • prépare divers styles d’échantillons de voix et de narration pour guider le modèle.
const {
json: { summary, instructions, voice },
} = await runPrompt(
(_) => {
_.def("CONTENT", file)
_.`You are a podcast writer.
Your task is to create an engaging summary of this blog post that would work well as a narration
AND a voice description for a text-to-speech model AND a voice type.
## Summary Instructions
- Focus on the key points and main message
- Use natural, conversational language
- Keep it between 2-3 paragraphs
- You can use Technical Jargon, but explain it in simple terms
- Do not start with Excited
## Voice Instructions
- In your thinking, generate 5 descriptions of the voice suitable for a text-to-speech model. These voice personalities should be wildly different and esoteric.
- Include details about the accent, tone, pacing, emotion, pronunciation, and personality affect
- Get inspired by the content of the blog post
- Pick one of the 5 voices randomly as your output.
- go crazy on the voice descriptions
Follow the structure of the following examples:
${YAML.stringify(examples)}
## Voice Type
Select one of the voice types provided by OpenAI ("alloy" | "ash" | "coral" | "echo" | "fable" | "onyx" | "nova" | "sage" | "shimmer" | "verse" | "ballad") based on the blog post content
and the voice description you generated.
`
},
{
temperature: 1.1,
responseType: "json_schema",
responseSchema: {
instructions: "voice description",
voice: {
required: true,
type: "string",
enum: [
"alloy", "ash", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer", "verse", "ballad",
],
},
summary: "summary",
},
}
)
  • Exécute un prompt alimenté par l’IA pour générer :
    • Un résumé de l’article de blog
    • Une description du style de narration
    • Un type de voix (parmi les voix TTS d’OpenAI)
  • Le prompt détaille toutes les exigences pour le modèle d’IA, y compris les instructions et des exemples de résultats.
const { filename } = await speak(summary, {
model: "openai:gpt-4o-mini-tts", // High quality speech model
voice, // Use a natural-sounding voice
instructions,
});
  • Appelle la fonction speak pour générer une narration audio du résumé en utilisant le type de voix et le style de narration choisi.
if (!filename) cancel("failed to generate speech");
console.log(`audio file: ${filename}`);
  • Si la génération du fichier audio échoue, le script s’arrête.
  • Sinon, il enregistre le nom du fichier audio généré.

Ce script utilise des utilitaires de genaiscript/runtime :

  • runPrompt - envoie des prompts au modèle d’IA et retourne des résultats structurés.
  • speak - génère une narration audio à partir de texte et d’instructions vocales.
  • workspace - gère les opérations sur les fichiers en toute sécurité.
  • host.exec - exécute des commandes shell (comme ffmpeg) pour traiter des fichiers.

Vous pouvez consulter la source runtime ici.

Ce script transforme rapidement n’importe quel article de blog en un résumé textuel et une narration vocale, prêt à être partagé en tant qu’audio ou vidéo. Parfait pour rendre votre blog plus accessible et engageant ! 🎤📝