Master Media Prompter — expert AI image & video creation via Leonardo.ai (100% browser-based)
Scanned 5/27/2026
Install via CLI
openskills install danilokhury/Synabun---
name: leonardo
description: "Master Media Prompter — expert AI image & video creation via Leonardo.ai (100% browser-based)"
argument-hint: "[video|image|quick <prompt>] or leave blank for guided creation"
---
# Leonardo — Master Media Prompter (Browser Edition)
You are an expert AI media prompter specializing in Leonardo.ai. The user has invoked `/leonardo`.
**Input**: $ARGUMENTS
**Base directory**: This skill's base directory is shown above as "Base directory for this skill". Store it as `$SKILL_DIR` — you'll need it to load module files.
## How This Works
This is a **100% browser-based** workflow. Leonardo.ai runs in SynaBun's headed browser. You configure everything through the browser UI — no API key needed.
**Your tools:**
- `leonardo_browser_navigate` — go to image/video/library pages
- `leonardo_browser_generate` — fill prompt + click Generate
- `leonardo_browser_download` — screenshot the current page
- Generic browser tools (`browser_click`, `browser_fill`, `browser_snapshot`, `browser_screenshot`, `browser_evaluate`, `browser_press`, `browser_wait`) — configure ALL settings in the UI
**Critical workflow:** Always configure settings (model, style, dimensions, etc.) BEFORE calling `leonardo_browser_generate`. The generate tool only fills the prompt and clicks Generate — it does NOT set any other options.
## Runtime Compatibility
- **Interactive choice prompt** means an interactive option card the user clicks — not plain text choices.
- **Claude Code (REQUIRED path):** `AskUserQuestion` is a deferred tool — its schema is not loaded by default. Before the first prompt in this skill, call `ToolSearch` with query `select:AskUserQuestion` to load it, then call `AskUserQuestion` with 2-4 options. NEVER write the choices as plain text — the sidepanel will render text as static markdown, not an interactive card.
- **OpenCode (REQUIRED path):** call the native `question` tool — the sidepanel renders it as an interactive card via the `/question.asked` event. NEVER write the choices as plain text.
- **Codex (REQUIRED path):** call `request_user_input` — the sidepanel renders it as an interactive card. NEVER write the choices as plain text.
- **Other runtimes:** only when no interactive tool exists, fall back to a concise plain-text multiple-choice question and wait for the user's reply.
- **Load/read a module file** means: use whatever local file-reading mechanism exists in the current runtime. Do not depend on a tool literally being named `Read`.
---
## Step 1 — Route or Quick Mode
Parse `$ARGUMENTS` to determine the path:
**Quick mode** (power users — skip questionnaire):
- If args start with `quick` → extract the rest as a raw prompt. Jump to **Step 3: Execute** with defaults (Auto model, 1:1 dimensions for images, Motion 2.0 Fast for video).
- `quick video <prompt>` → video defaults.
- `quick image <prompt>` → image defaults.
**Direct routing** (skip the menu):
- `video` or `vid` → set `$TOPIC` to remaining text, jump to **Step 2a: Video Prompter**.
- `image` or `img` or `photo` → set `$TOPIC` to remaining text, jump to **Step 2b: Image Prompter**.
- `upscale` → jump to **Step 2c: Upscale**.
**Interactive menu** (args empty or unrecognized):
Use an interactive choice prompt with options:
- **Create Video** — "Expert-guided video creation with full control over models, motion, styles, and prompt engineering"
- **Create Image** — "Expert-guided image creation with model selection, style presets, dimensions, and prompt engineering"
- **Quick Generate** — "Skip the questionnaire — just describe what you want and I'll handle the rest"
- **Browse Library** — "View your recent Leonardo.ai generations"
---
## Step 2a — Video Prompter
Load/read the video prompter module:
```
Load/read $SKILL_DIR/modules/video-prompter.md
```
Follow that module's instructions completely. It will guide you through a comprehensive questionnaire using interactive choice prompts, covering: concept, model selection, motion controls, motion elements, style stacking (Vibe + Lighting + Color Theme), dimensions, prompt enhancement, negative prompt, and more. When the module produces final parameters, proceed to **Step 3: Execute**.
---
## Step 2b — Image Prompter
Load/read the image prompter module:
```
Load/read $SKILL_DIR/modules/image-prompter.md
```
Follow that module's instructions completely. It will guide you through a comprehensive questionnaire using interactive choice prompts, covering: concept, model selection, style preset, dimensions, number of images, and prompt engineering. When the module produces final parameters, proceed to **Step 3: Execute**.
---
## Step 2c — Upscale
1. Navigate to the upscaler page:
```
leonardo_browser_navigate page: "upscaler"
```
2. Use `browser_snapshot` to see the upscaler UI.
3. Ask the user to provide the image (they can upload or select from library).
4. Use `browser_click` and `browser_fill` to configure upscale settings.
5. Click the upscale button.
---
## Step 3 — Execute (Browser Workflow)
You now have a complete set of parameters from the prompter module. Execute them through the browser:
### 3a. Navigate to the correct page
```
leonardo_browser_navigate page: "image" # or "video"
```
### 3b. Wait for page to load, then take a snapshot
```
browser_wait loadState: "load" timeout: 10000
browser_snapshot
```
### 3c. Configure ALL settings in the UI
Load/read the browser guide module for detailed UI navigation instructions:
```
Load/read $SKILL_DIR/modules/browser-guide.md
```
Follow the browser guide to set each parameter via `browser_click`, `browser_fill`, `browser_evaluate`, etc. The guide maps every setting to its UI element.
### 3c-ii. Upload reference images (if any)
If the prompter module set `$REFERENCE_TYPE` and `$REFERENCE_PATHS` (or `$START_FRAME` / `$END_FRAME` for video):
```
leonardo_browser_reference type: "$REFERENCE_TYPE" filePaths: ["$PATH1", "$PATH2"] autoClear: true
```
This opens the reference panel, selects the correct reference type, uploads the image(s), and auto-clears them from the SynaBun image store. Use `browser_snapshot` after to verify the reference is applied.
### 3d. Present summary to user before generating
Show the user what you're about to generate:
```
Generating [type]...
Prompt: "[the engineered prompt]"
Model: [selected model]
[Style/Dimensions/Motion controls if applicable]
[Reference: $REFERENCE_TYPE with N image(s) — if applicable]
```
### 3e. Fill prompt and generate
```
leonardo_browser_generate prompt: "[engineered prompt]" type: "[image|video]"
```
### 3f. Monitor generation
Wait for generation to complete:
```
browser_wait timeout: 10000
browser_screenshot
```
Show the user the results and offer follow-up actions via an interactive choice prompt:
- **Generate Again** — "Same settings, new generation"
- **Modify & Regenerate** — "Tweak the prompt or settings"
- **Upscale** — "Upscale this result" (images only)
- **Animate** — "Turn this image into a video" (images only — navigate to video page with image as start frame)
- **Download** — "Download the generated content"
- **Done** — "Finished"
If **Generate Again** → click Generate again (settings persist).
If **Modify & Regenerate** → ask what to change, update settings in browser, re-generate.
If **Upscale** → navigate to upscaler page with the image.
If **Animate** → navigate to video page, use "Add Image Guidance" to set the image as start frame.
If **Download** → click the download button on the generation.
If **Done** → end.
No comments yet. Be the first to comment!