{"id":"8e0c1532-5d22-43f0-bbda-1aa5e3742d31","entityType":"agent","slug":"clawhub-pruna-ai-avatar-single-scene","name":"avatar-single-scene","canonicalUrl":"https://www.xpersona.co/agent/clawhub-pruna-ai-avatar-single-scene","canonicalPath":"/agent/clawhub-pruna-ai-avatar-single-scene","generatedAt":"2026-10-10T14:46:31.412Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T12:22:19.987Z","emptyReason":null},"description":"Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation. Skill: avatar-single-scene Owner: pruna-ai Summary: Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation. Tags: ai:1.0.14, generative:1.0.14, latest:1.0.14, pruna:1.0.14 Version history: v1.0.14 | 2026-09-29T15:37:19.415Z | auto - Bumped version to 1.0.14. - Updated documentation in SKILL.md; no workflow or logic changes. - Removed skill-card.md","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.4K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s173djpkkm1x4yfzg522h5vfp989mrn5:avatar-single-scene","sourceUrl":"https://clawhub.ai/pruna-ai/avatar-single-scene","homepage":"https://clawhub.ai/pruna-ai/skills/avatar-single-scene","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/pruna-ai/avatar-single-scene","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/pruna-ai/skills/avatar-single-scene","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":63,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation. Skill: avatar-single-scene Owner: "},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T12:22:19.987Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T12:22:19.987Z","emptyReason":null},"stars":null,"forks":null,"downloads":1435,"packageName":null,"latestVersion":"1.0.14","tractionLabel":"1.4K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T12:22:19.987Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T12:22:19.987Z","lastCrawledAt":"2026-10-10T12:22:19.987Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T12:22:19.987Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.14","createdAt":"2026-09-29T15:37:19.415Z","changelog":"- Bumped version to 1.0.14. - Updated documentation in SKILL.md; no workflow or logic changes. - Removed skill-card.md file.","fileCount":4,"zipByteSize":4760},{"version":"1.0.13","createdAt":"2026-09-17T14:00:39.956Z","changelog":"- Version bump to 1.0.13. - Documentation update in SKILL.md; version and content refined. - skill-card.md file removed.","fileCount":4,"zipByteSize":4837},{"version":"1.0.12","createdAt":"2026-09-10T13:59:19.356Z","changelog":"- Added `p-image-ideogram` to prerequisites and intake as an option for more controlled photo generation. - Updated intake and workflow sections to prioritize `p-image-ideogram` for photoreal, text-in-image, or structured JSON cases—while keeping `p-image` for fast, cheap drafts. - Adjusted intake and workflow language to reflect new image skill usage. - Removed obsolete `skill-card.md` file.","fileCount":4,"zipByteSize":4942},{"version":"1.0.11","createdAt":"2026-09-03T14:13:21.823Z","changelog":"- Version bump to 1.0.11; updated metadata in SKILL.md. - Removed the redundant skill-card.md file. - No workflow or functionality changes. This is a documentation and organizational update only.","fileCount":4,"zipByteSize":4780},{"version":"1.0.10","createdAt":"2026-08-28T07:59:10.835Z","changelog":"- Version updated to 1.0.10. - Documentation cleanup: updated SKILL.md instructions. - Removed obsolete file: skill-card.md. - No workflow or logic changes.","fileCount":4,"zipByteSize":4678},{"version":"1.0.9","createdAt":"2026-08-04T06:19:14.403Z","changelog":"- Updated to version 1.0.9 with revised documentation for greater clarity. - Improved prerequisite section: clarified typical use cases for `p-image`. - Removed the file: skill-card.md. - No breaking changes to workflow or API; operational guide content remains consistent.","fileCount":4,"zipByteSize":4674},{"version":"1.0.8","createdAt":"2026-07-28T17:21:15.820Z","changelog":"- Added clarification on media source intake: now explicitly asks \"upload-only portrait vs generate/refine still\" during setup. - Intake process now includes an opening to activation of `generation-diversity` clarification. - Removed redundant file: skill-card.md. - Updated version metadata to 1.0.8.","fileCount":4,"zipByteSize":4828},{"version":"1.0.7","createdAt":"2026-07-23T12:36:24.749Z","changelog":"avatar-single-scene 1.0.7 - Major cleanup: Removed 14 reference and legacy files for a slimmer package. - SKILL.md now focuses on concise workflow, required gates, and phase checks. - Adds explicit prerequisites and install commands for all required skills. - Refines intake/intake Q&A, feedback gate, confirmation, and workflow documentation. - All guide content and checklists now referenced, not duplicated; tightly scoped to single-scene avatar flows.","fileCount":4,"zipByteSize":4664}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s173djpkkm1x4yfzg522h5vfp989mrn5:avatar-single-scene","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-avatar-single-scene/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-avatar-single-scene/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-avatar-single-scene/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-avatar-single-scene/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-avatar-single-scene/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-avatar-single-scene/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T14:46:31.408Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-avatar-single-scene/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-avatar-single-scene/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-avatar-single-scene/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-avatar-single-scene/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T12:22:19.987Z","emptyReason":null},"readme":"Skill: avatar-single-scene\n\nOwner: pruna-ai\n\nSummary: Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation.\n\nTags: ai:1.0.14, generative:1.0.14, latest:1.0.14, pruna:1.0.14\n\nVersion history:\n\nv1.0.14 | 2026-09-29T15:37:19.415Z | auto\n\n- Bumped version to 1.0.14.\n- Updated documentation in SKILL.md; no workflow or logic changes.\n- Removed skill-card.md file.\n\nv1.0.13 | 2026-09-17T14:00:39.956Z | auto\n\n- Version bump to 1.0.13.\n- Documentation update in SKILL.md; version and content refined.\n- skill-card.md file removed.\n\nv1.0.12 | 2026-09-10T13:59:19.356Z | auto\n\n- Added `p-image-ideogram` to prerequisites and intake as an option for more controlled photo generation.\n- Updated intake and workflow sections to prioritize `p-image-ideogram` for photoreal, text-in-image, or structured JSON cases—while keeping `p-image` for fast, cheap drafts.\n- Adjusted intake and workflow language to reflect new image skill usage.\n- Removed obsolete `skill-card.md` file.\n\nv1.0.11 | 2026-09-03T14:13:21.823Z | auto\n\n- Version bump to 1.0.11; updated metadata in SKILL.md.\n- Removed the redundant skill-card.md file.\n- No workflow or functionality changes. This is a documentation and organizational update only.\n\nv1.0.10 | 2026-08-28T07:59:10.835Z | auto\n\n- Version updated to 1.0.10.\n- Documentation cleanup: updated SKILL.md instructions.\n- Removed obsolete file: skill-card.md.\n- No workflow or logic changes.\n\nv1.0.9 | 2026-08-04T06:19:14.403Z | auto\n\n- Updated to version 1.0.9 with revised documentation for greater clarity.\n- Improved prerequisite section: clarified typical use cases for `p-image`.\n- Removed the file: skill-card.md.\n- No breaking changes to workflow or API; operational guide content remains consistent.\n\nv1.0.8 | 2026-07-28T17:21:15.820Z | auto\n\n- Added clarification on media source intake: now explicitly asks \"upload-only portrait vs generate/refine still\" during setup.\n- Intake process now includes an opening to activation of `generation-diversity` clarification.\n- Removed redundant file: skill-card.md.\n- Updated version metadata to 1.0.8.\n\nv1.0.7 | 2026-07-23T12:36:24.749Z | auto\n\navatar-single-scene 1.0.7\n\n- Major cleanup: Removed 14 reference and legacy files for a slimmer package.\n- SKILL.md now focuses on concise workflow, required gates, and phase checks.\n- Adds explicit prerequisites and install commands for all required skills.\n- Refines intake/intake Q&A, feedback gate, confirmation, and workflow documentation.\n- All guide content and checklists now referenced, not duplicated; tightly scoped to single-scene avatar flows.\n\nv1.0.6 | 2026-07-16T20:56:37.808Z | auto\n\n**avatar-single-scene v1.0.6**\n\n- Added shared generation policy section for clearer workflow and gating requirements.\n- Incorporated new references: approval red flags, generation quality checklists, and parallel execution.\n- Updated all policy/documentation links to reference the new structure under `references/policies/`.\n- Expanded workflow and gating steps for greater intake and quality review clarity.\n- Removed outdated references and condensed documentation for easier navigation.\n\nv1.0.2 | 2026-07-16T13:22:36.886Z | auto\n\navatar-single-scene v1.0.2\n\n- Updated version and metadata to 1.0.2 across files.\n- Improved and clarified documentation in SKILL.md, with enhanced intake and workflow gate language.\n- Expanded references and prompts around image, voice, and reproducibility (ritual seed).\n- Removed the obsolete skill-card.md file.\n- Minor restructuring of references for clarity and guidance.\n\nv1.0.1 | 2026-07-14T15:44:21.175Z | auto\n\n- Refined documentation to clarify skill scope: supports single talking-head scenes only, not multi-segment host reels or comparison grids.\n- Added detailed intake questionnaire and approval gates to ensure user confirmation before API calls.\n- Clarified scriptwriting guidelines to enforce natural, conversational dialogue and proper voice prompt usage.\n- Enhanced workflow steps for consistent image and voice continuity, including seeding and feedback gates.\n- Outlined package deliverables and recommended phase structure for API calls and local execution.\n\nv0.0.1 | 2026-06-30T12:36:28.199Z | auto\n\nInitial release of avatar-single-scene skill\n\n- Guides the creation of a single talking-head avatar video using one approved portrait and script.\n- Enforces mandatory feedback and approval gates before image or video generation.\n- Ensures consistent voice, persona, and image continuity for all single-scene avatar outputs.\n- Provides clear intake questions and workflow for user confirmation before API calls.\n- Includes detailed instructions for generating, approving, and running video avatar jobs using Pruna and related tools.\n\nArchive index:\n\nArchive v1.0.14: 4 files, 4760 bytes\n\nFiles: skill-card.md (1716b), skill.manifest.json (23b), SKILL.md (7423b), _meta.json (139b)\n\nFile v1.0.14:SKILL.md\n\n---\nname: avatar-single-scene\ndescription: Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation.\nlicense: MIT\nmetadata:\n  version: \"1.0.14\"\n  package: pruna-skills\n---\n\n## Prerequisites\n\nInstall and load these skills before generating (skip if already in context via `@pruna`):\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-image-ideogram` | Use when photo generation needs more control — photoreal results, text in the image, or structured JSON with hex colors and bounding boxes. Simpler photo generation, edits, and video use other skills in the suite. | `npx skills add PrunaAI/pruna-skills@p-image-ideogram -y` |\n| `p-image` | Use when someone explicitly wants the fastest, cheapest photo generation — mood boards, bulk panels, or quick iterations — not when controlled photoreal or in-image text is needed. | `npx skills add PrunaAI/pruna-skills@p-image -y` |\n| `p-image-edit` | Use when someone wants to edit an existing photo — change outfits or backgrounds, compose from reference images, or apply prompt-driven edits. | `npx skills add PrunaAI/pruna-skills@p-image-edit -y` |\n| `p-video-avatar` | Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. | `npx skills add PrunaAI/pruna-skills@p-video-avatar -y` |\n| `gemini-3.1-flash-tts` | Use when someone needs spoken narration or voiceover — explainer tracks, documentary lines, or voice to pair with generated video. | `npx skills add PrunaAI/pruna-skills@gemini-3.1-flash-tts -y` |\n\nOr install the full suite once: `npx skills add PrunaAI/pruna-skills@pruna -y`\n\nFollow each skill's **Before generating** / craft sections — do not restate guide content here.\n\n## Workflow habit\n\nIn **every reply**, name `` `avatar-single-scene` `` in backticks. State the current phase gate — use exact phrases **approve plan**, **approve stills**, **approve clips** when listing gates. Do **not** same-turn plan + paid video. Skip-review / burn-credits → follow `generation-diversity` **Red flags**.\n\n## Feedback gates (required)\n\n| Phase | What to show | Proceed when |\n|-------|--------------|--------------|\n| **0 — Plan** | Full `voice_script`, voice, still + motion plan | **approve plan** |\n| **A — Still** | Hero / portrait plate | **approve still** |\n| **B — Avatar** | Single `p-video-avatar` clip | User accepts |\n\n## Natural language script\n\nWrite **`voice_script`** as **real dialogue**: contractions, natural rhythm, short sentences—how a person talks on camera, not a press release. See `avatar-multi-scene` for good/bad examples.\n\n**`voice_prompt`** must describe **human delivery** (pacing, warmth, founder/conversational tone)—never paste marketing copy or script lines into it.\n\n## Voice and image continuity\n\n- **`voice` / `voice_language`:** Pick **one** preset pair for this clip’s speaker. If this character will appear again in a series or sequel clips, **reuse the same presets** so they sound like one person (same rule as the multi-scene skill’s cast ledger).\n- **Source portrait:** Prefer **one** approved reference URL (upload or generated). If you explore alternate backgrounds or styles, branch with **`p-image-edit`** from **that same** URL plus deltas—do not reinvent the face with an unrelated **`p-image`** unless the user agrees to a new identity.\n\n## Intake: ask before generating\n\nOpen intake → **`generation-diversity`** clarification intake.\n\n**Do not** call `POST /v1/predictions` until the user (or product owner) has answered these—record answers in the manifest:\n\n| Topic | Questions |\n|-------|-----------|\n| **Goal** | What must this one clip communicate (single CTA, greeting, demo line)? |\n| **Media source** | **Upload-only** portrait vs **generate/refine** still with `p-image-ideogram` / `p-image-edit` first (`p-image` for a cheap draft)? |\n| **Script** | Full **`voice_script`** as speakable copy—any mandatory pronunciation (names, acronyms)? |\n| **Voice** | Which Pruna **`voice`** and **`voice_language`**? Keep **`voice_prompt`** short (performance vibe only). |\n| **Look** | `9:16` / `16:9` still? Avatar **`resolution`** `720p` or `1080p`? |\n| **Motion** | Desired energy for **`video_prompt`**—specific camera angle and movement (positive wording only)? |\n| **Character** | Age, look, realism level (photoreal vs stylized)—see character sheet in `avatar-multi-scene` |\n| **Ritual seed (SSoT)** | Ritual seed at hero (`generation-diversity`); log **`ritual_seed`**; derive prompt axes. Identity continuity = approved plate URL. Optional **`api_seed`** only when user locks API reproducibility |\n| **Audio (optional)** | Upload `gemini-3.1-flash-tts` for lip-sync via **`input.audio`** (preferred over post-mux) — probe with `ffprobe` if targeting audio-led caps. Or use native **`voice_script`**. |\n\nIf any answer is missing and the user has not waived it, **ask** before generating.\n\n## Confirmation gate (mandatory)\n\nAfter intake:\n\n1. Show the **full `voice_script`**, chosen **`voice`** / **`voice_language`**, **`resolution`**, and a short description of the still + **`video_prompt`** plan.\n2. Ask for **explicit approval** before calling the API (e.g. user replies **go** / **approved**).\n3. If they edit the script, show the updated **`voice_script`** and confirm again when changes are material.\n\n## How the agent runs this\n\nOnce confirmed:\n\n1. Upload refs → build still with curl (`pruna-api`) → slop gate → **approve still**.\n2. Optional TTS → `ffprobe` → upload as `input.audio`.\n3. One async **`p-video-avatar`** job → poll → download.\n4. Manifest: intake, URLs, prediction ids, confirmed script snapshot.\n\n## Workflow (after confirmation)\n\n1. **References** — Upload assets with `POST /v1/files`; collect Pruna file URLs.\n2. **Still (if needed)** — Build one talking-head frame with **`p-image-ideogram`** and/or **`p-image-edit`** (`p-image` for a cheap draft). Run the slop gate before avatar.\n3. **Slop gate** — `generation-diversity` checklists; fix with image models until pass.\n4. **Avatar** — Call **`p-video-avatar`** with snake_case `input` (`image`, optional `last_frame_image`, **`voice_script`** *or* uploaded **`audio`**, `voice`, `voice_language`, **`voice_prompt`**, **`video_prompt`**, `resolution`, **`seed`**). Prefer uploaded **`audio`** from Gemini TTS when external narration quality matters. **Async only** (omit `Try-Sync`); poll to `succeeded`; download `generation_url`.\n5. **Manifest** — Store intake answers, URLs, prediction ids, prompts, retries, confirmed script snapshot.\n\n## Related\n\nRelated skills:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\n| `video-editing` | Use when assembling or polishing already-rendered clips with ffmpeg — concat, crossfades, burned captions and subtitles, text/logo overlays, before/after sliders, background music beds, platform export — or when composing a multi-layer HTML combination video with Hyperframes. Not for AI video generation, prompt craft, or model-based video edits. | `npx skills add PrunaAI/pruna-skills@video-editing -y` |\n\nFile v1.0.14:_meta.json\n\n{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"avatar-single-scene\",\n  \"version\": \"1.0.14\",\n  \"publishedAt\": 1790696239415\n}\n\nFile v1.0.14:skill-card.md\n\n## Description:\n\nUse when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[pruna-ai](https://clawhub.ai/user/pruna-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nCreators and marketing teams use this skill to plan and generate one speaking avatar clip from an approved portrait and script, with review gates before paid generation.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Related skills may introduce unreviewed behavior when installed.\n\nMitigation: Install only needed skills, review each separately, and pin exact versions or commits where possible.\n\nRisk: Portraits, scripts, audio, and generated media may be uploaded to Pruna APIs.\n\nMitigation: Confirm authorization to use the media and review sensitive material before uploading.\n\n## Reference(s):\n\n- [Avatar Single Scene on ClawHub](https://clawhub.ai/pruna-ai/skills/avatar-single-scene)\n\n## Skill Output:\n\n**Output Type(s):** [Markdown, Guidance, Shell commands, Files]\n\n**Output Format:** [Markdown guidance and commands, with a generated video clip and manifest after approval]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires plan and portrait approval before paid video generation.]\n\n## Skill Version(s):\n\n1.0.14 (source: release metadata and skill frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.14:skill.manifest.json\n\n{\n  \"references\": []\n}\n\nArchive v1.0.13: 4 files, 4837 bytes\n\nFiles: skill-card.md (1984b), skill.manifest.json (23b), SKILL.md (7423b), _meta.json (139b)\n\nFile v1.0.13:SKILL.md\n\n---\nname: avatar-single-scene\ndescription: Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation.\nlicense: MIT\nmetadata:\n  version: \"1.0.13\"\n  package: pruna-skills\n---\n\n## Prerequisites\n\nInstall and load these skills before generating (skip if already in context via `@pruna`):\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-image-ideogram` | Use when photo generation needs more control — photoreal results, text in the image, or structured JSON with hex colors and bounding boxes. Simpler photo generation, edits, and video use other skills in the suite. | `npx skills add PrunaAI/pruna-skills@p-image-ideogram -y` |\n| `p-image` | Use when someone explicitly wants the fastest, cheapest photo generation — mood boards, bulk panels, or quick iterations — not when controlled photoreal or in-image text is needed. | `npx skills add PrunaAI/pruna-skills@p-image -y` |\n| `p-image-edit` | Use when someone wants to edit an existing photo — change outfits or backgrounds, compose from reference images, or apply prompt-driven edits. | `npx skills add PrunaAI/pruna-skills@p-image-edit -y` |\n| `p-video-avatar` | Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. | `npx skills add PrunaAI/pruna-skills@p-video-avatar -y` |\n| `gemini-3.1-flash-tts` | Use when someone needs spoken narration or voiceover — explainer tracks, documentary lines, or voice to pair with generated video. | `npx skills add PrunaAI/pruna-skills@gemini-3.1-flash-tts -y` |\n\nOr install the full suite once: `npx skills add PrunaAI/pruna-skills@pruna -y`\n\nFollow each skill's **Before generating** / craft sections — do not restate guide content here.\n\n## Workflow habit\n\nIn **every reply**, name `` `avatar-single-scene` `` in backticks. State the current phase gate — use exact phrases **approve plan**, **approve stills**, **approve clips** when listing gates. Do **not** same-turn plan + paid video. Skip-review / burn-credits → follow `generation-diversity` **Red flags**.\n\n## Feedback gates (required)\n\n| Phase | What to show | Proceed when |\n|-------|--------------|--------------|\n| **0 — Plan** | Full `voice_script`, voice, still + motion plan | **approve plan** |\n| **A — Still** | Hero / portrait plate | **approve still** |\n| **B — Avatar** | Single `p-video-avatar` clip | User accepts |\n\n## Natural language script\n\nWrite **`voice_script`** as **real dialogue**: contractions, natural rhythm, short sentences—how a person talks on camera, not a press release. See `avatar-multi-scene` for good/bad examples.\n\n**`voice_prompt`** must describe **human delivery** (pacing, warmth, founder/conversational tone)—never paste marketing copy or script lines into it.\n\n## Voice and image continuity\n\n- **`voice` / `voice_language`:** Pick **one** preset pair for this clip’s speaker. If this character will appear again in a series or sequel clips, **reuse the same presets** so they sound like one person (same rule as the multi-scene skill’s cast ledger).\n- **Source portrait:** Prefer **one** approved reference URL (upload or generated). If you explore alternate backgrounds or styles, branch with **`p-image-edit`** from **that same** URL plus deltas—do not reinvent the face with an unrelated **`p-image`** unless the user agrees to a new identity.\n\n## Intake: ask before generating\n\nOpen intake → **`generation-diversity`** clarification intake.\n\n**Do not** call `POST /v1/predictions` until the user (or product owner) has answered these—record answers in the manifest:\n\n| Topic | Questions |\n|-------|-----------|\n| **Goal** | What must this one clip communicate (single CTA, greeting, demo line)? |\n| **Media source** | **Upload-only** portrait vs **generate/refine** still with `p-image-ideogram` / `p-image-edit` first (`p-image` for a cheap draft)? |\n| **Script** | Full **`voice_script`** as speakable copy—any mandatory pronunciation (names, acronyms)? |\n| **Voice** | Which Pruna **`voice`** and **`voice_language`**? Keep **`voice_prompt`** short (performance vibe only). |\n| **Look** | `9:16` / `16:9` still? Avatar **`resolution`** `720p` or `1080p`? |\n| **Motion** | Desired energy for **`video_prompt`**—specific camera angle and movement (positive wording only)? |\n| **Character** | Age, look, realism level (photoreal vs stylized)—see character sheet in `avatar-multi-scene` |\n| **Ritual seed (SSoT)** | Ritual seed at hero (`generation-diversity`); log **`ritual_seed`**; derive prompt axes. Identity continuity = approved plate URL. Optional **`api_seed`** only when user locks API reproducibility |\n| **Audio (optional)** | Upload `gemini-3.1-flash-tts` for lip-sync via **`input.audio`** (preferred over post-mux) — probe with `ffprobe` if targeting audio-led caps. Or use native **`voice_script`**. |\n\nIf any answer is missing and the user has not waived it, **ask** before generating.\n\n## Confirmation gate (mandatory)\n\nAfter intake:\n\n1. Show the **full `voice_script`**, chosen **`voice`** / **`voice_language`**, **`resolution`**, and a short description of the still + **`video_prompt`** plan.\n2. Ask for **explicit approval** before calling the API (e.g. user replies **go** / **approved**).\n3. If they edit the script, show the updated **`voice_script`** and confirm again when changes are material.\n\n## How the agent runs this\n\nOnce confirmed:\n\n1. Upload refs → build still with curl (`pruna-api`) → slop gate → **approve still**.\n2. Optional TTS → `ffprobe` → upload as `input.audio`.\n3. One async **`p-video-avatar`** job → poll → download.\n4. Manifest: intake, URLs, prediction ids, confirmed script snapshot.\n\n## Workflow (after confirmation)\n\n1. **References** — Upload assets with `POST /v1/files`; collect Pruna file URLs.\n2. **Still (if needed)** — Build one talking-head frame with **`p-image-ideogram`** and/or **`p-image-edit`** (`p-image` for a cheap draft). Run the slop gate before avatar.\n3. **Slop gate** — `generation-diversity` checklists; fix with image models until pass.\n4. **Avatar** — Call **`p-video-avatar`** with snake_case `input` (`image`, optional `last_frame_image`, **`voice_script`** *or* uploaded **`audio`**, `voice`, `voice_language`, **`voice_prompt`**, **`video_prompt`**, `resolution`, **`seed`**). Prefer uploaded **`audio`** from Gemini TTS when external narration quality matters. **Async only** (omit `Try-Sync`); poll to `succeeded`; download `generation_url`.\n5. **Manifest** — Store intake answers, URLs, prediction ids, prompts, retries, confirmed script snapshot.\n\n## Related\n\nRelated skills:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\n| `video-editing` | Use when assembling or polishing already-rendered clips with ffmpeg — concat, crossfades, burned captions and subtitles, text/logo overlays, before/after sliders, background music beds, platform export — or when composing a multi-layer HTML combination video with Hyperframes. Not for AI video generation, prompt craft, or model-based video edits. | `npx skills add PrunaAI/pruna-skills@video-editing -y` |\n\nFile v1.0.13:_meta.json\n\n{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"avatar-single-scene\",\n  \"version\": \"1.0.13\",\n  \"publishedAt\": 1789653639956\n}\n\nFile v1.0.13:skill-card.md\n\n## Description:\n\nUse when someone wants one polished host-on-camera beat - a speaking person with intake and approval gates before generation.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[pruna-ai](https://clawhub.ai/user/pruna-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to plan and generate a single host-on-camera avatar clip with explicit intake, still-image approval, and clip approval gates before generation.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Setup asks users to install several remote skills through unpinned npx commands.\n\nMitigation: Review install commands before use and prefer pinned versions or verified commits for the skills CLI and PrunaAI skill references.\n\nRisk: The workflow may upload portraits, audio, scripts, prompts, and generated asset URLs to the provider.\n\nMitigation: Confirm that the user is comfortable sharing those assets with the provider before generation.\n\nRisk: Paid generation calls could run before review if approval gates are skipped.\n\nMitigation: Keep the plan, still, and clip approval gates enabled before any paid generation call.\n\n## Reference(s):\n\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Markdown, Shell commands, Configuration]\n\n**Output Format:** [Markdown guidance with inline shell commands, API parameter names, and manifest requirements]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Produces an agent workflow for intake, approval gates, still generation or upload, avatar generation, and manifest capture.]\n\n## Skill Version(s):\n\n1.0.13 (source: server release evidence and SKILL.md frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.13:skill.manifest.json\n\n{\n  \"references\": []\n}\n\nArchive v1.0.12: 4 files, 4942 bytes\n\nFiles: skill-card.md (2146b), skill.manifest.json (23b), SKILL.md (7423b), _meta.json (139b)\n\nFile v1.0.12:SKILL.md\n\n---\nname: avatar-single-scene\ndescription: Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation.\nlicense: MIT\nmetadata:\n  version: \"1.0.12\"\n  package: pruna-skills\n---\n\n## Prerequisites\n\nInstall and load these skills before generating (skip if already in context via `@pruna`):\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-image-ideogram` | Use when photo generation needs more control — photoreal results, text in the image, or structured JSON with hex colors and bounding boxes. Simpler photo generation, edits, and video use other skills in the suite. | `npx skills add PrunaAI/pruna-skills@p-image-ideogram -y` |\n| `p-image` | Use when someone explicitly wants the fastest, cheapest photo generation — mood boards, bulk panels, or quick iterations — not when controlled photoreal or in-image text is needed. | `npx skills add PrunaAI/pruna-skills@p-image -y` |\n| `p-image-edit` | Use when someone wants to edit an existing photo — change outfits or backgrounds, compose from reference images, or apply prompt-driven edits. | `npx skills add PrunaAI/pruna-skills@p-image-edit -y` |\n| `p-video-avatar` | Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. | `npx skills add PrunaAI/pruna-skills@p-video-avatar -y` |\n| `gemini-3.1-flash-tts` | Use when someone needs spoken narration or voiceover — explainer tracks, documentary lines, or voice to pair with generated video. | `npx skills add PrunaAI/pruna-skills@gemini-3.1-flash-tts -y` |\n\nOr install the full suite once: `npx skills add PrunaAI/pruna-skills@pruna -y`\n\nFollow each skill's **Before generating** / craft sections — do not restate guide content here.\n\n## Workflow habit\n\nIn **every reply**, name `` `avatar-single-scene` `` in backticks. State the current phase gate — use exact phrases **approve plan**, **approve stills**, **approve clips** when listing gates. Do **not** same-turn plan + paid video. Skip-review / burn-credits → follow `generation-diversity` **Red flags**.\n\n## Feedback gates (required)\n\n| Phase | What to show | Proceed when |\n|-------|--------------|--------------|\n| **0 — Plan** | Full `voice_script`, voice, still + motion plan | **approve plan** |\n| **A — Still** | Hero / portrait plate | **approve still** |\n| **B — Avatar** | Single `p-video-avatar` clip | User accepts |\n\n## Natural language script\n\nWrite **`voice_script`** as **real dialogue**: contractions, natural rhythm, short sentences—how a person talks on camera, not a press release. See `avatar-multi-scene` for good/bad examples.\n\n**`voice_prompt`** must describe **human delivery** (pacing, warmth, founder/conversational tone)—never paste marketing copy or script lines into it.\n\n## Voice and image continuity\n\n- **`voice` / `voice_language`:** Pick **one** preset pair for this clip’s speaker. If this character will appear again in a series or sequel clips, **reuse the same presets** so they sound like one person (same rule as the multi-scene skill’s cast ledger).\n- **Source portrait:** Prefer **one** approved reference URL (upload or generated). If you explore alternate backgrounds or styles, branch with **`p-image-edit`** from **that same** URL plus deltas—do not reinvent the face with an unrelated **`p-image`** unless the user agrees to a new identity.\n\n## Intake: ask before generating\n\nOpen intake → **`generation-diversity`** clarification intake.\n\n**Do not** call `POST /v1/predictions` until the user (or product owner) has answered these—record answers in the manifest:\n\n| Topic | Questions |\n|-------|-----------|\n| **Goal** | What must this one clip communicate (single CTA, greeting, demo line)? |\n| **Media source** | **Upload-only** portrait vs **generate/refine** still with `p-image-ideogram` / `p-image-edit` first (`p-image` for a cheap draft)? |\n| **Script** | Full **`voice_script`** as speakable copy—any mandatory pronunciation (names, acronyms)? |\n| **Voice** | Which Pruna **`voice`** and **`voice_language`**? Keep **`voice_prompt`** short (performance vibe only). |\n| **Look** | `9:16` / `16:9` still? Avatar **`resolution`** `720p` or `1080p`? |\n| **Motion** | Desired energy for **`video_prompt`**—specific camera angle and movement (positive wording only)? |\n| **Character** | Age, look, realism level (photoreal vs stylized)—see character sheet in `avatar-multi-scene` |\n| **Ritual seed (SSoT)** | Ritual seed at hero (`generation-diversity`); log **`ritual_seed`**; derive prompt axes. Identity continuity = approved plate URL. Optional **`api_seed`** only when user locks API reproducibility |\n| **Audio (optional)** | Upload `gemini-3.1-flash-tts` for lip-sync via **`input.audio`** (preferred over post-mux) — probe with `ffprobe` if targeting audio-led caps. Or use native **`voice_script`**. |\n\nIf any answer is missing and the user has not waived it, **ask** before generating.\n\n## Confirmation gate (mandatory)\n\nAfter intake:\n\n1. Show the **full `voice_script`**, chosen **`voice`** / **`voice_language`**, **`resolution`**, and a short description of the still + **`video_prompt`** plan.\n2. Ask for **explicit approval** before calling the API (e.g. user replies **go** / **approved**).\n3. If they edit the script, show the updated **`voice_script`** and confirm again when changes are material.\n\n## How the agent runs this\n\nOnce confirmed:\n\n1. Upload refs → build still with curl (`pruna-api`) → slop gate → **approve still**.\n2. Optional TTS → `ffprobe` → upload as `input.audio`.\n3. One async **`p-video-avatar`** job → poll → download.\n4. Manifest: intake, URLs, prediction ids, confirmed script snapshot.\n\n## Workflow (after confirmation)\n\n1. **References** — Upload assets with `POST /v1/files`; collect Pruna file URLs.\n2. **Still (if needed)** — Build one talking-head frame with **`p-image-ideogram`** and/or **`p-image-edit`** (`p-image` for a cheap draft). Run the slop gate before avatar.\n3. **Slop gate** — `generation-diversity` checklists; fix with image models until pass.\n4. **Avatar** — Call **`p-video-avatar`** with snake_case `input` (`image`, optional `last_frame_image`, **`voice_script`** *or* uploaded **`audio`**, `voice`, `voice_language`, **`voice_prompt`**, **`video_prompt`**, `resolution`, **`seed`**). Prefer uploaded **`audio`** from Gemini TTS when external narration quality matters. **Async only** (omit `Try-Sync`); poll to `succeeded`; download `generation_url`.\n5. **Manifest** — Store intake answers, URLs, prediction ids, prompts, retries, confirmed script snapshot.\n\n## Related\n\nRelated skills:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\n| `video-editing` | Use when assembling or polishing already-rendered clips with ffmpeg — concat, crossfades, burned captions and subtitles, text/logo overlays, before/after sliders, background music beds, platform export — or when composing a multi-layer HTML combination video with Hyperframes. Not for AI video generation, prompt craft, or model-based video edits. | `npx skills add PrunaAI/pruna-skills@video-editing -y` |\n\nFile v1.0.12:_meta.json\n\n{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"avatar-single-scene\",\n  \"version\": \"1.0.12\",\n  \"publishedAt\": 1789048759356\n}\n\nFile v1.0.12:skill-card.md\n\n## Description:\n\nUse when someone wants one polished host-on-camera beat: a speaking person with intake and approval gates before generation.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[pruna-ai](https://clawhub.ai/user/pruna-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users, creators, and developers use this skill to plan and generate a single host-on-camera avatar clip with explicit approval gates before still-image and video generation.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill asks users to install mutable third-party skills through unattended npx commands.\n\nMitigation: Review or pin the referenced skills before installation, and run them without broad local credentials available.\n\nRisk: The skill contains broad reply-format behavior that could affect unrelated responses.\n\nMitigation: Apply the reply-format requirement only while actively using the avatar-single-scene workflow.\n\nRisk: Avatar generation can consume paid video or image credits if approval gates are skipped.\n\nMitigation: Require explicit approval before generation, keep the plan and still-image gates separate, and do not perform planning and paid video generation in the same turn.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/pruna-ai/skills/avatar-single-scene)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with inline commands, prompt fields, approval checkpoints, and manifest details]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include voice_script, voice settings, image and video prompts, API call guidance, generated asset URLs, prediction IDs, and retry notes.]\n\n## Skill Version(s):\n\n1.0.12 (source: server release evidence and frontmatter metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.12:skill.manifest.json\n\n{\n  \"references\": []\n}\n\nArchive v1.0.11: 4 files, 4780 bytes\n\nFiles: skill-card.md (2075b), skill.manifest.json (23b), SKILL.md (7044b), _meta.json (139b)\n\nFile v1.0.11:SKILL.md\n\n---\nname: avatar-single-scene\ndescription: Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation.\nlicense: MIT\nmetadata:\n  version: \"1.0.11\"\n  package: pruna-skills\n---\n\n## Prerequisites\n\nInstall and load these skills before generating (skip if already in context via `@pruna`):\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-image` | Use when someone explicitly wants the fastest, cheapest photo generation — mood boards, bulk panels, or quick iterations — not when controlled photoreal or in-image text is needed. | `npx skills add PrunaAI/pruna-skills@p-image -y` |\n| `p-image-edit` | Use when someone wants to edit an existing photo — change outfits or backgrounds, compose from reference images, or apply prompt-driven edits. | `npx skills add PrunaAI/pruna-skills@p-image-edit -y` |\n| `p-video-avatar` | Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. | `npx skills add PrunaAI/pruna-skills@p-video-avatar -y` |\n| `gemini-3.1-flash-tts` | Use when someone needs spoken narration or voiceover — explainer tracks, documentary lines, or voice to pair with generated video. | `npx skills add PrunaAI/pruna-skills@gemini-3.1-flash-tts -y` |\n\nOr install the full suite once: `npx skills add PrunaAI/pruna-skills@pruna -y`\n\nFollow each skill's **Before generating** / craft sections — do not restate guide content here.\n\n## Workflow habit\n\nIn **every reply**, name `` `avatar-single-scene` `` in backticks. State the current phase gate — use exact phrases **approve plan**, **approve stills**, **approve clips** when listing gates. Do **not** same-turn plan + paid video. Skip-review / burn-credits → follow `generation-diversity` **Red flags**.\n\n## Feedback gates (required)\n\n| Phase | What to show | Proceed when |\n|-------|--------------|--------------|\n| **0 — Plan** | Full `voice_script`, voice, still + motion plan | **approve plan** |\n| **A — Still** | Hero / portrait plate | **approve still** |\n| **B — Avatar** | Single `p-video-avatar` clip | User accepts |\n\n## Natural language script\n\nWrite **`voice_script`** as **real dialogue**: contractions, natural rhythm, short sentences—how a person talks on camera, not a press release. See `avatar-multi-scene` for good/bad examples.\n\n**`voice_prompt`** must describe **human delivery** (pacing, warmth, founder/conversational tone)—never paste marketing copy or script lines into it.\n\n## Voice and image continuity\n\n- **`voice` / `voice_language`:** Pick **one** preset pair for this clip’s speaker. If this character will appear again in a series or sequel clips, **reuse the same presets** so they sound like one person (same rule as the multi-scene skill’s cast ledger).\n- **Source portrait:** Prefer **one** approved reference URL (upload or generated). If you explore alternate backgrounds or styles, branch with **`p-image-edit`** from **that same** URL plus deltas—do not reinvent the face with an unrelated **`p-image`** unless the user agrees to a new identity.\n\n## Intake: ask before generating\n\nOpen intake → **`generation-diversity`** clarification intake.\n\n**Do not** call `POST /v1/predictions` until the user (or product owner) has answered these—record answers in the manifest:\n\n| Topic | Questions |\n|-------|-----------|\n| **Goal** | What must this one clip communicate (single CTA, greeting, demo line)? |\n| **Media source** | **Upload-only** portrait vs **generate/refine** still with `p-image` / `p-image-edit` first? |\n| **Script** | Full **`voice_script`** as speakable copy—any mandatory pronunciation (names, acronyms)? |\n| **Voice** | Which Pruna **`voice`** and **`voice_language`**? Keep **`voice_prompt`** short (performance vibe only). |\n| **Look** | `9:16` / `16:9` still? Avatar **`resolution`** `720p` or `1080p`? |\n| **Motion** | Desired energy for **`video_prompt`**—specific camera angle and movement (positive wording only)? |\n| **Character** | Age, look, realism level (photoreal vs stylized)—see character sheet in `avatar-multi-scene` |\n| **Ritual seed (SSoT)** | Ritual seed at hero (`generation-diversity`); log **`ritual_seed`**; derive prompt axes. Identity continuity = approved plate URL. Optional **`api_seed`** only when user locks API reproducibility |\n| **Audio (optional)** | Upload `gemini-3.1-flash-tts` for lip-sync via **`input.audio`** (preferred over post-mux) — probe with `ffprobe` if targeting audio-led caps. Or use native **`voice_script`**. |\n\nIf any answer is missing and the user has not waived it, **ask** before generating.\n\n## Confirmation gate (mandatory)\n\nAfter intake:\n\n1. Show the **full `voice_script`**, chosen **`voice`** / **`voice_language`**, **`resolution`**, and a short description of the still + **`video_prompt`** plan.\n2. Ask for **explicit approval** before calling the API (e.g. user replies **go** / **approved**).\n3. If they edit the script, show the updated **`voice_script`** and confirm again when changes are material.\n\n## How the agent runs this\n\nOnce confirmed:\n\n1. Upload refs → build still with curl (`pruna-api`) → slop gate → **approve still**.\n2. Optional TTS → `ffprobe` → upload as `input.audio`.\n3. One async **`p-video-avatar`** job → poll → download.\n4. Manifest: intake, URLs, prediction ids, confirmed script snapshot.\n\n## Workflow (after confirmation)\n\n1. **References** — Upload assets with `POST /v1/files`; collect Pruna file URLs.\n2. **Still (if needed)** — Build one talking-head frame with **`p-image`** and/or **`p-image-edit`**. Run the slop gate before avatar.\n3. **Slop gate** — `generation-diversity` checklists; fix with image models until pass.\n4. **Avatar** — Call **`p-video-avatar`** with snake_case `input` (`image`, optional `last_frame_image`, **`voice_script`** *or* uploaded **`audio`**, `voice`, `voice_language`, **`voice_prompt`**, **`video_prompt`**, `resolution`, **`seed`**). Prefer uploaded **`audio`** from Gemini TTS when external narration quality matters. **Async only** (omit `Try-Sync`); poll to `succeeded`; download `generation_url`.\n5. **Manifest** — Store intake answers, URLs, prediction ids, prompts, retries, confirmed script snapshot.\n\n## Related\n\nRelated skills:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\n| `video-editing` | Use when assembling or polishing already-rendered clips with ffmpeg — concat, crossfades, burned captions and subtitles, text/logo overlays, before/after sliders, background music beds, platform export — or when composing a multi-layer HTML combination video with Hyperframes. Not for AI video generation, prompt craft, or model-based video edits. | `npx skills add PrunaAI/pruna-skills@video-editing -y` |\n\nFile v1.0.11:_meta.json\n\n{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"avatar-single-scene\",\n  \"version\": \"1.0.11\",\n  \"publishedAt\": 1788444801823\n}\n\nFile v1.0.11:skill-card.md\n\n## Description:\n\nUse when someone wants one polished host-on-camera beat: a speaking person with intake and approval gates before generation.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[pruna-ai](https://clawhub.ai/user/pruna-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal creators, marketers, and developers use this skill to plan and generate one approved speaking-avatar video scene with a script, voice choice, portrait or still source, motion prompt, and explicit approval gates before paid generation.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Prerequisite installation commands may fetch external skill sources.\n\nMitigation: Review the visible npx install commands before use and pin or otherwise verify skill sources when your environment requires supply-chain controls.\n\nRisk: Portrait, audio, and script material may be uploaded to Pruna generation services.\n\nMitigation: Use only material you are authorized and comfortable uploading, and apply any privacy, consent, or data-handling requirements before generation.\n\nRisk: Paid generation can spend API credits after approval gates.\n\nMitigation: Keep the approve plan and approve still gates in place before starting avatar generation.\n\n## Reference(s):\n\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown guidance with inline shell commands and structured generation parameters]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Produces approval-gated plans, voice scripts, prompts, asset URLs, prediction identifiers, and manifest records for a single avatar scene.]\n\n## Skill Version(s):\n\n1.0.11 (source: server release evidence and skill frontmatter metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.11:skill.manifest.json\n\n{\n  \"references\": []\n}\n\nArchive v1.0.10: 4 files, 4678 bytes\n\nFiles: skill-card.md (1875b), skill.manifest.json (23b), SKILL.md (7044b), _meta.json (139b)\n\nFile v1.0.10:SKILL.md\n\n---\nname: avatar-single-scene\ndescription: Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation.\nlicense: MIT\nmetadata:\n  version: \"1.0.10\"\n  package: pruna-skills\n---\n\n## Prerequisites\n\nInstall and load these skills before generating (skip if already in context via `@pruna`):\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-image` | Use when someone explicitly wants the fastest, cheapest photo generation — mood boards, bulk panels, or quick iterations — not when controlled photoreal or in-image text is needed. | `npx skills add PrunaAI/pruna-skills@p-image -y` |\n| `p-image-edit` | Use when someone wants to edit an existing photo — change outfits or backgrounds, compose from reference images, or apply prompt-driven edits. | `npx skills add PrunaAI/pruna-skills@p-image-edit -y` |\n| `p-video-avatar` | Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. | `npx skills add PrunaAI/pruna-skills@p-video-avatar -y` |\n| `gemini-3.1-flash-tts` | Use when someone needs spoken narration or voiceover — explainer tracks, documentary lines, or voice to pair with generated video. | `npx skills add PrunaAI/pruna-skills@gemini-3.1-flash-tts -y` |\n\nOr install the full suite once: `npx skills add PrunaAI/pruna-skills@pruna -y`\n\nFollow each skill's **Before generating** / craft sections — do not restate guide content here.\n\n## Workflow habit\n\nIn **every reply**, name `` `avatar-single-scene` `` in backticks. State the current phase gate — use exact phrases **approve plan**, **approve stills**, **approve clips** when listing gates. Do **not** same-turn plan + paid video. Skip-review / burn-credits → follow `generation-diversity` **Red flags**.\n\n## Feedback gates (required)\n\n| Phase | What to show | Proceed when |\n|-------|--------------|--------------|\n| **0 — Plan** | Full `voice_script`, voice, still + motion plan | **approve plan** |\n| **A — Still** | Hero / portrait plate | **approve still** |\n| **B — Avatar** | Single `p-video-avatar` clip | User accepts |\n\n## Natural language script\n\nWrite **`voice_script`** as **real dialogue**: contractions, natural rhythm, short sentences—how a person talks on camera, not a press release. See `avatar-multi-scene` for good/bad examples.\n\n**`voice_prompt`** must describe **human delivery** (pacing, warmth, founder/conversational tone)—never paste marketing copy or script lines into it.\n\n## Voice and image continuity\n\n- **`voice` / `voice_language`:** Pick **one** preset pair for this clip’s speaker. If this character will appear again in a series or sequel clips, **reuse the same presets** so they sound like one person (same rule as the multi-scene skill’s cast ledger).\n- **Source portrait:** Prefer **one** approved reference URL (upload or generated). If you explore alternate backgrounds or styles, branch with **`p-image-edit`** from **that same** URL plus deltas—do not reinvent the face with an unrelated **`p-image`** unless the user agrees to a new identity.\n\n## Intake: ask before generating\n\nOpen intake → **`generation-diversity`** clarification intake.\n\n**Do not** call `POST /v1/predictions` until the user (or product owner) has answered these—record answers in the manifest:\n\n| Topic | Questions |\n|-------|-----------|\n| **Goal** | What must this one clip communicate (single CTA, greeting, demo line)? |\n| **Media source** | **Upload-only** portrait vs **generate/refine** still with `p-image` / `p-image-edit` first? |\n| **Script** | Full **`voice_script`** as speakable copy—any mandatory pronunciation (names, acronyms)? |\n| **Voice** | Which Pruna **`voice`** and **`voice_language`**? Keep **`voice_prompt`** short (performance vibe only). |\n| **Look** | `9:16` / `16:9` still? Avatar **`resolution`** `720p` or `1080p`? |\n| **Motion** | Desired energy for **`video_prompt`**—specific camera angle and movement (positive wording only)? |\n| **Character** | Age, look, realism level (photoreal vs stylized)—see character sheet in `avatar-multi-scene` |\n| **Ritual seed (SSoT)** | Ritual seed at hero (`generation-diversity`); log **`ritual_seed`**; derive prompt axes. Identity continuity = approved plate URL. Optional **`api_seed`** only when user locks API reproducibility |\n| **Audio (optional)** | Upload `gemini-3.1-flash-tts` for lip-sync via **`input.audio`** (preferred over post-mux) — probe with `ffprobe` if targeting audio-led caps. Or use native **`voice_script`**. |\n\nIf any answer is missing and the user has not waived it, **ask** before generating.\n\n## Confirmation gate (mandatory)\n\nAfter intake:\n\n1. Show the **full `voice_script`**, chosen **`voice`** / **`voice_language`**, **`resolution`**, and a short description of the still + **`video_prompt`** plan.\n2. Ask for **explicit approval** before calling the API (e.g. user replies **go** / **approved**).\n3. If they edit the script, show the updated **`voice_script`** and confirm again when changes are material.\n\n## How the agent runs this\n\nOnce confirmed:\n\n1. Upload refs → build still with curl (`pruna-api`) → slop gate → **approve still**.\n2. Optional TTS → `ffprobe` → upload as `input.audio`.\n3. One async **`p-video-avatar`** job → poll → download.\n4. Manifest: intake, URLs, prediction ids, confirmed script snapshot.\n\n## Workflow (after confirmation)\n\n1. **References** — Upload assets with `POST /v1/files`; collect Pruna file URLs.\n2. **Still (if needed)** — Build one talking-head frame with **`p-image`** and/or **`p-image-edit`**. Run the slop gate before avatar.\n3. **Slop gate** — `generation-diversity` checklists; fix with image models until pass.\n4. **Avatar** — Call **`p-video-avatar`** with snake_case `input` (`image`, optional `last_frame_image`, **`voice_script`** *or* uploaded **`audio`**, `voice`, `voice_language`, **`voice_prompt`**, **`video_prompt`**, `resolution`, **`seed`**). Prefer uploaded **`audio`** from Gemini TTS when external narration quality matters. **Async only** (omit `Try-Sync`); poll to `succeeded`; download `generation_url`.\n5. **Manifest** — Store intake answers, URLs, prediction ids, prompts, retries, confirmed script snapshot.\n\n## Related\n\nRelated skills:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\n| `video-editing` | Use when assembling or polishing already-rendered clips with ffmpeg — concat, crossfades, burned captions and subtitles, text/logo overlays, before/after sliders, background music beds, platform export — or when composing a multi-layer HTML combination video with Hyperframes. Not for AI video generation, prompt craft, or model-based video edits. | `npx skills add PrunaAI/pruna-skills@video-editing -y` |\n\nFile v1.0.10:_meta.json\n\n{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"avatar-single-scene\",\n  \"version\": \"1.0.10\",\n  \"publishedAt\": 1787903950835\n}\n\nFile v1.0.10:skill-card.md\n\n## Description:\n\nUse when someone wants one polished host-on-camera beat - a speaking person with intake and approval gates before generation.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[pruna-ai](https://clawhub.ai/user/pruna-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal creators and developers use this skill to plan and generate a single host-on-camera avatar clip with intake, still approval, and clip approval gates before paid generation.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The workflow may send portrait images, scripts, and optional audio to referenced generation providers.\n\nMitigation: Use the skill only when the user is comfortable with that data sharing and has consent and rights for the person shown.\n\nRisk: Paid avatar generation could proceed before the user has approved the plan and still image.\n\nMitigation: Follow the documented approval gates before generation: approve plan, approve still, then proceed to the avatar clip.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/pruna-ai/skills/avatar-single-scene)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with inline commands and generation workflow details]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Includes approval gates, intake fields, prompt guidance, and manifest expectations for a single avatar video workflow.]\n\n## Skill Version(s):\n\n1.0.10 (source: server release evidence and frontmatter metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.10:skill.manifest.json\n\n{\n  \"references\": []\n}\n\nArchive v1.0.9: 4 files, 4674 bytes\n\nFiles: skill-card.md (1903b), skill.manifest.json (23b), SKILL.md (7043b), _meta.json (138b)\n\nFile v1.0.9:SKILL.md\n\n---\nname: avatar-single-scene\ndescription: Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation.\nlicense: MIT\nmetadata:\n  version: \"1.0.9\"\n  package: pruna-skills\n---\n\n## Prerequisites\n\nInstall and load these skills before generating (skip if already in context via `@pruna`):\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-image` | Use when someone explicitly wants the fastest, cheapest photo generation — mood boards, bulk panels, or quick iterations — not when controlled photoreal or in-image text is needed. | `npx skills add PrunaAI/pruna-skills@p-image -y` |\n| `p-image-edit` | Use when someone wants to edit an existing photo — change outfits or backgrounds, compose from reference images, or apply prompt-driven edits. | `npx skills add PrunaAI/pruna-skills@p-image-edit -y` |\n| `p-video-avatar` | Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. | `npx skills add PrunaAI/pruna-skills@p-video-avatar -y` |\n| `gemini-3.1-flash-tts` | Use when someone needs spoken narration or voiceover — explainer tracks, documentary lines, or voice to pair with generated video. | `npx skills add PrunaAI/pruna-skills@gemini-3.1-flash-tts -y` |\n\nOr install the full suite once: `npx skills add PrunaAI/pruna-skills@pruna -y`\n\nFollow each skill's **Before generating** / craft sections — do not restate guide content here.\n\n## Workflow habit\n\nIn **every reply**, name `` `avatar-single-scene` `` in backticks. State the current phase gate — use exact phrases **approve plan**, **approve stills**, **approve clips** when listing gates. Do **not** same-turn plan + paid video. Skip-review / burn-credits → follow `generation-diversity` **Red flags**.\n\n## Feedback gates (required)\n\n| Phase | What to show | Proceed when |\n|-------|--------------|--------------|\n| **0 — Plan** | Full `voice_script`, voice, still + motion plan | **approve plan** |\n| **A — Still** | Hero / portrait plate | **approve still** |\n| **B — Avatar** | Single `p-video-avatar` clip | User accepts |\n\n## Natural language script\n\nWrite **`voice_script`** as **real dialogue**: contractions, natural rhythm, short sentences—how a person talks on camera, not a press release. See `avatar-multi-scene` for good/bad examples.\n\n**`voice_prompt`** must describe **human delivery** (pacing, warmth, founder/conversational tone)—never paste marketing copy or script lines into it.\n\n## Voice and image continuity\n\n- **`voice` / `voice_language`:** Pick **one** preset pair for this clip’s speaker. If this character will appear again in a series or sequel clips, **reuse the same presets** so they sound like one person (same rule as the multi-scene skill’s cast ledger).\n- **Source portrait:** Prefer **one** approved reference URL (upload or generated). If you explore alternate backgrounds or styles, branch with **`p-image-edit`** from **that same** URL plus deltas—do not reinvent the face with an unrelated **`p-image`** unless the user agrees to a new identity.\n\n## Intake: ask before generating\n\nOpen intake → **`generation-diversity`** clarification intake.\n\n**Do not** call `POST /v1/predictions` until the user (or product owner) has answered these—record answers in the manifest:\n\n| Topic | Questions |\n|-------|-----------|\n| **Goal** | What must this one clip communicate (single CTA, greeting, demo line)? |\n| **Media source** | **Upload-only** portrait vs **generate/refine** still with `p-image` / `p-image-edit` first? |\n| **Script** | Full **`voice_script`** as speakable copy—any mandatory pronunciation (names, acronyms)? |\n| **Voice** | Which Pruna **`voice`** and **`voice_language`**? Keep **`voice_prompt`** short (performance vibe only). |\n| **Look** | `9:16` / `16:9` still? Avatar **`resolution`** `720p` or `1080p`? |\n| **Motion** | Desired energy for **`video_prompt`**—specific camera angle and movement (positive wording only)? |\n| **Character** | Age, look, realism level (photoreal vs stylized)—see character sheet in `avatar-multi-scene` |\n| **Ritual seed (SSoT)** | Ritual seed at hero (`generation-diversity`); log **`ritual_seed`**; derive prompt axes. Identity continuity = approved plate URL. Optional **`api_seed`** only when user locks API reproducibility |\n| **Audio (optional)** | Upload `gemini-3.1-flash-tts` for lip-sync via **`input.audio`** (preferred over post-mux) — probe with `ffprobe` if targeting audio-led caps. Or use native **`voice_script`**. |\n\nIf any answer is missing and the user has not waived it, **ask** before generating.\n\n## Confirmation gate (mandatory)\n\nAfter intake:\n\n1. Show the **full `voice_script`**, chosen **`voice`** / **`voice_language`**, **`resolution`**, and a short description of the still + **`video_prompt`** plan.\n2. Ask for **explicit approval** before calling the API (e.g. user replies **go** / **approved**).\n3. If they edit the script, show the updated **`voice_script`** and confirm again when changes are material.\n\n## How the agent runs this\n\nOnce confirmed:\n\n1. Upload refs → build still with curl (`pruna-api`) → slop gate → **approve still**.\n2. Optional TTS → `ffprobe` → upload as `input.audio`.\n3. One async **`p-video-avatar`** job → poll → download.\n4. Manifest: intake, URLs, prediction ids, confirmed script snapshot.\n\n## Workflow (after confirmation)\n\n1. **References** — Upload assets with `POST /v1/files`; collect Pruna file URLs.\n2. **Still (if needed)** — Build one talking-head frame with **`p-image`** and/or **`p-image-edit`**. Run the slop gate before avatar.\n3. **Slop gate** — `generation-diversity` checklists; fix with image models until pass.\n4. **Avatar** — Call **`p-video-avatar`** with snake_case `input` (`image`, optional `last_frame_image`, **`voice_script`** *or* uploaded **`audio`**, `voice`, `voice_language`, **`voice_prompt`**, **`video_prompt`**, `resolution`, **`seed`**). Prefer uploaded **`audio`** from Gemini TTS when external narration quality matters. **Async only** (omit `Try-Sync`); poll to `succeeded`; download `generation_url`.\n5. **Manifest** — Store intake answers, URLs, prediction ids, prompts, retries, confirmed script snapshot.\n\n## Related\n\nRelated skills:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\n| `video-editing` | Use when assembling or polishing already-rendered clips with ffmpeg — concat, crossfades, burned captions and subtitles, text/logo overlays, before/after sliders, background music beds, platform export — or when composing a multi-layer HTML combination video with Hyperframes. Not for AI video generation, prompt craft, or model-based video edits. | `npx skills add PrunaAI/pruna-skills@video-editing -y` |\n\nFile v1.0.9:_meta.json\n\n{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"avatar-single-scene\",\n  \"version\": \"1.0.9\",\n  \"publishedAt\": 1785824354403\n}\n\nFile v1.0.9:skill-card.md\n\n## Description: <br>\nGuides an agent through creating one polished host-on-camera avatar clip with intake, script confirmation, still approval, and avatar generation gates. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[pruna-ai](https://clawhub.ai/user/pruna-ai) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal creators, developers, and production teams use this skill to plan and produce one approved talking-head avatar clip from a portrait, speakable script, voice settings, and motion guidance. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Portraits, scripts, audio, and prompts may be uploaded to external generation services. <br>\nMitigation: Confirm user authorization and data handling expectations before upload, and avoid sensitive personal data unless the user has approved that use. <br>\nRisk: Paid avatar generation can incur API costs if approval gates are skipped. <br>\nMitigation: Keep the explicit plan and still-image approval gates in place before starting avatar generation. <br>\n\n\n## Reference(s): <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Guidance, Markdown, Shell commands, Configuration] <br>\n**Output Format:** [Markdown guidance with inline shell commands and structured generation parameters] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Includes approval gates for the plan, still image, and avatar clip before paid generation.] <br>\n\n## Skill Version(s): <br>\n1.0.9 (source: server release evidence and SKILL.md frontmatter) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.9:skill.manifest.json\n\n{\n  \"references\": []\n}\n\nArchive v1.0.8: 4 files, 4828 bytes\n\nFiles: skill-card.md (2368b), skill.manifest.json (23b), SKILL.md (6979b), _meta.json (138b)\n\nFile v1.0.8:SKILL.md\n\n---\nname: avatar-single-scene\ndescription: Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation.\nlicense: MIT\nmetadata:\n  version: \"1.0.8\"\n  package: pruna-skills\n---\n\n## Prerequisites\n\nInstall and load these skills before generating (skip if already in context via `@pruna`):\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-image` | Use when someone wants a fast AI image — product shots, hero visuals, mood boards, or draft photos from a text prompt. | `npx skills add PrunaAI/pruna-skills@p-image -y` |\n| `p-image-edit` | Use when someone wants to edit an existing photo — change outfits or backgrounds, compose from reference images, or apply prompt-driven edits. | `npx skills add PrunaAI/pruna-skills@p-image-edit -y` |\n| `p-video-avatar` | Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. | `npx skills add PrunaAI/pruna-skills@p-video-avatar -y` |\n| `gemini-3.1-flash-tts` | Use when someone needs spoken narration or voiceover — explainer tracks, documentary lines, or voice to pair with generated video. | `npx skills add PrunaAI/pruna-skills@gemini-3.1-flash-tts -y` |\n\nOr install the full suite once: `npx skills add PrunaAI/pruna-skills@pruna -y`\n\nFollow each skill's **Before generating** / craft sections — do not restate guide content here.\n\n## Workflow habit\n\nIn **every reply**, name `` `avatar-single-scene` `` in backticks. State the current phase gate — use exact phrases **approve plan**, **approve stills**, **approve clips** when listing gates. Do **not** same-turn plan + paid video. Skip-review / burn-credits → follow `generation-diversity` **Red flags**.\n\n## Feedback gates (required)\n\n| Phase | What to show | Proceed when |\n|-------|--------------|--------------|\n| **0 — Plan** | Full `voice_script`, voice, still + motion plan | **approve plan** |\n| **A — Still** | Hero / portrait plate | **approve still** |\n| **B — Avatar** | Single `p-video-avatar` clip | User accepts |\n\n## Natural language script\n\nWrite **`voice_script`** as **real dialogue**: contractions, natural rhythm, short sentences—how a person talks on camera, not a press release. See `avatar-multi-scene` for good/bad examples.\n\n**`voice_prompt`** must describe **human delivery** (pacing, warmth, founder/conversational tone)—never paste marketing copy or script lines into it.\n\n## Voice and image continuity\n\n- **`voice` / `voice_language`:** Pick **one** preset pair for this clip’s speaker. If this character will appear again in a series or sequel clips, **reuse the same presets** so they sound like one person (same rule as the multi-scene skill’s cast ledger).\n- **Source portrait:** Prefer **one** approved reference URL (upload or generated). If you explore alternate backgrounds or styles, branch with **`p-image-edit`** from **that same** URL plus deltas—do not reinvent the face with an unrelated **`p-image`** unless the user agrees to a new identity.\n\n## Intake: ask before generating\n\nOpen intake → **`generation-diversity`** clarification intake.\n\n**Do not** call `POST /v1/predictions` until the user (or product owner) has answered these—record answers in the manifest:\n\n| Topic | Questions |\n|-------|-----------|\n| **Goal** | What must this one clip communicate (single CTA, greeting, demo line)? |\n| **Media source** | **Upload-only** portrait vs **generate/refine** still with `p-image` / `p-image-edit` first? |\n| **Script** | Full **`voice_script`** as speakable copy—any mandatory pronunciation (names, acronyms)? |\n| **Voice** | Which Pruna **`voice`** and **`voice_language`**? Keep **`voice_prompt`** short (performance vibe only). |\n| **Look** | `9:16` / `16:9` still? Avatar **`resolution`** `720p` or `1080p`? |\n| **Motion** | Desired energy for **`video_prompt`**—specific camera angle and movement (positive wording only)? |\n| **Character** | Age, look, realism level (photoreal vs stylized)—see character sheet in `avatar-multi-scene` |\n| **Ritual seed (SSoT)** | Ritual seed at hero (`generation-diversity`); log **`ritual_seed`**; derive prompt axes. Identity continuity = approved plate URL. Optional **`api_seed`** only when user locks API reproducibility |\n| **Audio (optional)** | Upload `gemini-3.1-flash-tts` for lip-sync via **`input.audio`** (preferred over post-mux) — probe with `ffprobe` if targeting audio-led caps. Or use native **`voice_script`**. |\n\nIf any answer is missing and the user has not waived it, **ask** before generating.\n\n## Confirmation gate (mandatory)\n\nAfter intake:\n\n1. Show the **full `voice_script`**, chosen **`voice`** / **`voice_language`**, **`resolution`**, and a short description of the still + **`video_prompt`** plan.\n2. Ask for **explicit approval** before calling the API (e.g. user replies **go** / **approved**).\n3. If they edit the script, show the updated **`voice_script`** and confirm again when changes are material.\n\n## How the agent runs this\n\nOnce confirmed:\n\n1. Upload refs → build still with curl (`pruna-api`) → slop gate → **approve still**.\n2. Optional TTS → `ffprobe` → upload as `input.audio`.\n3. One async **`p-video-avatar`** job → poll → download.\n4. Manifest: intake, URLs, prediction ids, confirmed script snapshot.\n\n## Workflow (after confirmation)\n\n1. **References** — Upload assets with `POST /v1/files`; collect Pruna file URLs.\n2. **Still (if needed)** — Build one talking-head frame with **`p-image`** and/or **`p-image-edit`**. Run the slop gate before avatar.\n3. **Slop gate** — `generation-diversity` checklists; fix with image models until pass.\n4. **Avatar** — Call **`p-video-avatar`** with snake_case `input` (`image`, optional `last_frame_image`, **`voice_script`** *or* uploaded **`audio`**, `voice`, `voice_language`, **`voice_prompt`**, **`video_prompt`**, `resolution`, **`seed`**). Prefer uploaded **`audio`** from Gemini TTS when external narration quality matters. **Async only** (omit `Try-Sync`); poll to `succeeded`; download `generation_url`.\n5. **Manifest** — Store intake answers, URLs, prediction ids, prompts, retries, confirmed script snapshot.\n\n## Related\n\nRelated skills:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\n| `video-editing` | Use when assembling or polishing already-rendered clips with ffmpeg — concat, crossfades, burned captions and subtitles, text/logo overlays, before/after sliders, background music beds, platform export — or when composing a multi-layer HTML combination video with Hyperframes. Not for AI video generation, prompt craft, or model-based video edits. | `npx skills add PrunaAI/pruna-skills@video-editing -y` |\n\nFile v1.0.8:_meta.json\n\n{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"avatar-single-scene\",\n  \"version\": \"1.0.8\",\n  \"publishedAt\": 1785259275820\n}\n\nFile v1.0.8:skill-card.md\n\n## Description: <br>\nUse when someone wants one polished host-on-camera beat: a speaking person with intake and approval gates before generation. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[pruna-ai](https://clawhub.ai/user/pruna-ai) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal users and developers use this skill to plan and generate a single host-on-camera avatar clip from an approved portrait, script, voice, and motion plan. It guides intake, explicit approval gates, Pruna generation calls, polling, download, and manifest capture. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Portraits, scripts, optional audio, and prompt details may be sent to Pruna-related generation services. <br>\nMitigation: Use the skill only when the user is comfortable with those uploads, rely on approved media, and record intake answers before generation. <br>\nRisk: Paid API credits may be consumed during avatar generation. <br>\nMitigation: Require explicit plan and still approvals before calling generation APIs, and do not combine planning with paid video generation in the same turn. <br>\nRisk: A generated avatar can drift from the intended identity, voice, or scene plan. <br>\nMitigation: Reuse the approved portrait URL and voice settings, show the script and motion plan before generation, and keep the required review gates before final acceptance. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/pruna-ai/skills/avatar-single-scene) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Guidance, Shell commands, Configuration, Text] <br>\n**Output Format:** [Markdown guidance with command examples and structured manifest notes] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Includes approval gates before paid generation and manifest capture of intake answers, prompts, URLs, retries, and prediction IDs.] <br>\n\n## Skill Version(s): <br>\n1.0.8 (source: server release metadata and artifact frontmatter) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.8:skill.manifest.json\n\n{\n  \"references\": []\n}\n\nArchive v1.0.7: 4 files, 4664 bytes\n\nFiles: skill-card.md (2007b), skill.manifest.json (23b), SKILL.md (6909b), _meta.json (138b)\n\nFile v1.0.7:SKILL.md\n\n---\nname: avatar-single-scene\ndescription: Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation.\nlicense: MIT\nmetadata:\n  version: \"1.0.7\"\n  package: pruna-skills\n---\n\n## Prerequisites\n\nInstall and load these skills before generating (skip if already in context via `@pruna`):\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-image` | Use when someone wants a fast AI image — product shots, hero visuals, mood boards, or draft photos from a text prompt. | `npx skills add PrunaAI/pruna-skills@p-image -y` |\n| `p-image-edit` | Use when someone wants to edit an existing photo — change outfits or backgrounds, compose from reference images, or apply prompt-driven edits. | `npx skills add PrunaAI/pruna-skills@p-image-edit -y` |\n| `p-video-avatar` | Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. | `npx skills add PrunaAI/pruna-skills@p-video-avatar -y` |\n| `gemini-3.1-flash-tts` | Use when someone needs spoken narration or voiceover — explainer tracks, documentary lines, or voice to pair with generated video. | `npx skills add PrunaAI/pruna-skills@gemini-3.1-flash-tts -y` |\n\nOr install the full suite once: `npx skills add PrunaAI/pruna-skills@pruna -y`\n\nFollow each skill's **Before generating** / craft sections — do not restate guide content here.\n\n## Workflow habit\n\nIn **every reply**, name `` `avatar-single-scene` `` in backticks. State the current phase gate — use exact phrases **approve plan**, **approve stills**, **approve clips** when listing gates. Do **not** same-turn plan + paid video. Skip-review / burn-credits → follow `generation-diversity` **Red flags**.\n\n## Feedback gates (required)\n\n| Phase | What to show | Proceed when |\n|-------|--------------|--------------|\n| **0 — Plan** | Full `voice_script`, voice, still + motion plan | **approve plan** |\n| **A — Still** | Hero / portrait plate | **approve still** |\n| **B — Avatar** | Single `p-video-avatar` clip | User accepts |\n\n## Natural language script\n\nWrite **`voice_script`** as **real dialogue**: contractions, natural rhythm, short sentences—how a person talks on camera, not a press release. See `avatar-multi-scene` for good/bad examples.\n\n**`voice_prompt`** must describe **human delivery** (pacing, warmth, founder/conversational tone)—never paste marketing copy or script lines into it.\n\n## Voice and image continuity\n\n- **`voice` / `voice_language`:** Pick **one** preset pair for this clip’s speaker. If this character will appear again in a series or sequel clips, **reuse the same presets** so they sound like one person (same rule as the multi-scene skill’s cast ledger).\n- **Source portrait:** Prefer **one** approved reference URL (upload or generated). If you explore alternate backgrounds or styles, branch with **`p-image-edit`** from **that same** URL plus deltas—do not reinvent the face with an unrelated **`p-image`** unless the user agrees to a new identity.\n\n## Intake: ask before generating\n\n**Do not** call `POST /v1/predictions` until the user (or product owner) has answered these—record answers in the manifest:\n\n| Topic | Questions |\n|-------|-----------|\n| **Goal** | What must this one clip communicate (single CTA, greeting, demo line)? |\n| **Script** | Full **`voice_script`** as speakable copy—any mandatory pronunciation (names, acronyms)? |\n| **Voice** | Which Pruna **`voice`** and **`voice_language`**? Keep **`voice_prompt`** short (performance vibe only). |\n| **Look** | `9:16` / `16:9` still? Avatar **`resolution`** `720p` or `1080p`? |\n| **Image source** | Upload-only reference, or generate/refine with **`p-image`** / **`p-image-edit`** first? |\n| **Motion** | Desired energy for **`video_prompt`**—specific camera angle and movement (positive wording only)? |\n| **Character** | Age, look, realism level (photoreal vs stylized)—see character sheet in `avatar-multi-scene` |\n| **Ritual seed (SSoT)** | Ritual seed at hero (`generation-diversity`); log **`ritual_seed`**; derive prompt axes. Identity continuity = approved plate URL. Optional **`api_seed`** only when user locks API reproducibility |\n| **Audio (optional)** | Upload `gemini-3.1-flash-tts` for lip-sync via **`input.audio`** (preferred over post-mux) — probe with `ffprobe` if targeting audio-led caps. Or use native **`voice_script`**. |\n\nIf any answer is missing and the user has not waived it, **ask** before generating.\n\n## Confirmation gate (mandatory)\n\nAfter intake:\n\n1. Show the **full `voice_script`**, chosen **`voice`** / **`voice_language`**, **`resolution`**, and a short description of the still + **`video_prompt`** plan.\n2. Ask for **explicit approval** before calling the API (e.g. user replies **go** / **approved**).\n3. If they edit the script, show the updated **`voice_script`** and confirm again when changes are material.\n\n## How the agent runs this\n\nOnce confirmed:\n\n1. Upload refs → build still with curl (`pruna-api`) → slop gate → **approve still**.\n2. Optional TTS → `ffprobe` → upload as `input.audio`.\n3. One async **`p-video-avatar`** job → poll → download.\n4. Manifest: intake, URLs, prediction ids, confirmed script snapshot.\n\n## Workflow (after confirmation)\n\n1. **References** — Upload assets with `POST /v1/files`; collect Pruna file URLs.\n2. **Still (if needed)** — Build one talking-head frame with **`p-image`** and/or **`p-image-edit`**. Run the slop gate before avatar.\n3. **Slop gate** — `generation-diversity` checklists; fix with image models until pass.\n4. **Avatar** — Call **`p-video-avatar`** with snake_case `input` (`image`, optional `last_frame_image`, **`voice_script`** *or* uploaded **`audio`**, `voice`, `voice_language`, **`voice_prompt`**, **`video_prompt`**, `resolution`, **`seed`**). Prefer uploaded **`audio`** from Gemini TTS when external narration quality matters. **Async only** (omit `Try-Sync`); poll to `succeeded`; download `generation_url`.\n5. **Manifest** — Store intake answers, URLs, prediction ids, prompts, retries, confirmed script snapshot.\n\n## Related\n\nRelated skills:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\n| `video-editing` | Use when assembling or polishing already-rendered clips with ffmpeg — concat, crossfades, burned captions and subtitles, text/logo overlays, before/after sliders, background music beds, platform export — or when composing a multi-layer HTML combination video with Hyperframes. Not for AI video generation, prompt craft, or model-based video edits. | `npx skills add PrunaAI/pruna-skills@video-editing -y` |\n\nFile v1.0.7:_meta.json\n\n{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"avatar-single-scene\",\n  \"version\": \"1.0.7\",\n  \"publishedAt\": 1784810184749\n}\n\nFile v1.0.7:skill-card.md\n\n## Description: <br>\nUse when someone wants one polished host-on-camera beat: a speaking person with intake and approval gates before generation. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[pruna-ai](https://clawhub.ai/user/pruna-ai) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and creative operators use this skill to plan and gate a single speaking avatar clip, including intake, approval, still generation, avatar generation, and a local generation manifest. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Reference media, scripts, prompts, URLs, and prediction identifiers can include private or sensitive identity material. <br>\nMitigation: Use only materials intended for avatar generation, obtain approval before upload, and avoid private identity data unless needed for the approved use case. <br>\nRisk: The workflow can involve paid external generation services. <br>\nMitigation: Require explicit plan and still approvals before paid video generation, as described by the skill's approval gates. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/pruna-ai/skills/avatar-single-scene) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Guidance, Markdown, Shell commands, Configuration] <br>\n**Output Format:** [Markdown guidance with command examples and workflow checkpoints] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Includes approval gates and manifest fields; does not itself generate media without user approval.] <br>\n\n## Skill Version(s): <br>\n1.0.7 (source: server evidence release.version and artifact metadata.version) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.7:skill.manifest.json\n\n{\n  \"references\": []\n}\n\nArchive v1.0.6: 17 files, 44112 bytes\n\nFiles: apm.yml (497b), README-INSTALL.md (974b), references/approval-red-flags.md (2650b), references/generation-diversity.md (25910b), references/generation-quality-checklists.md (9882b), references/p-video-avatar-quality-checklist.md (2929b), references/parallel-execution.md (7883b), references/pruna-api.md (5138b), references/random-seed-ritual.md (3875b), references/realistic-persona-showcase.md (22814b), references/staged-generation-gate.md (7290b), references/workflow-feedback-gates.md (5040b), skill-card.md (2950b), skill.deps.json (1138b), skill.manifest.json (286b), SKILL.md (8470b), _meta.json (138b)\n\nFile v1.0.6:SKILL.md\n\n---\nname: avatar-single-scene\ndescription: Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation.\nlicense: MIT\nmetadata:\n  version: \"1.0.6\"\ndepends:\n  - p-image\n  - p-image-edit\n  - p-video-avatar\n  - gemini-3.1-flash-tts\n---\n\n## Shared generation policy\n\n<!-- shared-generation-policy -->\n\nBefore any paid `POST /v1/predictions`:\n\n1. **[Random seed ritual](./references/random-seed-ritual.md)** — always first; derive axes via sum-mod.\n2. **[Generation diversity](./references/generation-diversity.md)** — explicit prompts; rotate ≥2 scenario axes per session.\n3. **[Quality checklists](./references/generation-quality-checklists.md)** — open output files and judge pass/fail before advancing.\n4. **[Staged generation gate](./references/staged-generation-gate.md)** — plan → stills → audio → video → assembly; never skip phases in one turn.\n5. **[Approval red flags](./references/approval-red-flags.md)** — pause when plan, stills, or clips were not reviewed.\n6. **[Workflow feedback gates](./references/workflow-feedback-gates.md)** — runner flags and per-workflow commands.\n7. **[Parallel execution](./references/parallel-execution.md)** — async fan-out within each approved phase only.\n\n# Single-scene avatar video (Pruna only)\n\nOne approved portrait → one **`p-video-avatar`** job. Stills and QA reuse the same patterns as [avatar-multi-scene](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/avatar-multi-scene/skills/avatar-multi-scene/SKILL.md); use [generation-quality-checklists.md](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/generation-quality-checklists.md) and that folder’s **`prompt-templates.md`**.\n\nSpeak to the requester in **plain language**: explain what they will hear (full **`voice_script`**) and see (still + motion) before anything hits the API.\n\nAtomic APIs: [p-video-avatar](../../../../tools/video/p-video-avatar/SKILL.md), [p-image](../../../../tools/image/p-image/SKILL.md), [p-image-edit](../../../../tools/image/p-image-edit/SKILL.md), [pruna-api.md](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/pruna-api.md).\n\n**Photoreal dynamic personas:** [realistic-persona-showcase.md](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/realistic-persona-showcase.md)\n\n**Staged generation:** [staged-generation-gate.md](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/staged-generation-gate.md) · [random-seed-ritual.md](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/random-seed-ritual.md) · [workflow-feedback-gates.md](./references/workflow-feedback-gates.md)\n\n## Feedback gates (required)\n\n| Phase | What to show | Proceed when |\n|-------|--------------|--------------|\n| **0 — Plan** | Full `voice_script`, voice, still + motion plan | **approve plan** |\n| **A — Still** | Hero / portrait plate | **approve still** |\n| **B — Avatar** | Single `p-video-avatar` clip | User accepts |\n\n## Natural language script\n\nWrite **`voice_script`** as **real dialogue**: contractions, natural rhythm, short sentences—how a person talks on camera, not a press release. See [avatar-multi-scene/prompt-templates.md](https://github.com/PrunaAI/pruna-skills/tree/main/avatar-multi-scene/prompt-templates.md) for good/bad examples.\n\n**`voice_prompt`** must describe **human delivery** (pacing, warmth, founder/conversational tone)—never paste marketing copy or script lines into it.\n\n## Voice and image continuity\n\n- **`voice` / `voice_language`:** Pick **one** preset pair for this clip’s speaker. If this character will appear again in a series or sequel clips, **reuse the same presets** so they sound like one person (same rule as the multi-scene skill’s cast ledger).\n- **Source portrait:** Prefer **one** approved reference URL (upload or generated). If you explore alternate backgrounds or styles, branch with **`p-image-edit`** from **that same** URL plus deltas—do not reinvent the face with an unrelated **`p-image`** unless the user agrees to a new identity.\n\n## Intake: ask before generating\n\n**Do not** call `POST /v1/predictions` until the user (or product owner) has answered these—record answers in the manifest:\n\n| Topic | Questions |\n|-------|-----------|\n| **Goal** | What must this one clip communicate (single CTA, greeting, demo line)? |\n| **Script** | Full **`voice_script`** as speakable copy—any mandatory pronunciation (names, acronyms)? |\n| **Voice** | Which Pruna **`voice`** and **`voice_language`**? Keep **`voice_prompt`** short (performance vibe only). |\n| **Look** | `9:16` / `16:9` still? Avatar **`resolution`** `720p` or `1080p`? |\n| **Image source** | Upload-only reference, or generate/refine with **`p-image`** / **`p-image-edit`** first? |\n| **Motion** | Desired energy for **`video_prompt`**—specific camera angle and movement (positive wording only)? |\n| **Character** | Age, look, realism level (photoreal vs stylized)—see character sheet in [avatar-multi-scene](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/avatar-multi-scene/skills/avatar-multi-scene/SKILL.md) |\n| **Ritual seed (SSoT)** | **[Random seed ritual](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/random-seed-ritual.md)** at hero → log **`ritual_seed`**; derive prompt axes. Identity continuity = approved plate URL. Optional **`api_seed`** only when user locks API reproducibility |\n| **Audio (optional)** | Upload [Gemini TTS](../../../../tools/audio/gemini-3.1-flash-tts/SKILL.md) for lip-sync via **`input.audio`** (preferred over post-mux) — see [scene-anchor-triple.md](https://github.com/PrunaAI/pruna-skills/tree/main/references/shared/scene-anchor-triple.md) avatar variant. Or use native **`voice_script`**. |\n\nIf any answer is missing and the user has not waived it, **ask** before generating.\n\n## Confirmation gate (mandatory)\n\nAfter intake:\n\n1. Show the **full `voice_script`**, chosen **`voice`** / **`voice_language`**, **`resolution`**, and a short description of the still + **`video_prompt`** plan.\n2. Ask for **explicit approval** before calling the API (e.g. user replies **go** / **approved**).\n3. If they edit the script, show the updated **`voice_script`** and confirm again when changes are material.\n\n## Script and run package (after confirmation)\n\nWhen the user confirms:\n\n1. **Emit** a **runnable generation package**: phased **`curl`** calls or a small script (shell/Python) that uploads if needed, builds the still, runs **`p-video-avatar`** async, polls, and downloads **`generation_url`**—matching the approved script **exactly**. For multi-step prep (edit + avatar), use async and parallel phases per [parallel-execution.md](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/parallel-execution.md).\n2. **Run** it when the environment allows (**`PRUNA_API_KEY`**, network). Otherwise deliver the same artifact so the user can execute locally.\n\n## Workflow (after confirmation)\n\n1. **References** — Upload assets with `POST /v1/files`; collect Pruna file URLs.\n2. **Still (if needed)** — Build one talking-head frame with **`p-image`** (photoreal prompt + locked **`seed`**) and/or **`p-image-edit`** from a locked source. Run the slop gate before avatar.\n3. **Slop gate** — Run the checklist in [generation-quality-checklists.md](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/generation-quality-checklists.md); fix with image models until pass.\n4. **Avatar** — Call **`p-video-avatar`** with snake_case `input` (`image`, optional `last_frame_image`, **`voice_script`** *or* uploaded **`audio`**, `voice`, `voice_language`, **`voice_prompt`**, **`video_prompt`**, `resolution`, **`seed`**). Prefer uploaded **`audio`** from [Gemini TTS](../../../../tools/audio/gemini-3.1-flash-tts/SKILL.md) when external narration quality matters. **Async only** (omit `Try-Sync`); poll to `succeeded`; download `generation_url`.\n5. **Manifest** — Store intake answers, URLs, prediction ids, prompts, retries, confirmed script snapshot.\n\n## Related\n\n- Multi-scene version: [avatar-multi-scene](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/avatar-multi-scene/skills/avatar-multi-scene/SKILL.md)\n- Generative chain overview: [pruna-generative-pipeline](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/pruna-generative-pipeline/skills/pruna-generative-pipeline/SKILL.md)\n\nFile v1.0.6:_meta.json\n\n{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"avatar-single-scene\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1784235397808\n}\n\nFile v1.0.6:references/approval-red-flags.md\n\n# Approval red flags (before paid generation)\n\nPause and show assets (or ask) when any of these are true — regardless of workflow.\n\n| Red flag | Risk | Required action |\n|----------|------|-----------------|\n| Plan not presented or no **approve plan** | Wrong story, cast, or style bible | Phase 0 — scene table + sample prompts |\n| Stills not shown since last prompt edit | Silent no-op regen; wasted video credits | Phase A — paths in `stills/`; wait for **approve stills** |\n| TTS / song not listened when narration drives video | Bad pacing, wrong lines in lip-sync | Phase A2 — `audio/narration_*.mp3` or `song.mp3` |\n| Same turn: plan approval + video | User never saw plates | Split turns; never batch |\n| **approve clips** missing before concat + bed | Bad VO buried under music | Phase C/D only after clip review |\n| Visual mode, cast gender/voice, or continuity unclear | Identity drift, wrong pipeline | Ask; do not guess |\n| Using `--yes-skip-*-gate` without user asking for automation | Bypasses human review | Confirm explicitly |\n| Regen prompts without deleting stills/clips | Old assets reused | Delete targets or `--fresh` / `--regen-*` per [staged-generation-gate.md](./staged-generation-gate.md) |\n| `voice_script` revised but avatar sources not deleted | Lip sync / dialogue mismatch | Delete `sources/` + `clips/` for that scene |\n| **`POST /v1/predictions` without [random seed ritual](./random-seed-ritual.md) (SSoT)** | Duplicate outputs; copied example strings | Generate and state a ritual string first; log `ritual_seed` |\n| **`PRUNA_API_KEY` or `REPLICATE_API_TOKEN` missing** | Cannot run API or runners | Stop; send signup links from [api-credentials.md](https://github.com/PrunaAI/pruna-skills/tree/main/shared/api-credentials.md) |\n\n## When NOT to stall\n\nThe user already replied **approve plan**, **approve stills**, or **approve clips** for the current phase — proceed with that phase only.\n\n## Common mistakes\n\n| Mistake | Fix |\n|---------|-----|\n| End-to-end `--phase all` on first run | Default phased flow; skip gates only when user requests automation |\n| Showing manifest JSON instead of media paths | User reviews JPEG/PNG/MP3/MP4 |\n| Approving \"looks good\" without listing paths | Name `stills/hero.png`, scene ids, or clip filenames |\n| Mixing bed before clip review | Concat first; bed after **approve clips** |\n| Assuming regen picked up prompt edits | Delete affected files or use `--regen-stills` / `--regen-clips` |\n\nSee [staged-generation-gate.md](./staged-generation-gate.md) for phases and wording templates · [workflow-feedback-gates.md](./workflow-feedback-gates.md) for runner flags.\n\nFile v1.0.6:references/generation-diversity.md\n\n# Generation diversity (all models)\n\nOne checklist so **every** Pruna output — **`p-image`**, **`p-video`**, try-on, avatar, replace, animate — is as **diverse** as the brief allows. Details live in linked docs; this page is the agent shortcut.\n\nUse the **full** checklist here for every generation.\n\n## Contents\n\n- [Three steps (every job)](#three-steps-every-job)\n- [Explicit prompt structure](#explicit-prompt-structure-required)\n- [Text & typography by model](#text--typography-by-model)\n- [SSoT axis derivation](#ssot-axis-derivation-sum-mod)\n- [Scenario axes](#scenario-axes-rotate-across-outputs)\n- [Render categories](#render-categories)\n- [Crowded scenes](#crowded-scenes-p-image)\n- [Body type spread](#body-type-spread)\n- [Location-matched crowds](#location-matched-crowds)\n- [Group classes](#group-classes--courses)\n- [Framing & camera](#framing--camera)\n- [Scene spice](#scene-spice-when-it-fits)\n- [Photoreal anti-slop](#photoreal-anti-slop-neon--stylized-briefs)\n- [Aspect ratio](#aspect-ratio-multi-example-sets)\n- [By model](#by-model-minimum-diversity)\n- [When not to maximize diversity](#when-not-to-maximize-diversity)\n- [Anti-patterns](#anti-patterns)\n\n## Three steps (every job)\n\n1. **[Random seed ritual](./random-seed-ritual.md) (SSoT)** — **always first**, before the prompt. Generate a fresh random string, **state it in the turn**, derive axes via [sum-mod](#ssot-axis-derivation-sum-mod). **Do not** pass the ritual string to API `seed`. **One new ritual string per independent generation**; reuse only on same-brief slop retry.\n2. **Write an [explicit prompt](#explicit-prompt-structure-required)** — name specific people, animals, objects, actions, setting, and camera/light. Add text/typography only when the brief needs it — see [text rules by model](#text--typography-by-model).\n3. **Diversify the scenario row** — change at least **two axes** from the previous output in the same session (cast, setting, camera, **`render_category_tag`**, **aspect_ratio**, creatures, props, … — unless user asked for continuity).\n4. **Log** — `ritual_seed`, axes chosen, prediction id (manifest or turn text).\n\n## Explicit prompt structure (required)\n\n**Vague prompts produce generic AI slop.** After the ritual and axis picks, every still prompt must be **specific and dynamic** — concrete nouns, frozen actions, named places. Prefer playground/creative briefs over marketing abstractions.\n\n**Name at least four of these per prompt (log tags in manifest):**\n\n| Clause | Log as | Agent must specify |\n|--------|--------|-------------------|\n| **People** | `cast_descriptor` | Named role + age band + expression (`fearless grandmother in floral apron`, not `woman`) |\n| **Animals / creatures** | `creature_tag` | Species + attitude (`otter DJ`, `luna moth knight`, `VIP anglerfish`) |\n| **Objects** | `prop_tag` | Concrete props (`vinyl record`, `chrome rocket sled`, `velvet rope`, `tiny boombox`) |\n| **Action** | `action_tag` | Frozen mid-motion verb (`scratching vinyl`, `lassoing runaway taco truck`, `cape mid-swing`) |\n| **Duration** | `duration_tag` | When timing matters (`1970s`, `8PM`, `45-minute spin class`, `Saturday-morning cartoon`) |\n| **Setting** | `setting_tag` | Named place + era + materials (`packed 1970s roller rink`, `abyss-depth jellyfish nightclub`, `Monument Valley dust storm`) |\n| **Text / typography** | `text_spec` | Only when brief needs readable type — exact strings + surface (see [by model](#text--typography-by-model)) |\n| **Camera + light** | `camera_tag`, `lighting_tag` | `fish-eye lens`, `tilt-shift macro`, `teal-magenta cinematic`, `golden hour sparkle` |\n| **Style** | `render_category_tag` | Medium (`cel-shaded anime`, `baroque oil painting`, `ink-wash storybook`, `photoreal documentary`) |\n\n**Template:**\n\n```text\n{people and/or creatures} {action} with/at {specific objects} in {named setting},\n{style or era cues}, {camera_tag}, {lighting_tag}\n```\n\n**Good examples (dynamic / specific):**\n\n```text\nDisco ball reflections on an otter DJ scratching vinyl at a packed 1970s roller rink,\nfish-eye lens, glitter confetti mid-air, funky energy\n```\n\n```text\nBioluminescent jellyfish nightclub at abyss depth, VIP anglerfish in sunglasses at velvet rope,\nteal-magenta cinematic lighting\n```\n\n```text\nCorgi cowboy lassoing a runaway taco truck through Monument Valley dust storm,\npulp western poster energy, dynamic diagonal composition\n```\n\n**Anti-pattern:** `cool cyberpunk portrait, neon vibes` — no subject, no action, no place. **Right:** name who, what they're doing, where, with which props.\n\n## Text & typography by model\n\n**Never use negation to suppress text** — `no text`, `without signs`, `no typography` often **invoke** the thing you are trying to avoid. Describe surfaces positively when you want blank walls (`plain unmarked walls`, `matte unprinted props`).\n\n| Model | Prompt upsampling | Typography in prompt |\n|-------|-------------------|----------------------|\n| **`p-image`** | **No** effective prompt upsampling | **Avoid** dense readable-type requests unless user explicitly wants `text_rendering`. Short prompts; skip `readable`, `legible`, `headline`, multi-sign lists — they drift to gibberish. Collage triggers still apply: [interactive-explainer-prompts.md](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/interactive-explainer-prompts.md) (`flat lay`, `grid`, `collage`, …). |\n\n**`p-image` text hygiene:** prefer scenes without copy. If a screen appears: `monitor soft colorful blur glow only` — not legible UI unless the user explicitly asked for readable text (then simplify the brief or drop copy).\n\n**Collage triggers (all T2I models):** still avoid `flat lay`, `packshot`, `grid`, `collage`, `montage`, `contact sheet`, `split`, `before and after` — use `single frame`, `one camera angle` instead. Full table: [interactive-explainer-prompts.md](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/interactive-explainer-prompts.md).\n\n## SSoT axis derivation (sum-mod)\n\nAfter stating `ritual_seed` (random string), derive prompt choices — sum Unicode/ASCII char codes, mod list length:\n\n```text\nRATIOS = [\"1:1\", \"16:9\", \"9:16\", \"4:3\", \"3:4\", \"3:2\", \"2:3\"]\naspect_ratio  ← RATIOS[ sum(codes(ritual_seed)) % 7 ]\ncamera_tag    ← camera_tags[ sum(codes(ritual_seed[0:4])) % len(camera_tags) ]\nrender_tag    ← render_tags[ sum(codes(ritual_seed[4:8])) % len(render_tags) ]\n```\n\n`camera_tags` and `render_tags` — see [framing & camera](#framing--camera) and [render categories](#render-categories). State derived picks in the turn (*\"Aspect ratio: 16:9, camera: over-shoulder\"*).\n\n**User `api_seed`:** when the user supplies an integer for reproducibility, pass it as `input.seed` — separate from the ritual string.\n\n## Scenario axes (rotate across outputs)\n\n| Axis | Vary with | Applies to |\n|------|-----------|------------|\n| **Cast** | age, ethnicity, gender, archetype, **hairstyle**, **body type** (rotate — see [below](#body-type-spread)), disability aids (wheelchair, cane), visible age band twice in prompt | all person/content gens |\n| **Medium** | `render_category_tag` — rotate across [render categories](#render-categories) | `p-image`, avatar stills |\n| **Setting** | unique `setting_tag` — specific room/street/venue/era, not repeat adjacent rows | stills + video plates |\n| **Camera** | `camera_tag` — rotate across [framing ladder](#framing--camera); never default MC facing lens | stills, `video_prompt` |\n| **Lighting** | `lighting_tag` — golden hour · neon · overcast · practical | stills, video mood |\n| **Motion** | unique `video_prompt` per clip | `p-video`, `p-video-avatar`, animate |\n| **Voice** | natural `voice_script`; one `voice` preset per character | avatar, TTS-led video |\n| **Seed** | new ritual string per **independent** job; reuse only on same-brief slop retry | all generation skills |\n| **Aspect ratio** | different `aspect_ratio` per independent still in a batch — see [below](#aspect-ratio-multi-example-sets) | `p-image`, `p-image-edit` |\n| **Crowd density** | layered background population + activity cues — see [below](#crowded-scenes-p-image) | `p-image` plates with busy worlds |\n\nFull style/camera/lighting ladders: [visual-variety-bible.md](https://github.com/PrunaAI/pruna-skills/tree/main/shared/visual-variety-bible.md). Persona + try-on bar: [realistic-persona-showcase.md](https://github.com/PrunaAI/pruna-skills/tree/main/shared/realistic-persona-showcase.md).\n\n## Render categories\n\nRotate **`render_category_tag`** (and log it) so diversity batches cover more than photoreal portraits or anime. Category families below mirror arena leaderboards — pick a **different tag per independent output**.\n\n**Random seed ritual still applies** to every generation in [step 1](#three-steps-every-job); categories describe *what* to vary, not *when* to pick `seed`.\n\n### Text-to-image — `p-image`\n\nSources: [Arena text-to-image](https://arena.ai/leaderboard/text-to-image) · [AA text-to-image](https://artificialanalysis.ai/image/leaderboard/text-to-image)\n\n**Unified `render_category_tag`** (Arena bucket = tag — pick one per still):\n\n`product_branding_commercial` · `3d_imaging_modeling` · `cartoon_anime_fantasy` · `photoreal_cinematic` · `art` · `portraits` · `nature_environment` · `animals_creature` · `text_rendering`\n\n| Tag | Typical prompt lane |\n|-----|---------------------|\n| `product_branding_commercial` | single product on seamless studio, person + product in named setting, showroom (not `flat lay` / `packshot` words) |\n| `3d_imaging_modeling` | CG film still, clay/stop-motion, rounded 3D forms |\n| `cartoon_anime_fantasy` | cel anime, fantasy character, crowded stylized world |\n| `photoreal_cinematic` | documentary crowd scenes, film-scale wide, urban march |\n| `art` | oil, watercolor, gouache, charcoal, flat vector |\n| `portraits` | single-subject editorial or documentary portrait (crowd optional behind) |\n| `nature_environment` | landscape-wide; subject small in frame |\n| `animals_creature` | named species + handler; crowded market/park when it fits |\n| `text_rendering` | **user-requested only** — otherwise no readable text |\n\nLog `render_category_tag` in manifest. Combine with [crowded scenes](#crowded-scenes-p-image), [body type](#body-type-spread), and [scene spice](#scene-spice-when-it-fits) when the brief allows.\n\n### Image edit — `p-image-edit`\n\nSources: [Arena image edit](https://arena.ai/leaderboard/image-edit) · [AA image editing](https://artificialanalysis.ai/image/leaderboard/editing)\n\nArena modalities: `single_image_edit` · `multi_image_edit`\n\nEdit diversity tags: `background_swap` · `relight` · `wardrobe_on_plate` · `pose_or_angle_delta` · `multi_ref_composite` · `region_inpaint`\n\nVary **instruction** and **what changes** while identity URL stays fixed on character arcs.\n\n### Text-to-video — `p-video`\n\nSources: [Arena text-to-video](https://arena.ai/leaderboard/text-to-video) · [AA text-to-video](https://artificialanalysis.ai/video/leaderboard/text-to-video)\n\nMotion/scene tags: `character_performance` · `landscape_broll` · `urban_street` · `product_demo` · `abstract_mood` · `crowd_scene` · `dialogue_beat`\n\nRotate `video_prompt` grammar, start plate world, and `camera_tag` per clip.\n\n### Image-to-video — `p-video` (+ plate upload)\n\nSources: [Arena image-to-video](https://arena.ai/leaderboard/image-to-video) · [AA image-to-video](https://artificialanalysis.ai/video/leaderboard/image-to-video)\n\nPlate-driven tags: `animate_hero_still` · `camera_move_on_plate` · `environmental_parallax` · `avatar_lip_sync` · `hands_or_prop_motion`\n\nMatch motion to what the **still** already shows — do not contradict the plate.\n\n### Video edit — `p-video-replace` (and edit-style video)\n\nSource: [Arena video edit](https://arena.ai/leaderboard/video-edit)\n\nEdit tags: `face_recast` · `wardrobe_swap` · `accessory_swap` · `background_replace` · `object_in_hand_swap` · `style_transfer_on_subject`\n\nSame-gender / identity rules for talking-head beats still apply — see [visual-variety-bible.md](https://github.com/PrunaAI/pruna-skills/tree/main/shared/visual-variety-bible.md).\n\n## Crowded scenes (`p-image`)\n\nWhen the brief asks for **busy**, **crowded**, or **lively** worlds — not a lone subject on a blank wall — stack density in the prompt:\n\n1. **Three depth layers** — sharp foreground subject · readable midground faces/hands/props · landmark bokeh (stage, temple, billboards, ferris wheel).\n2. **Named population count** — `hundreds of pedestrians`, `dozens of faces in midground`, `20+ tiny clay figures` (stylized sets need explicit counts; models under-deliver on vague \"busy\").\n3. **Activity verbs** — raised hands, umbrellas open, food steam, confetti, market haggling, commuters pressed shoulder-to-shoulder.\n4. **Shallow DOF + single subject** — `single subject one frame` keeps one identity readable while the crowd stays behind them.\n5. **Age & angle lock** — repeat age band twice (`woman in her late 50s, visibly fifty`) and use [framing & camera](#framing--camera) — models drift younger, center-frame, and front-facing without it.\n\n| Crowd family | Density cues |\n|--------------|--------------|\n| **Urban rush** | crosswalk stripes, wet reflections, umbrellas, billboard bokeh |\n| **Festival / parade** | confetti, raised hands, costume layers, smoke haze |\n| **Market / bazaar** | overflowing stalls, hanging goods, steam, price tags as color blobs |\n| **Transit crush** | strap hangers, door windows, blurred faces pressed together |\n| **Stylized miniature** | counted clay/figurine shoppers (`20+`), cramped aisle, stacked crates |\n| **Institutional / ER** | framed oil portraits on beige walls, triage number board, wall sanitizer, vending machine, scuffed linoleum, TV blur, mixed-age seated patients |\n| **Urban march / protest** | named city, local landmarks, multiracial crowd cues separate from hero — see [location-matched crowds](#location-matched-crowds) |\n| **Group fitness class** | class name + duration, mixed-gender riders, realistic warm studio light — see [group classes](#group-classes--courses) |\n\n**Anti-pattern:** one blurred smear behind a portrait — name **what** the crowd is doing and **where** layers sit. **Institutional** scenes (ER, airport, classroom) need `benches full`, `standing room only`, or `shoulder-to-shoulder` — otherwise models default to a quiet hallway. Name **set dressing** too: framed portraits on walls, triage number board, vending machine glow, scuffed linoleum — generic mint corridors read AI-empty.\n\n## Body type spread\n\nModels default to one “average fitness” body. In diversity batches, **name build on the hero and vary background bodies**:\n\n| Build tag | Prompt cue |\n|-----------|------------|\n| **Plus-size / curvy** | `plus-size`, `curvy build`, `full-figured` |\n| **Athletic / muscular** | `broad shoulders`, `muscular arms`, `athletic build` |\n| **Petite / slim** | `petite frame`, `slim build`, `narrow shoulders` |\n| **Tall / lanky** | `tall and lanky`, `6-foot frame`, `long limbs` |\n| **Stocky / heavyset** | `stocky build`, `heavyset`, `barrel chest` |\n| **Lean wiry** | `lean wiry frame`, `weathered thin face` |\n\n**Rule:** rotate build across independent panels in a session — not every hero “athletic build”. Background crowd should mix ages **and** silhouettes (`elderly thin woman`, `heavyset man`, `pregnant woman seated`, `toddler on lap`).\n\n## Location-matched crowds\n\nWhen the prompt names a **real city or country**, background faces must match that place’s **demographic mix** — not clone the hero’s ethnicity.\n\n| Wrong | Right |\n|-------|--------|\n| South Asian hero + only South Asian protesters in “New York” | Hero is one identity; crowd explicitly `multiracial NYC march — Black, Latino, white, East Asian protesters` |\n| “Dense city march” with no geography | Name city + 3–4 crowd ethnicity cues + local landmarks (yellow cabs, art deco towers, steam vent) |\n| Festival in Lagos with only Nordic faces | Match crowd to `setting_tag` region |\n\n**Prompt pattern:** lock hero cast in sentence 1; sentence 2 lists **four+ distinct background silhouettes** unrelated to hero ethnicity; sentence 3 names **local landmarks** so the plate cannot read as generic stock.\n\n**Applies to:** protests, airports, transit, street markets, sports crowds — any scene where “crowded” implies a real place.\n\n## Group classes & courses\n\nWhen the scene is a **class, workshop, or team activity**, name the **course type** and **who else is in the room** — models default to monochrome crowds (all men, all one age).\n\n| Specify | Example cues |\n|---------|----------------|\n| **Class type** | `45-minute evening spin class`, `beginner yoga flow`, `HIIT bootcamp circuit` |\n| **Room realism** | warm overhead track lights, mirror wall, rubber floor, water bottles, towels — **not** magenta-cyan neon strips unless brief is explicitly nightclub |\n| **Gender mix** | hero is one person; crowd `mixed-gender class — women with ponytails, men with beards, nonbinary cyclist` |\n| **Body + age mix** | plus-size rider, petite woman, athletic man, woman in her 50s — same as [body type spread](#body-type-spread) |\n\n**Lighting rule for fitness:** real boutique studios are **dim warm overhead** or **single spotlight on instructor** — avoid `split gel`, `neon LED strips`, `magenta-cyan` on photoreal gym plates; those read AI-fake.\n\n**Prompt pattern:** `Documentary fitness portrait` + class name + instructor on bike at front + `20+ mixed-gender cyclists` with 3–4 named background silhouettes + realistic room props.\n\n## Framing & camera\n\nModels default to **centered subject, eyes at camera**. In diversity batches, **rotate `camera_tag` and frame placement** every row — log both in manifest.\n\n**Gaze rule:** `glance off-lens`, `profile`, `back to camera`, `looking down at [prop]`, or `watching the crowd` — **not** `facing camera` or `looking at viewer` unless the user asked for a direct-address avatar plate.\n\n**Placement rule:** name where the subject sits in frame — `left third`, `right third`, `lower right corner`, `edge of frame`, `small in environmental wide` — **not** centered mugshot every time.\n\n| `camera_tag` | Prompt cue |\n|--------------|------------|\n| **Overhead / bird's eye** | `overhead aerial view`, `top-down`, `drone shot looking straight down` |\n| **High corner** | `high angle from corner`, `surveillance-style downward angle` |\n| **Worm's eye** | `ground-level worm's eye`, `camera on pavement` |\n| **Crane-down** | `slight high angle crane-down` |\n| **Over-shoulder** | `over-shoulder from behind`, `seen past someone's shoulder` |\n| **Profile / side** | `profile side angle`, `walking across frame` |\n| **From behind** | `back to camera`, `three-quarter from behind` |\n| **Dutch tilt** | `dutch tilt` — tension scenes only |\n| **Through crowd** | `subject visible through gap in crowd`, `foreground heads out of focus` |\n\n**Batch rule:** no two adjacent stills share the same `camera_tag` **and** placement corner (e.g. don't do `left third` twice in a row).\n\nAvatar / lip-sync exception: face must stay readable and mouth visible — use `slight angle from the side` or `three-quarter`, still **off-center** and **off-lens gaze** when not delivering VO to camera.\n\n## Scene spice (when it fits)\n\nDefault plates are person + crowd + place. Add **one or two specific attributes** when the setting naturally supports them — not random clutter on every row.\n\n| Spice type | When to add | Example |\n|------------|-------------|---------|\n| **Animals** | setting implies them | dog park → `golden retriever on leash`; harbor → `seagulls overhead`; rooftop → `pigeons on water tower`; parade → `police horse midground` |\n| **Held / worn props** | role or weather | `red umbrella tucked under arm`, `wire beekeeper smoker`, `chipped ceramic mug`, `sample strawberry basket` |\n| **Micro-detail** | one thumb-stopping oddity | `muddy paw prints on pavement`, `honey jar on crate`, `green parade beads on fence` |\n\nCamera and placement live in [framing & camera](#framing--camera) — not optional spice.\n\n**Rule:** pick **at most two** spice items per prompt. They must answer “what would a photographer notice here?” — not a checklist dump.\n\n**Skip spice when:** product hero, avatar MC talking head, try-on full-body (garment is the focus), or minimal studio brief.\n\n## Photoreal anti-slop (neon / stylized briefs)\n\nStylized settings still need **documentary skin discipline** or outputs go waxy:\n\n- Lead with `documentary portrait, natural skin pores, not CGI, not illustration` even for neon/cyberpunk worlds.\n- Prefer **worn real materials** — matte leather, faded denim, scratched CRT bezels, sticky carpet — over `holographic puffer`, `chrome armor`, `HUD`.\n- Name **gritty location cues** — basement arcade, wet alley, scuffed linoleum — not abstract `neon corridor`.\n- Background crowd faces need **imperfect texture**; blur is fine, plastic skin in midground is not.\n\n## Aspect ratio (multi-example sets)\n\nWhen generating **two or more** stills in one session (playground grid, demo batch, mood board), give each independent output a **different** `aspect_ratio` unless the user locked a format.\n\n**Allowed `p-image` values:** `1:1` · `16:9` · `9:16` · `4:3` · `3:4` · `3:2` · `2:3`\n\n**How to pick:** after the [random seed ritual](./random-seed-ritual.md), use [sum-mod](#ssot-axis-derivation-sum-mod) on `ritual_seed` — state it in the turn (*\"Aspect ratio: 16:9\"*). Do **not** default every example to `9:16` or `1:1`.\n\n| Ratio | Typical use |\n|-------|-------------|\n| `9:16` | vertical UGC, full-body fashion, avatar talking head |\n| `16:9` | environmental wide, cinematic landscape plate |\n| `3:4` | editorial portrait, try-on full-body |\n| `4:3` | classic portrait, product + person |\n| `1:1` | packshot grid, social tile |\n| `3:2` · `2:3` | magazine / poster crops |\n\nMatch prompt framing to ratio (e.g. `16:9 horizontal wide shot`, `9:16 vertical full body`). **`p-image-try-on`** inherits plate size when `preserve_input_size: true` — diversify person plates first.\n\n**Same character arc:** one ratio for the whole chain unless the user asks for reframes.\n\n## By model (minimum diversity)\n\n| Model | Besides ritual seed, always vary |\n|-------|-----------------------------------|\n| **`p-image`** | cast/creature + objects + action + setting + camera + **`render_category_tag`** + **aspect_ratio**; [explicit structure](#explicit-prompt-structure-required); [text hygiene](#text--typography-by-model) (no upsampling) |\n| **`p-image-edit`** | edit tag + setting/angle delta; same identity URL |\n| **`p-image-try-on`** | person plate world + garment complexity; preserve scene |\n| **`p-image-upscale`** | N/A on prompt — diversify **source** stills |\n| **`p-video`** | motion/scene tag + `video_prompt`; differ start plates per scene |\n| **`p-video-avatar`** | `video_prompt` + still world per scene; lock voice per character |\n| **`p-video-animate`** | persona still style/setting per slider ref |\n| **`p-video-replace`** | video-edit tag + full cast spread on showcase reels |\n\n## When **not** to maximize diversity\n\n- **Same character arc** — lock hero plate URL, one `voice`, cast descriptor; vary only setting/angle/motion per scene.\n- **User asked for continuity** — match their cast and approved plates.\n- **Draft → final** — same prompt; change only `draft: false`. Use `api_seed` only if user locked API reproducibility.\n\n## Anti-patterns\n\n| Wrong | Right |\n|-------|--------|\n| Copy doc example ritual strings | [Random seed ritual](./random-seed-ritual.md) — fresh string each time |\n| Pass ritual string as API `seed` | Ritual is SSoT planning only; `api_seed` when user requests |\n| White wall + MC CU on every demo | Rotate setting + camera + cast |\n| One `video_prompt` for whole reel | Unique motion per scene row |\n| New ritual string mid avatar chain on same brief | Reuse `ritual_seed` until recast or new independent output |\n| Same aspect ratio on every playground example | Rotate `1:1` · `16:9` · `9:16` · `4:3` · `3:4` · `3:2` · `2:3` per [aspect ratio rules](#aspect-ratio-multi-example-sets) |\n| Every hero same athletic body | Rotate [body type spread](#body-type-spread) |\n| Generic hospital hallway | Named ER set dressing + mixed body types in crowd |\n| `holographic` / `chrome` on photoreal cyber scenes | Worn leather, scratched cabinets, documentary skin cues |\n| Monoculture crowd in a named global city | [Location-matched crowds](#location-matched-crowds) — hero ≠ background ethnicity |\n| Magenta-cyan neon on photoreal gym | Warm overhead studio light, mirror wall, real spin bikes |\n| All-male or all-female group class | [Group classes](#group-classes--courses) — mixed-gender background cues |\n| Centered subject every frame | [Framing & camera](#framing--camera) — rotate `camera_tag` + placement |\n| Subject facing camera / at viewer | Off-lens gaze, profile, from behind, or watching crowd |\n| Random animals with no setting reason | Animals only when place implies them |\n| Every stylized panel is anime | Rotate [render categories](#render-categories) — use `cartoon_anime_fantasy` at most once per batch |\n| Vague `cool portrait, neon vibes` | [Explicit structure](#explicit-prompt-structure-required) — named subject, action, objects, setting |\n| `no text` / `without signage` in prompt | Negation invokes text — use [text rules by model](#text--typography-by-model) |\n| Dense typography on **`p-image`** | Drop copy or simplify the brief — `p-image` has no prompt upsampling |\n\n## Related\n\n- [generation-quality-checklists.md](./generation-quality-checklists.md) — core + model checklists\n- [staged-generation-gate.md](./staged-generation-gate.md) — approval phases\n\nFile v1.0.6:references/generation-quality-checklists.md\n\n# Generation quality checklist hub\n\nUse this as the shared quality gate across models and workflows.\nRun the **Core checklist** for every generation job, then run the model-specific checklist.\n\n## Who applies these checklists?\n\n**The coding agent** — by **opening the real output files** (images, video, or audio) and reviewing them with vision. These checklists are **not** automated test scripts. There is no separate scoring service: the agent reads each item and judges pass or fail from what it sees and hears.\n\nTypical flow:\n\n1. **Generate or download** the asset to a local path (`stills/`, `clips/`, etc.).\n2. **Inspect the file** — view the image, watch the video clip, or listen to narration when the checklist covers audio.\n3. Run the **Core checklist** (below), then the **model-specific checklist** for that job.\n4. **If something fails** — note which items failed, adjust prompt / settings / seed, and regenerate **only that asset** (do not advance to expensive video steps on a bad still).\n5. **If it passes** — show the user the file paths (and previews when helpful). In workflows, still follow [staged-generation-gate.md](./staged-generation-gate.md): agent checklist review happens **before** you ask the user to approve stills or clips.\n\nThe user's **approve plan / approve stills / approve clips** gates are separate. Agent checklists catch obvious problems early so the user is not asked to sign off on broken outputs.\n\nMaintenance rule: keep tool/workflow mapping only in this file to avoid link drift.\n\n## Match map (tool -> checklist -> workflows)\n\n| Tool/model | Checklist | Common workflows |\n|------------|-----------|---------------|\n| `p-image` | [`p-image-quality-checklist.md`](https://github.com/PrunaAI/pruna-skills/tree/main/image/p-image-quality-checklist.md) · persona bar: [`realistic-persona-showcase.md`](https://github.com/PrunaAI/pruna-skills/tree/main/shared/realistic-persona-showcase.md) | [`image-to-video`](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/image-to-video/skills/image-to-video/SKILL.md), [`narrated-multi-scene`](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/narrated-multi-scene/skills/narrated-multi-scene/SKILL.md), [`WORKFLOW-RECIPES`](https://github.com/PrunaAI/pruna-skills/tree/main/docs/WORKFLOW-RECIPES.md) |\n| `p-image-edit` | [`p-image-edit-quality-checklist.md`](https://github.com/PrunaAI/pruna-skills/tree/main/image/p-image-edit-quality-checklist.md) | [`avatar-single-scene`](../SKILL.md), [`avatar-multi-scene`](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/avatar-multi-scene/skills/avatar-multi-scene/SKILL.md), [`WORKFLOW-RECIPES`](https://github.com/PrunaAI/pruna-skills/tree/main/docs/WORKFLOW-RECIPES.md) |\n| `p-image-upscale` | [`p-image-upscale-quality-checklist.md`](https://github.com/PrunaAI/pruna-skills/tree/main/image/p-image-upscale-quality-checklist.md) | [`image-to-video`](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/image-to-video/skills/image-to-video/SKILL.md), [`narrated-multi-scene`](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/narrated-multi-scene/skills/narrated-multi-scene/SKILL.md), [`WORKFLOW-RECIPES`](https://github.com/PrunaAI/pruna-skills/tree/main/docs/WORKFLOW-RECIPES.md), [`generate_upscale_comparison.py`](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/_shared/scripts/generate_upscale_comparison.py) |\n| `p-image-try-on` | [`p-image-try-on-quality-checklist.md`](https://github.com/PrunaAI/pruna-skills/tree/main/image/p-image-try-on-quality-checklist.md) | [`WORKFLOW-RECIPES`](https://github.com/PrunaAI/pruna-skills/tree/main/docs/WORKFLOW-RECIPES.md), [`p-image-try-on`](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/p-image-try-on/skills/p-image-try-on/SKILL.md), [`realistic-persona-showcase.md`](https://github.com/PrunaAI/pruna-skills/tree/main/shared/realistic-persona-showcase.md) |\n| `p-video` | [`p-video-quality-checklist.md`](https://github.com/PrunaAI/pruna-skills/tree/main/video/p-video-quality-checklist.md) | [`image-to-video`](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/image-to-video/skills/image-to-video/SKILL.md), [`narrated-multi-scene`](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/narrated-multi-scene/skills/narrated-multi-scene/SKILL.md), [`interactive-explainer`](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/interactive-explainer/skills/interactive-explainer/SKILL.md), [`visual-transition-reel`](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/visual-transition-reel/skills/visual-transition-reel/SKILL.md), [`WORKFLOW-RECIPES`](https://github.com/PrunaAI/pruna-skills/tree/main/docs/WORKFLOW-RECIPES.md) |\n| `p-video-avatar` | [`p-video-avatar-quality-checklist.md`](https://github.com/PrunaAI/pruna-skills/tree/main/video/p-video-avatar-quality-checklist.md) · persona bar: [`realistic-persona-showcase.md`](https://github.com/PrunaAI/pruna-skills/tree/main/shared/realistic-persona-showcase.md) | [`avatar-single-scene`](../SKILL.md), [`avatar-multi-scene`](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/avatar-multi-scene/skills/avatar-multi-scene/SKILL.md), [`interactive-explainer`](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/interactive-explainer/skills/interactive-explainer/SKILL.md), [`WORKFLOW-RECIPES`](https://github.com/PrunaAI/pruna-skills/tree/main/docs/WORKFLOW-RECIPES.md) |\n| `p-video-animate` | [`p-video-animate-quality-checklist.md`](https://github.com/PrunaAI/pruna-skills/tree/main/video/p-video-animate-quality-checklist.md) | [`avatar-multi-scene`](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/avatar-multi-scene/skills/avatar-multi-scene/SKILL.md), [`WORKFLOW-RECIPES`](https://github.com/PrunaAI/pruna-skills/tree/main/docs/WORKFLOW-RECIPES.md) |\n| `p-video-replace` | [`p-video-replace-quality-checklist.md`](https://github.com/PrunaAI/pruna-skills/tree/main/video/p-video-replace-quality-checklist.md) | [`p-video-replace`](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/p-video-replace/skills/p-video-replace/SKILL.md), [`generate_video_comparison.py`](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/_shared/scripts/generate_video_comparison.py) |\n| `music-2.5` + music video assembly | [`music-video-quality-checklist.md`](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/music-video-quality-checklist.md) | [`music-video`](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/music-video/skills/music-video/SKILL.md), [`music-2.5`](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/music-2.5/skills/music-2.5/SKILL.md) |\n\n## Core checklist (all models)\n\n- **[Generation diversity](./generation-diversity.md)** — ritual seed + rotate scenario axes on **every** model (image, video, try-on, avatar, …).\n- **[Random seed ritual](./random-seed-ritual.md) (SSoT)** — generate and state a ritual string **before** every generation; derive prompt axes via sum-mod; never copy example strings from docs.\n- Goal and acceptance criteria are explicit (what \"good\" looks like is written down).\n- Input assets are valid and licensed (URL/file reachable, rights cleared).\n- Prompt and settings match the intended output format (`aspect_ratio`, duration, resolution, style lock). **Video default:** `720p`, `24` fps unless the brief asks for final `1080p` / `48`.\n- Output contains no accidental watermarks, UI overlays, or stray text unless requested.\n- Brand, legal, and safety constraints are satisfied before handoff.\n- Manifest/log captures model, input fields, prediction id, output URL, and **`ritual_seed`** for traceability.\n\n## Model-specific checklists\n\n- [`p-image-quality-checklist.md`](https://github.com/PrunaAI/pruna-skills/tree/main/image/p-image-quality-checklist.md)\n- [`p-image-edit-quality-checklist.md`](https://github.com/PrunaAI/pruna-skills/tree/main/image/p-image-edit-quality-checklist.md)\n- [`p-image-upscale-quality-checklist.md`](https://github.com/PrunaAI/pruna-skills/tree/main/image/p-image-upscale-quality-checklist.md)\n- [`p-image-try-on-quality-checklist.md`](https://github.com/PrunaAI/pruna-skills/tree/main/image/p-image-try-on-quality-checklist.md)\n- [`p-video-quality-checklist.md`](https://github.com/PrunaAI/pruna-skills/tree/main/video/p-video-quality-checklist.md)\n- [`p-video-avatar-quality-checklist.md`](https://github.com/PrunaAI/pruna-skills/tree/main/video/p-video-avatar-quality-checklist.md)\n- [`p-video-animate-quality-checklist.md`](https://github.com/PrunaAI/pruna-skills/tree/main/video/p-video-animate-quality-checklist.md)\n- [`p-video-replace-quality-checklist.md`](https://github.com/PrunaAI/pruna-skills/tree/main/video/p-video-replace-quality-checklist.md)\n- [`music-video-quality-checklist.md`](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/music-video-quality-checklist.md)\n\n## Visual variety (launch reels)\n\nBefore **any** generation, run [generation-diversity.md](./generation-diversity.md). Launch reels: also [visual-variety-bible.md](https://github.com/PrunaAI/pruna-skills/tree/main/shared/visual-variety-bible.md) **Variety checklist**. Persona/playground bar: [realistic-persona-showcase.md](https://github.com/PrunaAI/pruna-skills/tree/main/shared/realistic-persona-showcase.md).\n\nFor phased human review before expensive video jobs, see [staged-generation-gate.md](./staged-generation-gate.md) and the per-skill index [workflow-feedback-gates.md](./workflow-feedback-gates.md).\n\n## Workflow note\n\nFor multi-scene projects, run these checks per scene and add a final continuity pass\n(style, character identity, voice, and pacing consistency across scenes).\n\n**Narrated cinematic B-roll:** validate [scene anchor triple](https://github.com/PrunaAI/pruna-skills/tree/main/video/scene-anchor-triple.md) inputs before `p-video` — start still, end still, uploaded narration URL per row.\n\nFile v1.0.6:references/p-video-avatar-quality-checklist.md\n\n# p-video-avatar quality checklist\n\nBefore calling the model and after each avatar clip, **open the still or video and review it visually** against this checklist (agent vision review — see [generation-quality-checklists.md](https://github.com/PrunaAI/pruna-skills/tree/main/policies/generation-quality-checklists.md#who-applies-these-checklists)).\n\n## Applies to\n\nSee the canonical mapping in [`generation-quality-checklists.md`](https://github.com/PrunaAI/pruna-skills/tree/main/policies/generation-quality-checklists.md).\n\n## Input still gate (pre-render)\n\n- Face and mouth/beak are large and clear enough for lip-sync.\n- Mouth/beak and eyes are unobstructed (no hair/props/foreground clutter crossing them).\n- Head pose is speaking-friendly (avoid extreme angles, tiny head crop, or chin cutoff).\n- Identity/style match cast bible and scene continuity.\n- **Photoreal path:** skin reads natural (not mushy/waxy); plate matches [realistic-persona-showcase.md](https://github.com/PrunaAI/pruna-skills/tree/main/shared/realistic-persona-showcase.md) intent.\n- **Try-on → avatar path:** try-on preservation passed; outfit details visible if script references them.\n\n## Speech and performance\n\n- Spoken output matches intended script/audio content.\n- Voice choice is consistent for recurring characters.\n- Delivery tone matches brief; `voice_prompt` is short and does not leak unintended text.\n- **`voice_script`** reads as speakable human dialogue — not brochure/marketing copy.\n\n## Motion and scene dynamism\n\n- **`video_prompt`** is **unique to this clip** — not duplicated from other scenes in the same project.\n- Motion grammar matches the still (props, setting, angle) — e.g. glance targets exist in plate.\n- Multi-scene reels vary camera angle and movement — not every clip `medium close-up, gentle dolly push-in`.\n- **Stylized clips:** motion energy matches `visual_style_tag` (anime vs documentary vs clay).\n- **Motion templates:** when the clip is a source for `p-video-animate`, verify audible speech and visible lip sync — reject smile/wave-only outputs with no dialogue motion.\n\n## Lip-sync and visual stability\n\n- Mouth movement is plausible and synchronized.\n- No facial warping, jitter, or unstable eye/teeth regions.\n- Hands/props near face do not cause ambiguous anatomy artifacts.\n\n## Clean delivery\n\n- `video_prompt` results in clean framing/motion without prompt side effects.\n- No accidental overlays, stray text, or watermark-like artifacts unless requested.\n- For explainers / any text-prone still: `negative_prompt` + `negative_prompt_strength` > 0 on `p-video-avatar` (runner default or plan `defaults.avatar_negative_*`). Tune strength up only if artifacts persist — high values can harm identity/motion.\n- Still lines stayed free of signage/label triggers; `style_bible` holds negations, not `edit_prompt`.\n- Clip is ready for assembly with consistent style/voice across adjacent scenes.\n\nFile v1.0.6:references/parallel-execution.md\n\n# Parallel async execution (agents)\n\n**Scope:** multi-scene **workflow** skills only (`narrated-multi-scene`, `visual-transition-reel`, `avatar-multi-scene`, `interactive-explainer`, `music-video`, and similar). Single-clip tools (`p-video`, `image-to-video`, one-shot `p-video-avatar`) must **not** import this doc as permission to expand into multi-scene orchestration.\n\nDefault for those multi-step workflows: **async predictions + parallel fan-out** wherever steps do not depend on each other's outputs. In Cursor and similar agent hosts, **dispatch subagents** for independent lanes and merge results into one manifest.\n\nShared HTTP basics: [pruna-api.md](https://github.com/PrunaAI/pruna-skills/tree/main/shared/pruna-api.md). Credentials and privacy: [agent-safety.md](https://github.com/PrunaAI/pruna-skills/tree/main/shared/agent-safety.md).\n\n**Human-in-the-loop:** Do not start paid video phases until stills pass review. See [staged-generation-gate.md](./staged-generation-gate.md).\n\n## Defaults\n\n| Rule | Guidance |\n|------|----------|\n| **Async first** | Omit `Try-Sync` on **all** production predictions. Poll `get_url` until `succeeded` or `failed`. |\n| **Parallel when independent** | If job B does not need job A's `generation_url`, **start both** before polling either. |\n| **Phased when dependent** | Finish phase N (all jobs in the phase) before starting phase N+1. |\n| **Subagents for lanes** | One subagent per independent scene/lane when 2+ scenes; parent owns manifest, confirmation gate, and assembly. |\n| **Sync only for probes** | `Try-Sync: true` is OK for a **single** quick image test—not for video, avatar, or batch runs. |\n\n## Phase model (typical multi-scene avatar)\n\n```text\nPhase 0 — intake + confirmation (sequential; no API)\nPhase 1 — hero: p-image → slop gate → anchor URL              (sequential)\nPhase 2 — per-scene stills: p-image-edit × N                  (parallel across scenes)\nPhase 3 — slop gate on scene stills                           (parallel review; regen failed lanes only)\nPhase 4 — p-video-avatar × N                                  (parallel; all approved still URLs + scripts ready)\nPhase 5 — download + assembly                                 (sequential ordering only)\n```\n\n**Multi-scene `p-video` (B-roll):** after shared uploads, **all scene predictions in one parallel batch** when every scene’s `image` / `last_frame_image` URL is known upfront.\n\n**Multi-scene `p-video` (frame chain):** when scene *i+1* **`image`** must equal scene *i* **`last_frame_image`** and end stills are **not** pre-planned, run **phased** — finish scene *i*, extract or approve end still, upload, then start scene *i+1*. When **`p-image-edit`** produces both start and end stills for all scenes before any video job, revert to **parallel** video batch. See [p-video](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/p-video/skills/p-video/SKILL.md) and [narrated-multi-scene](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/narrated-multi-scene/skills/narrated-multi-scene/SKILL.md).\n\n**Multi-scene narration:** [Gemini TTS](../../gemini-3.1-flash-tts/SKILL.md) per scene can run **in parallel** after scripts are approved. Upload all audio URLs, then **`p-video`** with **`image` + `last_frame_image` + `audio`** per scene ([scene-anchor-triple.md](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/scene-anchor-triple/SKILL.md)). Post-mux is fallback only. Optional [Stable Audio](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/stable-audio-2.5/skills/stable-audio-2.5/SKILL.md) bed after concat — [audio-post-production.md](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/audio-post-production/SKILL.md).\n\n**Multi-scene `p-video-animate` (motion transfer):** see [avatar-multi-scene](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/avatar-multi-scene/skills/avatar-multi-scene/SKILL.md) **`animate`** rows. After confirmation: parallel uploads → optional parallel `p-image-edit` per lane → **`p-video-animate` × N in one batch** → parallel slider renders → sequential concat.\n\n**Mood board (Recipe A):** all **`p-image`** panels with no shared anchor → **parallel async** from the start.\n\n## Parallel API pattern (shell / script)\n\n1. **Create** — `POST /v1/predictions` for every job in the current phase **without waiting** between creates. Store each `{ id, get_url, scene_label }` in the manifest.\n2. **Poll** — Loop all open jobs (sleep 5–15s). Mark `succeeded` / `failed`; retry failed lanes individually.\n3. **Advance** — When every job in the phase succeeds, upload outputs if needed and start the next phase.\n\nExample shape (conceptual):\n\n```bash\n# Phase 5: create all avatar jobs (no Try-Sync)\nfor scene in 1 2 3 4 5; do\n  curl -s -X POST 'https://api.pruna.ai/v1/predictions' \\\n    -H 'Content-Type: application/json' \\\n    -H \"apikey: ${PRUNA_API_KEY}\" \\\n    -H 'Model: p-video-avatar' \\\n    -d @\"scene${scene}_avatar_payload.json\" \\\n    > \"scene${scene}_avatar_create.json\" &\ndone\nwait\n# Then poll all get_url values until none are pending\n```\n\nGeneration packages in this repo should **emit parallel creates + batch poll**, not one scene at a time, unless the user explicitly wants serial execution for cost control.\n\n## Subagent delegation (Cursor / agent hosts)\n\nUse subagents when **2+ independent lanes** exist after the confirmation gate.\n\n| Parent agent | Subagent (one per lane) |\n|--------------|-------------------------|\n| Intake, cast ledger, scene table, read-through, **confirmation** | — |\n| Writes manifest skeleton + phase plan | — |\n| Merges URLs, prediction ids, pass/fail into manifest | Returns lane result JSON |\n| Assembly script + final delivery | — |\n\n**Good splits**\n\n- **Per-scene still lane:** upload (if needed) → `p-image-edit` → slop gate → approved file URL.\n- **Per-scene avatar lane:** `p-video-avatar` async create + poll + download (after still URL is in manifest).\n- **Per-scene B-roll lane:** `p-video` async create + poll + download.\n- **Per-scene motion-transfer lane:** optional repose (`p-image-edit`) → `p-video-animate` async create + poll + download → slider comparison render.\n\n**Launch in parallel** — e.g. five scenes → five subagents in one message; do not walk scenes serially if lanes are independent.\n\n**Parent must**\n\n- Pass each subagent: scene row, hero/anchor URL, `ritual_seed`, cast ledger slice, output paths — **never** API keys in task text ([agent-safety.md](https://github.com/PrunaAI/pruna-skills/tree/main/shared/agent-safety.md)). Prefer parent-owned API calls when the host cannot inject secrets safely.\n- Refuse to start subagents until the user has **explicitly confirmed** the script/plan.\n- Reconcile partial failures: rerun **only** failed lanes.\n\n**Avoid**\n\n- Subagents before confirmation (wastes cost; violates workflow skills).\n- Splitting a **single** dependency chain across subagents (hero must finish before scene edits).\n- Duplicate manifest writes without merge (use one parent-owned `manifest.md` / JSON).\n- Forwarding `PRUNA_API_KEY` / `REPLICATE_API_TOKEN` into prompts, manifests, or subagent briefs.\n\n## When to stay sequential\n\n- **Hero / identity anchor** must exist before any `p-image-edit` from that character.\n- **User asked for serial** execution to limit concurrent spend or rate limits.\n- **Regeneration** after slop failure — rerun that lane only, not the whole project.\n\n## Checklist for agents\n\n- [ ] Confirmation received before first `POST /v1/predictions`\n- [ ] Async used for every video / avatar / batch image job\n- [ ] Independent jobs in the same phase started together\n- [ ] Subagents used for 2+ scene lanes when the host supports them\n- [ ] Manifest records all parallel job ids and per-lane status\n- [ ] Assembly order matches approved scene table (parallel gen ≠ parallel stitch)\n\nFile v1.0.6:references/pruna-api.md\n\n# Pruna P-API (shared reference)\n\nOfficial docs: [Developer Portal](https://docs.api.pruna.ai/), [Quickstart](https://docs.api.pruna.ai/guides/quickstart), [Models](https://docs.api.pruna.ai/guides/models).\n\n**Before first upload or paid call:** [agent-safety.md](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/agent-safety/SKILL.md) — privacy, credentials, local disk, locale.\n\n## Authentication\n\nSend your API key in the **`apikey`** header on every request (not `Authorization: Bearer`).\n\n```bash\n-H \"apikey: ${PRUNA_API_KEY}\"\n```\n\nUse the same header on delivery URLs when downloading bytes.\n\n## Base URL\n\n- Predictions: `https://api.pruna.ai/v1/predictions`\n- File upload: `https://api.pruna.ai/v1/files` (multipart form field `content=@file`)\n- Status: `https://api.pruna.ai/v1/predictions/status/{id}`\n- Delivery: use `generation_url` from a succeeded status (may be relative; prefix with `https://api.pruna.ai` if needed)\n\n## Request shape\n\nAll generative calls use:\n\n- `POST /v1/predictions`\n- Headers: `Content-Type: application/json`, `apikey`, **`Model: <model-id>`** (for example `p-image`, `p-image-edit`, `p-image-try-on`, `p-video`, `p-video-avatar`, `p-video-animate`, `p-video-replace`, `p-image-upscale`)\n- JSON body: `{ \"input\": { ... } }` where `input` fields match the model page (see each skill).\n\n## Sync vs async\n\n| Mode | Header | When to use |\n|------|--------|--------------|\n| Synchronous | `Try-Sync: true` | Fast jobs (many images, simple edits). Completes within ~60s or may time out. |\n| Asynchronous | omit `Try-Sync` | Video, long edits, production reliability. Poll `get_url` / status until `succeeded` or `failed`. |\n\nOfficial guidance: prefer **async for video**; sync is acceptable for quick **p-image** / **p-image-edit** / **p-image-upscale** / **p-image-try-on** when latency is low.\n\n## Parallel async (multi-scene / batch)\n\nWhen several predictions **do not depend on each other's outputs**, create them **in parallel** (async, no `Try-Sync`), then **poll all** `get_url` endpoints until every job finishes. Use **phased** execution when later steps need URLs from earlier steps (hero → scene edits → avatars).\n\nFull patterns, phase diagrams, subagent splits, and script shapes: [parallel-execution.md](https://github.com/PrunaAI/pruna-skills/tree/main/policies/parallel-execution.md).\n\n## Scene anchor triple (multi-scene `p-video`)\n\nNarrated story films pass three uploads per scene — **`image`**, **`last_frame_image`**, **`audio`** — in one prediction. Omit `duration` when `audio` is set.\n\nFull spec: [scene-anchor-triple.md](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/scene-anchor-triple/SKILL.md).\n\n## File uploads\n\nLocal files leave the machine and are processed at `https://api.pruna.ai/` — see [agent-safety.md](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/agent-safety/SKILL.md).\n\n1. `POST /v1/files` with `-F \"content=@/path/to/file.jpg\"` and `apikey` header.\n2. Use `urls.get` from the response (or construct `https://api.pruna.ai/v1/files/{id}`) as the **`image`**, **`last_frame_image`**, **`images[]`**, **`person_image`**, **`garment_images[]`**, **`audio`**, etc. value in `input`.\n\nUploaded files expire (see upload response `expires_at`).\n\n## File upload (curl)\n\n```bash\ncurl -X POST \"https://api.pruna.ai/v1/files\" \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -F \"content=@/path/to/local/file.jpg\"\n```\n\nUse `urls.get` from the JSON response in prediction `input` fields.\n\n## Poll async job {#poll}\n\nAfter an async `POST /v1/predictions` (no `Try-Sync`), poll until `status` is `succeeded` or `failed`:\n\n```bash\ncurl -s -H \"apikey: ${PRUNA_API_KEY}\" \\\n  \"https://api.pruna.ai/v1/predictions/status/PREDICTION_ID\"\n```\n\nUse the `get_url` from the create response. Repeat every few seconds until done.\n\n## Download output {#download}\n\n`-o` writes (or overwrites) a local file — confirm the path with the user ([agent-safety.md](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/agent-safety/SKILL.md)).\n\n```bash\ncurl -L -H \"apikey: ${PRUNA_API_KEY}\" \\\n  \"GENERATION_URL_FROM_STATUS\" \\\n  -o output.bin\n```\n\nIf `generation_url` is relative, prefix with `https://api.pruna.ai`.\n\n## Typical success response\n\n- **Sync:** `{ \"status\": \"succeeded\", \"generation_url\": \"...\" }`\n- **Async (create):** `{ \"id\": \"...\", \"get_url\": \"https://api.pruna.ai/v1/predictions/status/...\" }`\n- **Async (poll):** eventually `{ \"status\": \"succeeded\", \"generation_url\": \"...\" }`\n\nDownload binary output with `GET` to `generation_url` and the same `apikey` header.\n\n## Environment variable\n\nSkills in this repo assume **`PRUNA_API_KEY`** is set in the shell when running `curl` examples.\n\n**Missing key:** agents must stop and point the user to [api-credentials.md](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/api-credentials/SKILL.md) — sign up at [dashboard.pruna.ai](https://dashboard.pruna.ai/), create an API key, then `export PRUNA_API_KEY=...`.\n\n**Agent discipline:** [generation-diversity.md](https://github.com/PrunaAI/pruna-skills/tree/main/policies/generation-diversity.md) before every `POST /v1/predictions`.\n\nFile v1.0.6:references/random-seed-ritual.md\n\n# Random seed ritual (SSoT — mandatory before every generation)\n\nThe random seed ritual is a lean [String Seed of Thought](https://pub.sakana.ai/ssot/) (DAG) protocol. **Every** Pruna generation — every prompt, every `POST /v1/predictions`, every scene row — starts here.\n\nThis prevents copy-pasting example strings (`k7Qm2xP9`, `482901`, …) and reduces accidental duplicate outputs across sessions.\n\n## The ritual (do this first)\n\nBefore writing prompts, curl, or runner JSON:\n\n1. **Generate a random string** in-agent (8–16 chars, mixed case + digits).\n2. **Log it** as `ritual_seed` in the manifest / internal plan. Do **not** require a user-visible *\"Ritual seed: …\"* line unless the user asks for transparency.\n3. **Derive prompt choices** from the string — sum char codes, mod N — pick axes from [generation-diversity.md](./generation-diversity.md) (`aspect_ratio`, `camera_tag`, `render_category_tag`, …).\n4. **Write the prompt** using [explicit prompt structure](./generation-diversity.md#explicit-prompt-structure-required) and derived axes.\n5. **Record** axes chosen and prediction id in the manifest alongside `ritual_seed`.\n\n**Do not pass the ritual string to API `seed`.** API runs without `seed` unless the user explicitly requests reproducibility (`api_seed`).\n\n**Never** proceed to `POST /v1/predictions` without completing steps 1–2 (unless the user supplied an explicit `api_seed` — see below).\n\n## Reuse rules\n\n| Situation | Action |\n|-----------|--------|\n| **New hero / independent still / mood-board panel** | Fresh ritual string |\n| **Same-brief slop retry** | Reuse same `ritual_seed`; note `retry_ritual_seed` in manifest |\n| **Same character arc** | Lock **hero plate URL** + cast descriptor; reuse `ritual_seed` only on same-brief regen |\n| **User says \"lock seed\" / provides integer** | Pass **their** number as `api_seed` → `input.seed`; skip new ritual for that chain |\n\nCharacter continuity = approved plate URL + cast descriptor — **not** the ritual string on the API.\n\n## Anti-patterns\n\n| Wrong | Right |\n|-------|--------|\n| Copy example strings from SKILL.md | Fresh ritual string each independent generation |\n| Pass ritual string as API `seed` | Ritual is planning-only; `api_seed` only when user asks |\n| One ritual string for entire mood board | New ritual per independent **`p-image`** |\n| Skip ritual because API `seed` is optional | Ritual always; API omits `seed` by default |\n\n## Example (internal plan / optional user-visible)\n\nManifest: `\"ritual_seed\": \"k7Qm2xP9\"`. Derived: aspect_ratio 16:9, camera_tag fish-eye, render_category_tag cartoon_anime_fantasy.  \nPrompt: Disco ball reflections on an otter DJ scratching vinyl at a packed 1970s roller rink, fish-eye lens, glitter confetti mid-air, funky energy.  \n…then curl / runner **without** `\"seed\"` in `input`.\n\n## Manifest snippet\n\n```json\n{\n  \"ritual_seed_policy\": \"ssot_dag_before_every_generation\",\n  \"ritual_seed\": \"k7Qm2xP9\",\n  \"seed_log\": [\n    { \"phase\": \"hero_p_image\", \"ritual_seed\": \"k7Qm2xP9\", \"creature_tag\": \"otter_dj\", \"setting_tag\": \"1970s_roller_rink\", \"prompt_hash\": \"…\" },\n    { \"phase\": \"scene_2_avatar\", \"ritual_seed\": \"k7Qm2xP9\", \"scene_id\": 2 }\n  ]\n}\n```\n\n## Where this applies\n\nAll Pruna generation skills and workflow runners — **every invocation**:\n\n- **`p-image`**, **`p-image-edit`**, **`p-image-try-on`**, **`p-image-upscale`**\n- **`p-video`**, **`p-video-avatar`**, **`p-video-animate`**, **`p-video-replace`**\n\n## Related\n\n- [generation-diversit\n\nArchive v1.0.2: 14 files, 36389 bytes\n\nFiles: apm.yml (543b), README-INSTALL.md (391b), references/generation-diversity.md (25952b), references/p-video-avatar-quality-checklist.md (2939b), references/pruna-api.md (5118b), references/random-seed-ritual.md (3950b), references/realistic-persona-showcase.md (22683b), references/staged-generation-gate.md (7700b), references/workflow-feedback-gates.md (5593b), skill-card.md (3042b), skill.deps.json (1138b), skill.manifest.json (413b), SKILL.md (7237b), _meta.json (138b)","readmeExcerpt":"Skill: avatar-single-scene Owner: pruna-ai Summary: Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation. Tags: ai:1.0.14, generative:1.0.14, latest:1.0.14, pruna:1.0.14 Version history: v1.0.14 | 2026-09-29T15:37:19.415Z | auto - Bumped version to 1.0.14. - Updated documentation in SKILL.md; no workflow or logic changes. - Removed skill-card.md ","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"{people and/or creatures} {action} with/at {specific objects} in {named setting},\n{style or era cues}, {camera_tag}, {lighting_tag}"},{"language":"text","snippet":"Disco ball reflections on an otter DJ scratching vinyl at a packed 1970s roller rink,\nfish-eye lens, glitter confetti mid-air, funky energy"},{"language":"text","snippet":"Bioluminescent jellyfish nightclub at abyss depth, VIP anglerfish in sunglasses at velvet rope,\nteal-magenta cinematic lighting"},{"language":"text","snippet":"Corgi cowboy lassoing a runaway taco truck through Monument Valley dust storm,\npulp western poster energy, dynamic diagonal composition"},{"language":"text","snippet":"RATIOS = [\"1:1\", \"16:9\", \"9:16\", \"4:3\", \"3:4\", \"3:2\", \"2:3\"]\naspect_ratio  ← RATIOS[ sum(codes(ritual_seed)) % 7 ]\ncamera_tag    ← camera_tags[ sum(codes(ritual_seed[0:4])) % len(camera_tags) ]\nrender_tag    ← render_tags[ sum(codes(ritual_seed[4:8])) % len(render_tags) ]"},{"language":"text","snippet":"Phase 0 — intake + confirmation (sequential; no API)\nPhase 1 — hero: p-image → slop gate → anchor URL              (sequential)\nPhase 2 — per-scene stills: p-image-edit × N                  (parallel across scenes)\nPhase 3 — slop gate on scene stills                           (parallel review; regen failed lanes only)\nPhase 4 — p-video-avatar × N                                  (parallel; all approved still URLs + scripts ready)\nPhase 5 — download + assembly                                 (sequential ordering only)"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: avatar-single-scene\ndescription: Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation.\nlicense: MIT\nmetadata:\n  version: \"1.0.14\"\n  package: pruna-skills\n---\n\n## Prerequisites\n\nInstall and load these skills before generating (skip if already in context via `@pruna`):\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-image-ideogram` | Use when photo generation needs more control — photoreal results, text in the image, or structured JSON with hex colors and bounding boxes. Simpler photo generation, edits, and video use other skills in the suite. | `npx skills add PrunaAI/pruna-skills@p-image-ideogram -y` |\n| `p-image` | Use when someone explicitly wants the fastest, cheapest photo generation — mood boards, bulk panels, or quick iterations — not when controlled photoreal or in-image text is needed. | `npx skills add PrunaAI/pruna-skills@p-image -y` |\n| `p-image-edit` | Use when someone wants to edit an existing photo — change outfits or backgrounds, compose from reference images, or apply prompt-driven edits. | `npx skills add PrunaAI/pruna-skills@p-image-edit -y` |\n| `p-video-avatar` | Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. | `npx skills add PrunaAI/pruna-skills@p-video-avatar -y` |\n| `gemini-3.1-flash-tts` | Use when someone needs spoken narration or voiceover — explainer tracks, documentary lines, or voice to pair with generated video. | `npx skills add PrunaAI/pruna-skills@gemini-3.1-flash-tts -y` |\n\nOr install the full suite once: `npx skills add PrunaAI/pruna-skills@pruna -y`\n\nFollow each skill's **Before generating** / craft sections — do not restate guide content here.\n\n## Workflow habit\n\nIn **every reply**, name `` `avatar-single-scene` `` in backticks. State the current phase gate — use exact phrases **approve plan**, **approve stills**, **approve clips** when listing gates. Do **not** same-turn plan + paid video. Skip-review / burn-credits → follow `generation-diversity` **Red flags**.\n\n## Feedback gates (required)\n\n| Phase | What to show | Proceed when |\n|-------|--------------|--------------|\n| **0 — Plan** | Full `voice_script`, voice, still + motion plan | **approve plan** |\n| **A — Still** | Hero / portrait plate | **approve still** |\n| **B — Avatar** | Single `p-video-avatar` clip | User accepts |\n\n## Natural language script\n\nWrite **`voice_script`** as **real dialogue**: contractions, natural rhythm, short sentences—how a person talks on camera, not a press release. See `avatar-multi-scene` for good/bad examples.\n\n**`voice_prompt`** must describe **human delivery** (pacing, warmth, founder/conversational tone)—never paste marketing copy or script lines into it.\n\n## Voice and image continuity\n\n- **`voice` / `voice_language`:** Pick **one** preset pair for this clip’s speaker. If this character will appear again in a series or sequel clips, **reuse "},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"avatar-single-scene\",\n  \"version\": \"1.0.14\",\n  \"publishedAt\": 1790696239415\n}"},{"path":"skill-card.md","content":"## Description:\n\nUse when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[pruna-ai](https://clawhub.ai/user/pruna-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nCreators and marketing teams use this skill to plan and generate one speaking avatar clip from an approved portrait and script, with review gates before paid generation.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Related skills may introduce unreviewed behavior when installed.\n\nMitigation: Install only needed skills, review each separately, and pin exact versions or commits where possible.\n\nRisk: Portraits, scripts, audio, and generated media may be uploaded to Pruna APIs.\n\nMitigation: Confirm authorization to use the media and review sensitive material before uploading.\n\n## Reference(s):\n\n- [Avatar Single Scene on ClawHub](https://clawhub.ai/pruna-ai/skills/avatar-single-scene)\n\n## Skill Output:\n\n**Output Type(s):** [Markdown, Guidance, Shell commands, Files]\n\n**Output Format:** [Markdown guidance and commands, with a generated video clip and manifest after approval]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires plan and portrait approval before paid video generation.]\n\n## Skill Version(s):\n\n1.0.14 (source: release metadata and skill frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."},{"path":"skill.manifest.json","content":"{\n  \"references\": []\n}"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation. Skill: avatar-single-scene Owner: pruna-ai Summary: Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation. Tags: ai:1.0.14, generative:1.0.14, latest:1.0.14, pruna:1.0.14 Version history: v1.0.14 | 2026-09-29T15:37:19.415Z | auto - Bumped version to 1.0.14. - Updated documentation in SKILL.md; no workflow or logic changes. - Removed skill-card.md","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1318,"uniquenessScore":47,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T12:22:19.987Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T12:22:19.987Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T14:46:31.412Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}