---
title: "Сценарный медиапайплайн"
description: "Схемоуправляемая генерация сценарного видео — JSON-запрос, bible каста, stills первого кадра, I2V, миниатюры, CLI run-scripted-video"
locale: "ru"
---
# Сценарный медиапайплайн (Ring Media Conductor)

Провайдер-нейтральный, схемоуправляемый пайплайн для маркетинговых и объясняющих роликов. Креативный агент создаёт один **`scripted-video-generation-request-.json`**; **`ring-video-create`** последовательно выполняет:

1. **Still первого кадра** (`firstFramePrompt` → ImageConductor)
2. **Видео I2V** (grok-imagine-video-1.5 @ 480p, когда draft + image)
3. **Опциональная миниатюра** (детерминированные текстовые оверлеи через `next/og`)

  
- **[ring-video-create](/docs/mcp/ring-video-create.md)** — Справочник инструмента MCP (перегруженный путь сцены).

  
- **[Генеративные видео](/docs/development/generative-videos.md)** — Пресеты VideoConductor и режимы ремастеринга.

## Архитектура

```text
Creative agent → scripted-video-generation-request.json
  → run-scripted-video.mjs (CLI) OR ring-video-create (MCP)
    → VideoConductor.generate
      → ImageConductor (firstFramePrompt)
      → xAI I2V (compiled ACTION/DIALOGUE prompt)
      → thumbnail compositor (optional)
    → manifest v3 + ring-filebase URLs
```

| Артефакт | Путь |
|----------|------|
| JSON Schema | `lib/media/scripted-video-generation.schema.json` |
| Валидация Zod | `lib/media/schemas.ts` |
| Компилятор prompt | `lib/media/prompt-compiler.ts` |
| Миниатюра | `lib/media/thumbnail.tsx` |
| Пример запроса | `scripts/ring-viral-video/scripted-video-generation-request-hoa-nightclub.json` |
| CLI runner | `scripts/ring-viral-video/run-scripted-video.mjs` |
| Линза режиссёра | `AI-LEGIOX/legiox-truth-lens/scripted-video-director.nodus.json` |

## Форма файла запроса

```json
{
  "schemaVersion": "1.0",
  "requestId": "hoa-nightclub-viral-2026-06",
  "purpose": "viral-ad",
  "defaults": { "qualityMode": "draft", "aspectRatio": "16:9", "imageResolution": "2k" },
  "cast": [{ "id": "guy", "description": "…" }],
  "setting": "San Francisco nightclub at night…",
  "clips": [{
    "id": "03_sf_nightclub_ring_opener",
    "duration": 12,
    "firstFrame": { "imagePrompt": "{{girl}} and {{guy}} at bar…" },
    "scene": {
      "action": "{{guy}} gestures warmly…",
      "dialogue": [{ "speaker": "guy", "line": "So your HOA uses Ring?", "tone": "warmly" }]
    },
    "thumbnail": { "enabled": true, "overlays": [{ "text": "Your HOA on Ring", "role": "title" }] }
  }]
}
```

**Плейсхолдеры каста:** `{{guy}}`, `{{girl}}` при компиляции раскрываются в `cast[].description`.

## Типы клипов

| Тип | firstFrame | scene.dialogue | Режим видео |
|------|------------|----------------|------------|
| Монтаж / UI | опустить | опционально | T2V `grok-imagine-video` @ 480p |
| Диалог | `imagePrompt` обязателен | обязателен | I2V `grok-imagine-video-1.5` @ 480p |

## CLI

```bash
cd ring-platform.org/scripts/ring-viral-video

# Full pipeline via MCP gateway (needs RING_MCP_ACCESS_KEY + dev server)
node run-scripted-video.mjs scripted-video-generation-request-hoa-nightclub.json --download

# Single clip
node run-scripted-video.mjs scripted-video-generation-request-hoa-nightclub.json --clip=03_sf_nightclub_ring_opener

# Remaster from manifest URL
node run-scripted-video.mjs request.json --remaster --clip=03_sf_nightclub_ring_opener --source-url=https://...
```

Манифест v3 хранит `firstFrameUrl`, `thumbnailUrl`, `pipelineRequestId`, `clipId` для каждого ключа upsert `id::qualityMode`.

## MCP (один клип)

```
ring-video-create \
  prompt "ACTION: … DIALOGUE: …" \
  firstFramePrompt "Cinematic still {{guy}} and {{girl}} at bar…" \
  qualityMode draft duration 12 purpose viral-ad clipId 03_sf_nightclub_ring_opener
```

С `thumbnail.enabled` в body — см. [ring-video-create](/docs/mcp/ring-video-create.md).

## Рабочий процесс агента

При создании запросов обращайтесь к линзе истины **`scripted-video-director`**. Валидируйте так:

```typescript
import { scriptedVideoGenerationRequestSchema } from '@/lib/media/schemas'
scriptedVideoGenerationRequestSchema.parse(request)
```

## Окружение

```bash
XAI_API_KEY=…
RING_MCP_ACCESS_KEY=long-random-token
RING_API_BASE_URL=http://localhost:3000
FILE_BACKEND=ringbase
```

## Legacy

`xai-video-jobs.json` + `generate-xai-videos.mjs` остаются для пакетных запусков напрямую через xAI без gateway. Для новых кампаний предпочитайте файл сценарного запроса.
