How to route image and video work through Chusky's native media tools, when to use Daytona for deterministic processing, prompt craft, factual grounding, and asset consistency. Load this whenever generating or processing an image or video is on the table. Tool-usage-driven, not triggered by a user merely mentioning images.
Install
npx skillscat add zester4/chusky/imagine Install via the SkillsCat registry.
Chusky media generation
Read the media tool boundary first. The
runtime tool surface is deliberately small and provider-neutral.
| Tool | Role |
|---|---|
CHUCK_GENERATE_IMAGE |
New image from a text prompt; delivered through the normal channel. |
CHUCK_GENERATE_VIDEO |
New video from a text prompt; queued asynchronously for delivery. |
Daytona + CHUCK_ARTIFACT |
Deterministic processing or validated artifact packaging for a real file. |
Important boundary. The native image/video tools are provider-neutral. They
can deliver through Telegram and can save generated bytes into Daytona when the
call uses destination: "daytona" or "both". Image saving is available in
the current turn; video saving is asynchronous and the returned path is usable
only after workflow completion. They remain prompt-only: source-aware edits,
multi-reference generation, and generative animation of a particular still are
not exposed. Use Daytona for deterministic work on a real saved/uploaded file.
Apply this whenever media generation or processing is considered.
Handle flow (mandatory mental model)
generate → choose destination → verified Daytona path when requested → inspect/process → deliver or register- Use only paths that actually came from a user upload or verified Daytona result.
- Do not claim a generated media path or artifact unless the host returned one.
Workspace-first creative workflow
When the user asks for an app, website, game, interface, brand asset, or a
multi-file design, treat Daytona as the working computer:
- Create or inspect the user's Daytona workspace with
CHUCK_DAYTONA_WORKSPACE. - Generate visual source material with
CHUCK_GENERATE_IMAGEusingdestination: "daytona"or"both". Choose a deliberate path such asassets/generated/hero.png, and use the returned path rather than guessing. - Use Daytona commands and files to compose the generated material with the
real UI, code, typography, responsive layout, and project assets. Keep exact
copy, data, icons, and geometry code-authored. - Run the app in a durable Daytona PTY, verify it with a Daytona preview URL,
browser inspection, and screenshots, then iterate on the actual files. - For a finished image/video or project bundle, register the verified file with
CHUCK_ARTIFACT; for a running site, return the verifiedCHUCK_DAYTONA_PREVIEWURL. A local filesystem path alone is not a user link.
For an ordinary “make me an image” request with no workspace work, usedestination: "telegram". For a design task where the user needs to see both
the source and the resulting app, use destination: "both".
Build accurate visuals with code, not the image tools
- Image models are unreliable at exact text, numbers, and structure. They can handle short text or a simple layout, but they often garble words, invent numbers, draw chart bars that match no data, or point diagram arrows nowhere, and the more that has to be exact, the worse they do. A detailed prompt doesn't make it dependable, and another
Daytona deterministic image processingedit usually won't fix it. So when a result needs specific text, data, or structure to be correct (charts from real numbers, labeled or technical diagrams, math explainers, tables, screens with real copy), construct the asset with code, where you control the exact content. Prefer HTML and CSS, which give much better layout, typography, and polish than Python plotting. When only the look matters (photos, illustrations, characters, scenes, decorative art), the image tools are the right choice. Which one fits depends on what the output needs to get right, not on how the request is worded.
Verifying discrete accuracy (loop)
When the output must get specific text, numbers, data, or structure right, don't trust the first result - verify it in a loop:
- Produce the result (generate, or per Build accurate visuals with code, construct it in code).
- Inspect the actual output - use
read_file(image understanding) on the result path - and confirm every word, number, label, and structural detail matches the requirement, and that nothing overlaps, clips, or runs off-canvas. - If anything is wrong, fix and re-verify:
- Garbled text, invented numbers, or broken layout from an image model? Don't just re-prompt - it will likely garble it again. Rebuild it with code.
- Overlapping or clipped elements in code-built output? Re-lay-out with auto-layout (HTML/CSS) rather than nudging coordinates by hand.
- Otherwise make one targeted edit via
Daytona deterministic image processingwith the prior path.
- Only finish when the discrete content is exactly correct. If it can't be made accurate, tell the user instead of shipping something wrong.
Core Principles
- You own the prompt. If the user gives a detailed prompt or asks you to use theirs, use it verbatim. Otherwise craft the final prompt: front-load the subject, give strong high-level direction for mood, composition, lighting, and style without over-specifying every detail, write natural prose rather than keyword tags, and describe positively instead of using negative prompts. For edits, describe only what changes. Target 2-5 sentences.
- Reference-first for real people. Never use pure text-to-image for a named real person or group, including face swaps, posters, cartoons, and cinematic or editorial depictions. Use
Daytona deterministic image processingwith a real reference path instead, and never produce non-consensual, sexualized, or minor-involving likenesses. See Real People and References for the procedure. - Ground facts with search first. If any part of the request depends on a real-world fact, identity, brand or product, place, event, or top/latest/current result, search the web before generating and put the actual verified details into the prompt. Don't rely on memory, and don't write vague placeholders like "the current president"; write the verified name.
- Reuse a base for consistency when a real file exists. Keep a verified
user-uploaded or Daytona-generated base for deterministic variations. The
currentCHUCK_GENERATE_IMAGEtool is prompt-only and does not return a
source path for generative editing; do not invent one. - Handle failures gracefully. On a moderation or safety block, stop; don't retry and don't paraphrase the prompt to evade the filter. Tell the user it was blocked and offer a different direction. If a reference is weak or a result looks off-target, say so and ask for an upload or redirect rather than silently iterating.
- Plan multi-step workflows. Sequence the steps; only parallelize generations that belong to the same step.
- Review at the end. Confirm the generations you intended actually
executed and match what was asked. Use the normal channel delivery result. - Don't assume tool behavior. Don't invent tool parameters, return values, or environment capabilities that aren't actually provided; verify rather than guess.
Choosing the tool
| Situation | Call |
|---|---|
| New image for chat | CHUCK_GENERATE_IMAGE with { prompt, destination: "telegram" } |
| New image for workspace/design | CHUCK_GENERATE_IMAGE with { prompt, destination: "daytona" } or "both" |
| New video for chat | CHUCK_GENERATE_VIDEO with { prompt, destination: "telegram" } |
| New video for workspace/design | CHUCK_GENERATE_VIDEO with { prompt, destination: "daytona" } or "both" |
| Resize, crop, compose, convert, or inspect a real file | Daytona tools |
| Deliver a validated binary or project bundle | CHUCK_ARTIFACT |
The current native generation tools are prompt-only. Source-aware editing,
multi-reference generation, and image-to-video are not available in this
runtime. Do not substitute a text-only generation when the source is essential.
CHUCK_GENERATE_IMAGE
Generate a new image from a text prompt.
Inputs:
prompt(required) - full description of the desired image.- The live tool accepts
prompt, optionaldestination, and optionalworkspacePath; it does not accept aspect-ratio or source arguments. If exact
dimensions matter, save to Daytona and build or normalize the asset there.
To produce multiple variations, make multiple calls with distinct prompts.
Source-aware generation
The current Chusky surface has no native source-aware image editor, multi-
reference image operation, or local image-to-video operation. For deterministic
changes to a real image, use Daytona. For a generative source-aware request,
state the limitation and ask for a supported alternative; never invent a tool
call or a returned path.
CHUCK_GENERATE_VIDEO
Generate a new video from a text prompt only (no source frame).
Inputs:
prompt(required) - short present-tense shot description. The tool is
asynchronous and the completed video is delivered through the normal channel.
Use destination: "daytona" or "both" when the clip is part of a workspace
pipeline. A video destination path is reserved when the job is queued and is
reported again after the workflow writes the completed bytes. Do not start
ffmpeg, sprite extraction, or artifact registration until completion is
confirmed.
For multi-shot work, make separate short generation requests, keep each prompt
to one clear beat, and assemble only verified local clips in Daytona. Do not
pretend that multiple shots are one completed video until the assembled file
has been inspected.
Do not invent a local video path or consume it before the asynchronous workflow
reports completion. If the user needs a video processed in Daytona, request the
Daytona destination, then continue from the reported verified path.
Writing Strong Prompts
Describe, roughly in this order: subject -> action/pose -> setting -> style -> composition -> lighting/mood -> key details.
- Be specific and concrete; lead with the most important elements.
- State what to include rather than what to exclude.
- Use one coherent scene per prompt.
- Match
aspect_ratioto the use case:9:16for phone/story,16:9for banner/video frame or OG share cards,1:1for avatar/icon.
Real People and References
- Search the web first to confirm identity, role, relationship, or event, even when it seems obvious.
- Obtain a strong reference image on disk (user upload or verified Daytona
path). Use it for deterministic Daytona work; the native generator cannot
currently consume it as a generative source. - If no suitable reference exists, ask the user to upload one rather than
silently generating a weak substitute.
Showing results
- Let the native tool's normal channel delivery show the generated image/video.
- For QC or scripts, use only a real user-uploaded or verified Daytona path.
Game sprites and maps have their own pipelines — follow generate2dsprite,video2dsprite, and generate2dmap for those.
Failure modes to avoid
- Calling undocumented or provider-specific media helpers.
- Inventing a filesystem path that the native tool never returned.
- Running chroma/ffmpeg on a made-up path.
- Claiming that an asynchronous video job is already available locally.