← ImagineArtCONTENT HISTORY

Update to ImagineArt

Snapshot Sep 30, 2026 · 22:47 UTC · version 2.0.0

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "name": "effects",
  "description": "Turn a single uploaded photo into a short viral video using a named preset look — /effects to browse, or a named token like /zoom-punch or /main-character. Use when someone uploads an image and wants motion, a trending effect, or \"make this go viral\". Not for text-to-video with no source image (use Studio), and not for fashion looks (use Runway Motion).",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 473
    },
    {
      "relative_path": "assets/ATTRIBUTION.md",
      "size_in_bytes": 938
    },
    {
      "relative_path": "assets/icon.svg",
      "size_in_bytes": 565
    },
    {
      "relative_path": "references/effects.md",
      "size_in_bytes": 5701
    },
    {
      "relative_path": "references/errors.md",
      "size_in_bytes": 2325
    },
    {
      "relative_path": "references/models.md",
      "size_in_bytes": 3809
    },
    {
      "relative_path": "references/qa.md",
      "size_in_bytes": 991
    }
  ],
  "skill_md_contents": "---\nname: effects\ndescription: Turn a single uploaded photo into a short viral video using a named preset look — /effects to browse, or a named token like /zoom-punch or /main-character. Use when someone uploads an image and wants motion, a trending effect, or \"make this go viral\". Not for text-to-video with no source image (use Studio), and not for fashion looks (use Runway Motion).\n---\n\n# Effects\n\nOne photo in, one short video out. The user should never have to write a prompt.\n\n## When this fires\n\n- An image is attached and the user asks for motion, an effect, or a trending look\n- The user types `/effects` or any named preset token\n- \"make this move\", \"make this go viral\", \"add an effect to this\"\n\n**Not this skill:** text-to-video with no source image (Studio), animating a fashion\nshot from a shoot (Runway Motion), colour grading a still without motion (Retoucher).\n\n## Workflow\n\n1. **Establish the organization.** Every call needs one. It usually resolves silently —\n   pass `org_id` when you have it, and when you don't, call the tool anyway and retry with\n   the id it returns. If the tool responds that no organization could be resolved (a\n   first-time user with more than one), call `select_organization`, then continue. That is\n   a normal step, not an error.\n\n2. **Get the source image.** Call `request_image_upload` — this renders the upload widget\n   and places the resulting URLs into your context automatically. **Attached files are not\n   handed to this server**, so there is no way to read an attachment directly, and\n   `user_upload` is internal to that widget. If the user pasted an ImagineArt URL, use it\n   as-is. No image means no video; ask for one.\n\n3. **Resolve the preset.**\n   - `/effects` with no name: show a short list of looks from `references/effects.md`,\n     grouped by feel, and let them pick.\n   - A named token (`/zoom-punch`): look it up in `references/effects.md`.\n   - **Unknown token:** do not stop and ask what they meant. Infer the intent from the\n     token and the conversation, pick sensible defaults, and generate. Never claim a\n     preset exists that doesn't, and never pass an unknown name as a model id.\n\n4. **Generate.** Call `generate_video` with:\n   - `prompt` — the preset's prompt, with the user's subject woven in\n   - `image_url` — an array containing **exactly one** URL (this is what makes it\n     image-to-video rather than text-to-video)\n   - `model`, `duration` and `resolution` — from the preset. Use its values unless a\n     refusal sends you to the preset's `fallback` (see below); that is the one case where\n     you change them, and you change all three together.\n   - **Never omit `resolution`.** An omitted resolution renders at the model's *lowest*\n     tier (`seedance-2.5` defaults to 480p), and low-resolution output is the fastest way\n     to make this skill look broken. Durations behave the same way: a value outside the\n     model's list silently falls back.\n\n5. **Finish.** Where a widget renders, it polls on its own — don't call `fetch_status`.\n   On a text-only host with no widget, poll `fetch_status` with `id=<uuid>` and\n   `sync: true` until status is `complete` or `error`, then use the returned URL.\n\n6. **Offer one more.** Suggest a second look from the same family. Repeat generation is\n   the whole point of this skill.\n\n## Model refusals\n\n**Confirmed in testing:** `seedance-2.5` declines sources it reads as containing a real\nperson — including illustrated and cartoon characters. This is a **model restriction**, not\na safety judgement about the content: other models accept the same image.\n\nSo:\n\n1. **If the source shows a person, don't open on `seedance-2.5` at all.** Use the preset's\n   `fallback` from the start. Person-centric presets already default to `seedance-2.0`.\n2. **If a restriction refusal happens anyway**, switch to the preset's `fallback` with that\n   fallback's stated duration and resolution — and **tell the user which model you used\n   instead**, in one short line. A different model is a different look; silent substitution\n   leaves them confused about why two runs differ.\n3. **If the refusal is a safety refusal** — the content itself was declined, not the input\n   class — **do not try other models.** Say what was declined and offer a different subject.\n   When you can't tell the two apart, treat it as a safety refusal.\n4. **Two attempts maximum**, then stop and report.\n\nSee `references/errors.md` for the full taxonomy.\n\n\n## Framing\n\nAsk for `9:16` where the preset specifies it, but know that **`seedance-2.5` image-to-video\nadopts the source image's ratio and ignores `aspect_ratio` entirely**. Don't promise\nvertical output on that path. If the user needs true vertical, tell them the clip follows\ntheir photo's shape.\n\n## Other defaults\n\n- **Short.** Use the preset's duration; don't lengthen it unprompted.\n- **One generation per request.** Never fan out across presets unless asked.\n- Video generation requires a paid organization. Relay subscription refusals verbatim —\n  they carry the upgrade link.\n\n## Conventions\n\n- Never print `org_id`, `folder_id`, or raw asset uuids.\n\n## Where the presets should live\n\n`references/effects.md` is the starter library. The target architecture moves it\nserver-side behind `get_token_instructions(token)` so new looks ship without a plugin\nresubmission. When that endpoint exists, this skill resolves tokens through it and the\nreference file is deleted.\n\n## When something fails\n\nRead `references/errors.md`. Identify the kind of failure before responding: pending jobs\nare waited on, technical errors retried at most twice, unsupported capabilities stated\nplainly, safety refusals never routed around, and every material change disclosed.\n\n## QA before delivery\n\nRun `references/qa.md` before calling this finished. Inspect the actual output — never\nclaim quality you have not observed, and say plainly what you could not verify.\n"
}

SHA-256: 74d973236c486fc545dc437d49b92df8b9461d476571477a8d3cc65bb9e887fc