podcast-generation · microsoft — скилл для Claude Code: обзор и установка
Генерирует озвучку текстов в формате подкаста через модель Azure OpenAI GPT Realtime Mini по WebSocket. Помогает настроить стриминг аудио от FastAPI до React.
npx skills add microsoft/skills --skill podcast-generation -a claude-codeЧто делает podcast-generation
Скилл содержит архитектурные инструкции и примеры кода для сквозной генерации аудиоисторий. На бэкенде используется Python с библиотекой AsyncOpenAI, которая подключается к модели gpt-realtime-mini по протоколу WebSocket. Агент получает инструкции по обработке событий стриминга, сборке фрагментов PCM-аудио (24 кГц, 16 бит, моно) и их конвертации в WAV с помощью скрипта scripts/pcm_to_wav.py.
Для клиентской части скилл предлагает паттерны на React: декодирование base64-строки в Blob и воспроизведение через Web Audio API. Доступны шесть вариантов голоса: alloy, echo, fable, onyx, nova и shimmer. Текстовая расшифровка собирается параллельно через события транскрипции.
Для запуска понадобятся настроенный ресурс Azure OpenAI с деплоем gpt-realtime-mini, API-ключ и базовый endpoint без суффикса /openai/v1/. Ставить скилл стоит, если вы строите синтез речи со стримингом на стеке FastAPI и React.
Какие задачи решает
- наладить стриминг аудио через Azure OpenAI Realtime API по WebSocket
- преобразовать сырой поток PCM 24 кГц в формат WAV на бэкенде
- воспроизвести полученный base64-звук на фронтенде в React
- собрать текстовую расшифровку параллельно с генерацией голоса
Примеры запросов агенту
- Настрой генерацию подкаста по тексту статьи через Azure OpenAI Realtime
- Добавь в FastAPI WebSocket-клиент для модели gpt-realtime-mini с голосом nova
- Сделай воспроизведение аудиопотока из base64 на React
Как установить podcast-generation
1Через Skills CLI (Vercel)
npx skills add microsoft/skills --skill podcast-generation -a claude-code2Вручную: положить файлы
~/.claude/skills/podcast-generation/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/podcast-generation/
Вручную: положить файлы
.agents/skills/podcast-generation/SKILL.mdДля всех проектов — ~/.agents/skills/
Вручную: положить файлы
.cursor/skills/podcast-generation/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install microsoft/skills podcast-generation2Вручную: положить файлы
.github/skills/podcast-generation/SKILL.mdКомандой платформы
gemini skills install https://github.com/microsoft/skills --path .github/skills/podcast-generationВручную: положить файлы
.devin/skills/podcast-generation/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Claude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
Из того же набора18
Весь набор →Другие версии podcast-generation
Похожие
Вопросы о podcast-generation
Как установить podcast-generation в Claude Code?
Выполните команду npx skills add microsoft/skills --skill podcast-generation -a claude-code в терминале.
Что делает скилл podcast-generation?
Он предоставляет готовые шаблоны и инструкции для озвучивания текстов моделью gpt-realtime-mini через WebSocket с бэкендом на FastAPI и плеером на React.
Какие переменные окружения нужны для работы генерации?
Требуются AZURE_OPENAI_AUDIO_API_KEY, AZURE_OPENAI_AUDIO_ENDPOINT (только базовый URL без /openai/v1/) и AZURE_OPENAI_AUDIO_DEPLOYMENT.
Исходный текст
SKILL.md · MIT
---
name: podcast-generation
description: Generate AI-powered podcast-style audio narratives using Azure OpenAI's GPT Realtime Mini model via WebSocket. Use when building text-to-speech features, audio narrative generation, podcast creation from content, or integrating with Azure OpenAI Realtime API for real audio output. Covers full-stack implementation from React frontend to Python FastAPI backend with WebSocket streaming.
---
# Podcast Generation with GPT Realtime Mini
Generate real audio narratives from text content using Azure OpenAI's Realtime API.
## Quick Start
1. Configure environment variables for Realtime API
2. Connect via WebSocket to Azure OpenAI Realtime endpoint
3. Send text prompt, collect PCM audio chunks + transcript
4. Convert PCM to WAV format
5. Return base64-encoded audio to frontend for playback
## Environment Configuration
```env
AZURE_OPENAI_AUDIO_API_KEY=your_realtime_api_key
AZURE_OPENAI_AUDIO_ENDPOINT=https://your-resource.cognitiveservices.azure.com
AZURE_OPENAI_AUDIO_DEPLOYMENT=gpt-realtime-mini
```
**Note**: Endpoint should NOT include `/openai/v1/` - just the base URL.
## Core Workflow
### Backend Audio Generation
```python
from openai import AsyncOpenAI
import base64
# Convert HTTPS endpoint to WebSocket URL
ws_url = endpoint.replace("https://", "wss://") + "/openai/v1"
client = AsyncOpenAI(
websocket_base_url=ws_url,
api_key=api_key
)
audio_chunks = []
transcript_parts = []
async with client.realtime.connect(model="gpt-realtime-mini") as conn:
# Configure for audio-only output
await conn.session.update(session={
"output_modalities": ["audio"],
"instructions": "You are a narrator. Speak naturally."
})
# Send text to narrate
await conn.conversation.item.create(item={
"type": "message",
"role": "user",
"content": [{"type": "input_text", "text": prompt}]
})
await conn.response.create()
# Collect streaming events
async for event in conn:
if event.type == "response.output_audio.delta":
audio_chunks.append(base64.b64decode(event.delta))
elif event.type == "response.output_audio_transcript.delta":
transcript_parts.append(event.delta)
elif event.type == "response.done":
break
# Convert PCM to WAV (see scripts/pcm_to_wav.py)
pcm_audio = b''.join(audio_chunks)
wav_audio = pcm_to_wav(pcm_audio, sample_rate=24000)
```
### Frontend Audio Playback
```javascript
// Convert base64 WAV to playable blob
const base64ToBlob = (base64, mimeType) => {
const bytes = atob(base64);
const arr = new Uint8Array(bytes.length);
for (let i = 0; i < bytes.length; i++) arr[i] = bytes.charCodeAt(i);
return new Blob([arr], { type: mimeType });
};
const audioBlob = base64ToBlob(response.audio_data, 'audio/wav');
const audioUrl = URL.createObjectURL(audioBlob);
new Audio(audioUrl).play();
```
## Voice Options
| Voice | Character |
|-------|-----------|
| alloy | Neutral |
| echo | Warm |
| fable | Expressive |
| onyx | Deep |
| nova | Friendly |
| shimmer | Clear |
## Realtime API Events
- `response.output_audio.delta` - Base64 audio chunk
- `response.output_audio_transcript.delta` - Transcript text
- `response.done` - Generation complete
- `error` - Handle with `event.error.message`
## Audio Format
- **Input**: Text prompt
- **Output**: PCM audio (24kHz, 16-bit, mono)
- **Storage**: Base64-encoded WAV
## References
- **Full architecture**: See [references/architecture.md](references/architecture.md) for complete stack design
- **Code examples**: See [references/code-examples.md](references/code-examples.md) for production patterns
- **PCM conversion**: Use [scripts/pcm_to_wav.py](scripts/pcm_to_wav.py) for audio format conversion
© microsoft · MIT · microsoft/skills