{"id":"e106253b-641e-42a8-b858-906b236366c6","shortId":"UawURJ","kind":"skill","title":"sn-image-imitate","tagline":"Generates a new image that imitates the style of a reference image while updating content based on user intent.\nUses a three-stage pipeline: image annotation (long caption), caption rewriting, and image generation.\nUse when user asks to \"imitate style\", \"保持这个风格重画\", \"按这张图风格生成\", or","description":"# sn-image-imitate\n\nImage style imitation scene skill (tier 1), relying on the `sn-image-recognize`, `sn-text-optimize`, and `sn-image-generate` tools provided by `sn-image-base` (tier 0).\n\nFeatures:\n\n- Extracts high-fidelity long caption from a reference image\n- Rewrites caption according to user requested content change while preserving style and layout\n- Enforces layout-lock constraints during caption rewrite\n- Performs post-generation layout consistency review and bounded retries\n- Returns structured process artifacts for debugging and reproducibility\n\n## Non-goals\n\n- Pure neural style transfer without content change (use dedicated style-transfer tools instead)\n- Local editing / inpainting of specific regions within the reference image\n- Processing video or animation input (only single static images are supported)\n- Batch generation from multiple reference images in one invocation\n- Guaranteeing pixel-level fidelity to the reference; the skill targets layout and style consistency, not exact reproduction\n\n## Input Specification\n\n- `reference_image` (string, required): local path or URL of the style reference image\n- `target_content` (string, required): new content user wants in the generated image\n- `output_mode` (string, default `friendly`): output mode, `friendly` or `verbose`\n- `aspect_ratio` (string, default `16:9`): output aspect ratio for generation\n- `image_size` (string, default `2k`): output image size preset\n- `max_attempts` (int, default `3`): maximum generation attempts for meeting layout consistency\n- `layout_threshold` (float, default `0.75`): minimum layout similarity score to accept result\n\n## Environment Variable\n\nDependency installation and API key configuration are for [sn-image-base](../sn-image-base/SKILL.md) skill.\n\nThe minimum environment variables to configure `sn-image-base` skill running with [SenseNova Token Plan](https://platform.sensenova.cn/token-plan):\n\n```ini\nSN_BASE_URL=\"https://token.sensenova.cn/v1\"\nSN_API_KEY=\"your-api-key\"\n```\n\nFallback priority is dedicated variable > domain shared variable > global variable. Text calls use `SN_TEXT_API_KEY` -> `SN_CHAT_API_KEY` -> `SN_API_KEY`; vision calls use `SN_VISION_API_KEY` -> `SN_CHAT_API_KEY` -> `SN_API_KEY`; image generation uses `SN_IMAGE_GEN_API_KEY` -> `SN_API_KEY`.\n\nPlease refer to the **Python dependencies and API keys** section in [`sn-image-generate_en.md`](../../docs/sn-image-generate_en.md) for more configurations.\n\n## API Configuration\n\nAll API calls in this skill are executed through the `sn_agent_runner.py` of the `sn-image-base` skill,\nplease refer to the `sn-image-base` skill ([README.md](../sn-image-base/README.md)) for more details.\n\n- **VLM call**: `sn-image-recognize` (Step 1 & 3)\n- **LLM call**: `sn-text-optimize` (Step 2)\n- **Image generation call**: `sn-image-generate` (Step 3)\n\n**When encountering `MissingApiKeyError` or needing explicit model control**: pass model and auth params explicitly via CLI arguments. See `$SN_IMAGE_BASE/references/api_spec.md`.\n\n**`$SN_IMAGE_BASE` path explanation**: `$SN_IMAGE_BASE` is the installation directory of the `sn-image-base` skill (`SKILL.md` exists). The agent can locate this path by skill name `sn-image-base`.\n\n## Architecture: Main Agent + Worker Agent\n\nThis skill uses a two-tier agent architecture:\n\n- **Main Agent**: receives user request, normalizes parameters, sends preflight, invokes Worker Agent, and sends final text/image to user\n- **Worker Agent**: executes fixed 3-step pipeline and returns structured JSON\n\n**Responsibility Boundaries**:\n\n- Worker Agent does not send any user-visible message directly\n- Main Agent sends all user-facing responses\n- Worker Agent last message must be and only be the JSON string defined in Return Contract\n- Worker Agent executes VLM/LLM/image calls directly; no nested subagent for these low-level calls\n\n## Workflow\n\n### Main Agent Workflow\n\n1. Extract `reference_image`, `target_content`, `output_mode` (default `friendly`), `aspect_ratio` (default `16:9`), `image_size` (default `2k`), `max_attempts` (default `3`), and `layout_threshold` (default `0.75`)\n2. Validate required inputs:\n   - `reference_image` is provided and resolvable\n   - `target_content` is non-empty\n3. Send preflight message: `\"Using sn-image-imitate skill to generate a style-consistent image, please wait...\"`\n4. Start Worker Agent with full normalized parameters and working directory\n5. On Worker result:\n   - `status=ok`: send final summary and generated image\n   - `status=error`: report the actual error\n\n### Worker Agent Workflow\n\nWorker Agent receives `reference_image`, `target_content`, `output_mode`, `aspect_ratio`, `image_size`, `max_attempts`, `layout_threshold`, and the working directory of this skill (`$SKILL_DIR`).\n\n**Error Handling Strategy**:\n\nAll `sn_agent_runner.py` calls share the same error handling rules:\n\n- If the subprocess exits with non-zero code, crashes, or times out: do not fallback, return `status=error` with the actual error message from stderr or the system error string\n- If the subprocess returns invalid JSON or the JSON lacks an expected `result` field: return `status=error`, do not silently continue with empty or default values\n- If the VLM review call fails during Step 3, treat the attempt as incomplete: do not record a score, and either retry the review once or skip to the next attempt depending on remaining budget\n\n#### Step 0 — Initialization\n\n1. Generate `task_id` with format `YYYYMMDD_HHMMSS`\n2. Create temp directory: `/tmp/openclaw/sn-image-imitate/<task_id>/` as `TEMP_DIR`\n3. Resolve and normalize `REFERENCE_IMAGE`\n4. Persist user request:\n\n```bash\necho \"$TARGET_CONTENT\" > \"$TEMP_DIR/target-content.txt\"\n```\n\n#### Step 1 — Image Annotation (long caption + layout blueprint)\n\nUse `prompts/image_annotate.md` as system prompt and call `sn-image-recognize` on reference image.\n\n```bash\npython \"$SN_IMAGE_BASE/scripts/sn_agent_runner.py\" sn-image-recognize \\\n  --system-prompt-path \"$SKILL_DIR/prompts/image_annotate.md\" \\\n  --user-prompt \"Please annotate this reference image and follow the required output format.\" \\\n  --images \"$REFERENCE_IMAGE\" \\\n  --output-format json\n```\n\nParse JSON `result`, then parse three blocks:\n\n- `SHORT_CAPTION: ...`\n- `LONG_CAPTION: ...`\n- `LAYOUT_BLUEPRINT_JSON: { ... }`\n\nIf parsing fails, `LONG_CAPTION` is empty, or `LAYOUT_BLUEPRINT_JSON` is invalid JSON, return `status=error`.\n\nPersist outputs:\n\n```bash\necho \"$SHORT_CAPTION\" > \"$TEMP_DIR/reference-short-caption.txt\"\necho \"$LONG_CAPTION\" > \"$TEMP_DIR/reference-long-caption.txt\"\necho \"$LAYOUT_BLUEPRINT_JSON\" > \"$TEMP_DIR/layout-blueprint.json\"\n```\n\n#### Step 2 — New long caption generation (content rewrite with layout lock)\n\nGoal: preserve style/layout/visual language from reference long caption while replacing core content by `target_content`.\n\nHard constraints to preserve (guided by `layout-blueprint.json`):\n\n- visual hierarchy (title/subtitle/body emphasis order)\n- region topology (number of major blocks and their relative positions)\n- reading flow (left-to-right / top-to-bottom / radial / timeline direction)\n- chart type and data encoding form (if present)\n- spacing rhythm and alignment pattern\n- major region bounding boxes and topological relations from blueprint\n\n**Preferred system prompt**: `prompts/caption_rewrite.md` (recommended to add).\nIf missing, use inline fallback system prompt:\n\n`Rewrite the long caption by preserving style and layout constraints while replacing semantic content according to user target. Do not change block topology, reading order, or visual hierarchy. Keep the caption detailed and directly usable for image generation.`\n\nCall `sn-text-optimize`:\n\n```bash\npython \"$SN_IMAGE_BASE/scripts/sn_agent_runner.py\" sn-text-optimize \\\n  --system-prompt-path \"$SKILL_DIR/prompts/caption_rewrite.md\" \\\n  --user-prompt \"Reference long caption:\\n$LONG_CAPTION\\n\\nLayout blueprint JSON:\\n$LAYOUT_BLUEPRINT_JSON\\n\\nTarget content:\\n$TARGET_CONTENT\\n\\nReturn only the rewritten long caption.\" \\\n  --output-format json\n```\n\nParse JSON `result` as `NEW_LONG_CAPTION`. If empty, return `status=error`.\n\nPersist output:\n\n```bash\necho \"$NEW_LONG_CAPTION\" > \"$TEMP_DIR/new-long-caption.txt\"\n```\n\n#### Step 3 — Image Generation and Layout Review Loop\n\nExecute `attempt` from `1` to `max_attempts` sequentially:\n\n**Generate Image** (using `sn-image-base`'s `sn-image-generate` tool):\n\n```bash\npython \"$SN_IMAGE_BASE/scripts/sn_agent_runner.py\" sn-image-generate \\\n  --prompt \"$CURRENT_PROMPT\" \\\n  --aspect-ratio \"$ASPECT_RATIO\" \\\n  --image-size \"$IMAGE_SIZE\" \\\n  --save-path \"$TEMP_DIR/attempt_<N>.png\" \\\n  --output-format json\n```\n\nVLM configuration requirements:\n\n- When `max_attempts > 1`, VLM review is required for each attempt\n- Select VLM model from OpenClaw configuration as parameter for image recognition\n- If no suitable VLM model exists in OpenClaw configuration:\n  - Notify user that current parameter combination cannot be executed\n  - Suggest adding VLM configuration or setting `max_attempts` to `1` to skip review\n- If VLM call times out or fails: do not fallback, report the real error directly\n\n**Layout Consistency Review** (only executed when `max_attempts > 1`):\n\nReview candidate vs reference using `prompts/layout_review.md` (with blueprint as structural oracle):\n\n```bash\npython \"$SN_IMAGE_BASE/scripts/sn_agent_runner.py\" sn-image-recognize \\\n  --system-prompt-path \"$SKILL_DIR/prompts/layout_review.md\" \\\n  --user-prompt \"Reference is image[0], candidate is image[1]. Layout blueprint JSON:\\n$LAYOUT_BLUEPRINT_JSON\\n\\nEvaluate layout similarity and return JSON only.\" \\\n  --images \"$REFERENCE_IMAGE\" \"$TEMP_DIR/attempt_<N>.png\" \\\n  --output-format json\n```\n\nExpected review JSON (inside `result`):\n\n```json\n{\n  \"layout_similarity_score\": 0.0,\n  \"style_similarity_score\": 0.0,\n  \"pass\": false,\n  \"major_deviations\": [],\n  \"fix_hints\": []\n}\n```\n\n**Save Attempt Result**:\n\n```json\n{\n  \"attempt\": 1,\n  \"image\": \"$TEMP_DIR/attempt_1.png\",\n  \"layout_similarity_score\": 0.0,\n  \"style_similarity_score\": 0.0,\n  \"pass\": false,\n  \"major_deviations\": [],\n  \"timing\": {\n    \"image_generation\": { \"elapsed_seconds\": 12.34, \"model\": \"sn_image_model\" },\n    \"vlm_review\": { \"elapsed_seconds\": 5.67, \"model\": \"sensenova-122b\" }\n  }\n}\n```\n\nNote: `elapsed_seconds` is read from the `--output-format json` return of each CLI call; `image_generation.model` is fixed to the hardcoded placeholder `\"sn_image_model\"` (sn-image-generate does not return the model field); `vlm_review.model` is read from the JSON return of sn-image-recognize. `timing.vlm_review` is omitted when `max_attempts=1`.\n\n**Early Termination Check** (only executed when `max_attempts > 1`):\n\nPass criteria:\n\n- `layout_similarity_score >= layout_threshold`\n- `pass = true`\n\n- If pass: immediately exit the loop, do not continue generating\n- If fail and attempts remain, append correction hints to prompt:\n\n```text\nLayout correction requirements:\n- <fix_hint_1>\n- <fix_hint_2>\n...\n```\n\n- If all attempts fail to pass threshold, return highest-score candidate and mark `layout_passed=false`\n\n## Return Contract\n\nWorker Agent final response must be bare JSON (no extra text, no code fence).\n\n### Normal Flow\n\n```json\n{\n  \"status\": \"ok\",\n  \"need_main_agent_send\": true,\n  \"output_mode\": \"friendly|verbose\",\n  \"result\": {\n    \"image\": \"/tmp/openclaw/sn-image-imitate/<task_id>/attempt_2.png\",\n    \"reference_image\": \"<resolved_reference_image>\",\n    \"reference_short_caption\": \"<short caption from step 1>\",\n    \"reference_long_caption\": \"<long caption from step 1>\",\n    \"layout_blueprint\": { \"...\": \"...\" },\n    \"new_long_caption\": \"<rewritten long caption from step 2>\",\n    \"layout_passed\": true,\n    \"selected_attempt\": 2\n  },\n  \"attempts\": [\n    {\n      \"attempt\": 1,\n      \"image\": \"/tmp/openclaw/sn-image-imitate/<task_id>/attempt_1.png\",\n      \"layout_similarity_score\": 0.62,\n      \"style_similarity_score\": 0.79,\n      \"pass\": false,\n      \"major_deviations\": [\"center panel too narrow\", \"title block moved to top-right\"]\n    },\n    {\n      \"attempt\": 2,\n      \"image\": \"/tmp/openclaw/sn-image-imitate/<task_id>/attempt_2.png\",\n      \"layout_similarity_score\": 0.81,\n      \"style_similarity_score\": 0.84,\n      \"pass\": true,\n      \"major_deviations\": []\n    }\n  ],\n  \"review\": {\n    \"threshold\": 0.75\n  },\n  \"timing\": {\n    \"total_elapsed_seconds\": 24.56,\n    \"annotate\": { \"elapsed_seconds\": 3.21, \"model\": \"sensenova-122b\" },\n    \"rewrite\": { \"elapsed_seconds\": 2.45, \"model\": \"sensenova-122b\" },\n    \"generation_total\": { \"elapsed_seconds\": 11.90, \"model\": \"sn_image_model\" },\n    \"review_total\": { \"elapsed_seconds\": 7.00, \"model\": \"sensenova-122b\" }\n  }\n}\n```\n\n### Error Flow\n\n```json\n{\n  \"status\": \"error\",\n  \"error\": \"<actual_error_message>\"\n}\n```\n\nRules:\n\n- `status=ok` must include `need_main_agent_send: true`\n- `result.image` must be an existing generated image path\n- `timing.total_elapsed_seconds` covers full worker execution\n- If parsing of Step 1 format fails (including invalid blueprint JSON), return `status=error` (do not silently continue)\n- `attempts` must record each generation + review attempt\n- If no attempt passes threshold, return highest-score candidate and set `result.layout_passed=false`\n\n## Output Format\n\n### friendly mode (default)\n\n- One concise sentence: generated image follows reference style and updates to requested content\n- Mention whether layout consistency passed threshold and attempt count\n- Send single image: `result.image`\n\n### verbose mode\n\n```\nStyle imitation result\n---\nReference short caption: <reference_short_caption>\n---\nStyle/layout cues:\n<brief extraction from reference_long_caption + layout_blueprint>\n---\nNew long caption:\n<new_long_caption>\n---\n#1 attempt=<n> layout_score=<0.00> style_score=<0.00> pass=<true|false> [selected]\n  deviations: <major_deviations or none>\n#2 attempt=<n> layout_score=<0.00> style_score=<0.00> pass=<true|false>\n  deviations: <major_deviations or none>\n...\n---\nLayout threshold: <0.75> | Passed: <true|false> | Selected: attempt <n>\nTime statistics: Total <total>s | Annotation <t>s | Rewrite <t>s | Generation <t>s×<n> attempts | Review <t>s×<n> attempts\n---\nImages (selected image)\n```\n\n## Call Relationship\n\n- Bottom-level dependency: `sn-image-base` → `sn-image-recognize`, `sn-text-optimize`, `sn-image-generate`\n\n## References\n\n- `prompts/image_annotate.md` - Image annotation + layout blueprint system prompt (Step 1, required)\n- `prompts/caption_rewrite.md` - Caption rewrite system prompt with layout-lock constraints (Step 2, required)\n- `prompts/layout_review.md` - Candidate-vs-reference layout/style review prompt (Step 3, required)\n- `../sn-image-base/SKILL.md` - Base tool behavior and parameter defaults","tags":["image","imitate","sensenova","skills","opensensenova","agent","agent-skills","ai-agents","ai-assistant","data-analysis","document-processing","office-automation"],"capabilities":["skill","source-opensensenova","skill-sn-image-imitate","topic-agent","topic-agent-skills","topic-ai-agents","topic-ai-assistant","topic-data-analysis","topic-document-processing","topic-office-automation","topic-presentation-slides"],"categories":["SenseNova-Skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/OpenSenseNova/SenseNova-Skills/sn-image-imitate","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add OpenSenseNova/SenseNova-Skills","source_repo":"https://github.com/OpenSenseNova/SenseNova-Skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 1627 github stars · SKILL.md body (14,701 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:53:05.016Z","embedding":null,"createdAt":"2026-05-15T06:53:10.171Z","updatedAt":"2026-05-18T18:53:05.016Z","lastSeenAt":"2026-05-18T18:53:05.016Z","tsv":"'/../docs/sn-image-generate_en.md':391 '/attempt_1.png':1623 '/attempt_2.png':1598,1651 '/sn-image-base/readme.md':425 '/sn-image-base/skill.md':295,1936 '/tmp/openclaw/sn-image-imitate':849,1597,1622,1650 '/token-plan):':315 '/v1':322 '0':84,835,1360 '0.0':1399,1403,1422,1426 '0.00':1833,1836,1846,1849 '0.62':1627 '0.75':273,636,1666,1856 '0.79':1631 '0.81':1655 '0.84':1659 '1':59,436,609,837,870,1198,1254,1300,1327,1364,1415,1505,1514,1620,1741,1829,1910 '11.90':1692 '12.34':1436 '122b':1449,1679,1687,1705 '16':241,622 '2':445,637,845,978,1617,1648,1842,1923 '2.45':1683 '24.56':1671 '2k':252,627 '3':261,437,454,546,631,653,807,853,1188,1934 '3.21':1675 '4':672,859 '5':683 '5.67':1445 '7.00':1701 '9':242,623 'accept':279 'accord':98,1088 'actual':699,763 'ad':1292 'add':1066 'agent':498,512,514,522,525,535,543,556,567,575,591,607,675,702,705,1568,1588,1719 'align':1049 'anim':165 'annot':31,872,910,1672,1866,1904 'api':286,324,328,345,349,352,359,363,366,374,377,386,395,398 'append':1539 'architectur':510,523 'argument':471 'artifact':130 'ask':42 'aspect':237,244,619,713,1229,1231 'aspect-ratio':1228 'attempt':258,264,629,718,810,829,1196,1201,1253,1261,1298,1326,1411,1414,1504,1513,1537,1550,1616,1618,1619,1647,1755,1761,1764,1802,1830,1843,1861,1872,1875 'auth':466 'bare':1573 'base':20,82,294,306,318,413,422,478,483,493,509,1209,1888,1937 'base/references/api_spec.md':475 'base/scripts/sn_agent_runner.py':895,1121,1220,1343 'bash':863,891,960,1117,1180,1216,1339 'batch':173 'behavior':1939 'block':933,1020,1095,1641 'blueprint':876,939,950,973,1059,1143,1147,1335,1366,1370,1608,1746,1825,1906 'bottom':1034,1882 'bottom-level':1881 'bound':125,1053 'boundari':554 'box':1054 'brief':1818 'budget':833 'call':341,355,399,430,439,448,594,604,735,803,883,1112,1306,1465,1879 'candid':1329,1361,1559,1771,1927 'candidate-vs-refer':1926 'cannot':1288 'caption':33,34,91,97,115,874,935,937,945,963,968,981,995,1077,1104,1137,1140,1161,1172,1184,1603,1606,1611,1815,1823,1828,1913 'center':1636 'chang':103,144,1094 'chart':1038 'chat':348,362 'check':1508 'cli':470,1464 'code':750,1579 'combin':1287 'concis':1783 'configur':288,302,394,396,1249,1267,1281,1294 'consist':122,196,268,668,1320,1798 'constraint':113,1004,1083,1921 'content':19,102,143,216,220,614,648,710,866,983,999,1002,1087,1151,1154,1794 'continu':793,1532,1754 'contract':589,1566 'control':462 'core':998 'correct':1540,1546 'count':1803 'cover':1733 'crash':751 'creat':846 'criteria':1516 'cue':1817 'current':1226,1285 'data':1041 'debug':132 'dedic':146,333 'default':230,240,251,260,272,617,621,626,630,635,797,1781,1942 'defin':586 'depend':283,384,830,1884 'detail':428,1105 'deviat':1407,1430,1635,1663,1841,1853 'dir':729,852 'dir/attempt_':1242,1384 'dir/attempt_1.png':1418 'dir/layout-blueprint.json':976 'dir/new-long-caption.txt':1186 'dir/prompts/caption_rewrite.md':1131 'dir/prompts/image_annotate.md':905 'dir/prompts/layout_review.md':1353 'dir/reference-long-caption.txt':970 'dir/reference-short-caption.txt':965 'dir/target-content.txt':868 'direct':565,595,1037,1107,1318 'directori':487,682,724,848 'domain':335 'earli':1506 'echo':864,961,966,971,1181 'edit':153 'either':819 'elaps':1434,1443,1451,1669,1673,1681,1690,1699,1731 'emphasi':1013 'empti':652,795,947,1174 'encod':1042 'encount':456 'enforc':109 'environ':281,299 'error':696,700,730,739,760,764,771,789,957,1177,1317,1706,1710,1711,1750 'exact':198 'execut':404,544,592,1195,1290,1323,1510,1736 'exist':496,1278,1726 'exit':745,1527 'expect':784,1390 'explan':480 'explicit':460,468 'extra':1576 'extract':86,610,1819 'face':572 'fail':804,943,1310,1535,1551,1743 'fallback':330,757,1071,1313 'fals':1405,1428,1564,1633,1776,1839,1852,1859 'featur':85 'fenc':1580 'fidel':89,186 'field':786,1485 'final':538,690,1569 'fix':545,1408,1468 'float':271 'flow':1026,1582,1707 'follow':915,1787 'form':1043 'format':842,919,925,1164,1246,1388,1459,1742,1778 'friend':231,234,618,1593,1779 'full':677,1734 'gen':373 'generat':5,38,75,120,174,225,247,263,369,447,452,664,693,838,982,1111,1190,1203,1214,1224,1433,1479,1533,1688,1727,1759,1785,1870,1900 'global':338 'goal':137,988 'guarante':182 'guid':1007 'handl':731,740 'hard':1003 'hardcod':1471 'hhmmss':844 'hierarchi':1011,1101 'high':88 'high-fidel':87 'highest':1557,1769 'highest-scor':1556,1768 'hint':1409,1541 'id':840 'imag':3,8,16,30,37,51,53,65,74,81,95,161,170,178,203,214,226,248,254,293,305,368,372,412,421,433,446,451,474,477,482,492,508,612,624,642,660,669,694,708,715,858,871,886,890,894,898,913,920,922,1110,1120,1189,1204,1208,1213,1219,1223,1234,1236,1271,1342,1346,1359,1363,1380,1382,1416,1432,1439,1474,1478,1496,1596,1600,1621,1649,1695,1728,1786,1806,1876,1878,1887,1891,1899,1903 'image-s':1233 'image_generation.model':1466 'imit':4,10,44,52,55,661,1811 'immedi':1526 'includ':1716,1744 'incomplet':812 'ini':316 'initi':836 'inlin':1070 'inpaint':154 'input':166,200,640 'insid':1393 'instal':284,486 'instead':151 'int':259 'intent':23 'invalid':777,953,1745 'invoc':181 'invok':533 'json':552,584,778,781,926,928,940,951,954,974,1144,1148,1165,1167,1247,1367,1371,1378,1389,1392,1395,1413,1460,1491,1574,1583,1708,1747 'keep':1102 'key':287,325,329,346,350,353,360,364,367,375,378,387 'lack':782 'languag':991 'last':576 'layout':108,111,121,193,267,269,275,633,719,875,938,949,972,986,1082,1146,1192,1319,1365,1369,1374,1396,1419,1517,1520,1545,1562,1607,1612,1624,1652,1797,1824,1831,1844,1854,1905,1919 'layout-blueprint.json':1009 'layout-lock':110,1918 'layout/style':1930 'left':1028 'left-to-right':1027 'level':185,603,1883 'llm':438 'local':152,206 'locat':500 'lock':112,987,1920 'long':32,90,873,936,944,967,980,994,1076,1136,1139,1160,1171,1183,1605,1610,1822,1827 'loop':1194,1529 'low':602 'low-level':601 'main':511,524,566,606,1587,1718 'major':1019,1051,1406,1429,1634,1662 'mark':1561 'max':257,628,717,1200,1252,1297,1325,1503,1512 'maximum':262 'meet':266 'mention':1795 'messag':564,577,656,765 'minimum':274,298 'miss':1068 'missingapikeyerror':457 'mode':228,233,616,712,1592,1780,1809 'model':461,464,1264,1277,1437,1440,1446,1475,1484,1676,1684,1693,1696,1702 'move':1642 'multipl':176 'must':578,1571,1715,1723,1756 'n':1138,1141,1145,1149,1152,1155,1368,1372 'name':505 'narrow':1639 'need':459,1586,1717 'nest':597 'neural':139 'nevalu':1373 'new':7,219,979,1170,1182,1609,1826 'next':828 'nlayout':1142 'non':136,651,748 'non-empti':650 'non-goal':135 'non-zero':747 'normal':529,678,856,1581 'note':1450 'notifi':1282 'nreturn':1156 'ntarget':1150 'number':1017 'ok':688,1585,1714 'omit':1501 'one':180,1782 'openclaw':1266,1280 'optim':70,443,1116,1125,1896 'oracl':1338 'order':1014,1098 'output':227,232,243,253,615,711,918,924,959,1163,1179,1245,1387,1458,1591,1777 'output-format':923,1162,1244,1386,1457 'panel':1637 'param':467 'paramet':530,679,1269,1286,1941 'pars':927,931,942,1166,1738 'pass':463,1404,1427,1515,1522,1525,1553,1563,1613,1632,1660,1765,1775,1799,1837,1850,1857 'path':207,479,502,903,1129,1240,1351,1729 'pattern':1050 'perform':117 'persist':860,958,1178 'pipelin':29,548 'pixel':184 'pixel-level':183 'placehold':1472 'plan':312 'platform.sensenova.cn':314 'platform.sensenova.cn/token-plan):':313 'pleas':379,415,670,909 'png':1243,1385 'posit':1024 'post':119 'post-gener':118 'prefer':1060 'preflight':532,655 'present':1045 'preserv':105,989,1006,1079 'preset':256 'prioriti':331 'process':129,162 'prompt':881,902,908,1062,1073,1128,1134,1225,1227,1350,1356,1543,1908,1916,1932 'prompts/caption_rewrite.md':1063,1912 'prompts/image_annotate.md':878,1902 'prompts/layout_review.md':1333,1925 'provid':77,644 'pure':138 'python':383,892,1118,1217,1340 'radial':1035 'ratio':238,245,620,714,1230,1232 'read':1025,1097,1454,1488 'readme.md':424 'real':1316 'receiv':526,706 'recogn':66,434,887,899,1347,1497,1892 'recognit':1272 'recommend':1064 'record':815,1757 'refer':15,94,160,177,189,202,213,380,416,611,641,707,857,889,912,921,993,1135,1331,1357,1381,1599,1601,1604,1788,1813,1821,1901,1929 'region':157,1015,1052 'relat':1023,1057 'relationship':1880 'reli':60 'remain':832,1538 'replac':997,1085 'report':697,1314 'reproduc':134 'reproduct':199 'request':101,528,862,1793 'requir':205,218,639,917,1250,1258,1547,1911,1924,1935 'resolv':646,854 'respons':553,573,1570 'result':280,686,785,929,1168,1394,1412,1595,1812 'result.image':1722,1807 'result.layout':1774 'retri':126,820 'return':127,550,588,758,776,787,955,1175,1377,1461,1482,1492,1555,1565,1748,1767 'review':123,802,822,1193,1256,1303,1321,1328,1391,1442,1499,1664,1697,1760,1873,1931 'rewrit':35,96,116,984,1074,1680,1868,1914 'rewritten':1159 'rhythm':1047 'right':1030,1646 'rule':741,1712 'run':308 'save':1239,1410 'save-path':1238 'scene':56 'score':277,817,1398,1402,1421,1425,1519,1558,1626,1630,1654,1658,1770,1832,1835,1845,1848 'second':1435,1444,1452,1670,1674,1682,1691,1700,1732 'section':388 'see':472 'select':1262,1615,1840,1860,1877 'semant':1086 'send':531,537,559,568,654,689,1589,1720,1804 'sensenova':310,1448,1678,1686,1704 'sensenova-122b':1447,1677,1685,1703 'sentenc':1784 'sequenti':1202 'set':1296,1773 'share':336,736 'short':934,962,1602,1814 'silent':792,1753 'similar':276,1375,1397,1401,1420,1424,1518,1625,1629,1653,1657 'singl':168,1805 'size':249,255,625,716,1235,1237 'skill':57,191,296,307,402,414,423,494,504,516,662,727,728,904,1130,1352 'skill-sn-image-imitate' 'skill.md':495 'skip':825,1302 'sn':2,50,64,68,73,80,292,304,317,323,343,347,351,357,361,365,371,376,411,420,432,441,450,473,476,481,491,507,659,885,893,897,1114,1119,1123,1207,1212,1218,1222,1341,1345,1438,1473,1477,1495,1694,1886,1890,1894,1898 'sn-image-bas':79,291,303,410,419,490,506,1206,1885 'sn-image-gener':72,449,1211,1221,1476,1897 'sn-image-generate_en.md':390 'sn-image-imit':1,49,658 'sn-image-recogn':63,431,884,896,1344,1494,1889 'sn-text-optim':67,440,1113,1122,1893 'sn_agent_runner.py':407,734 'source-opensensenova' 'space':1046 'specif':156,201 'stage':28 'start':673 'static':169 'statist':1863 'status':687,695,759,788,956,1176,1584,1709,1713,1749 'stderr':767 'step':435,444,453,547,806,834,869,977,1187,1740,1909,1922,1933 'strategi':732 'string':204,217,229,239,250,585,772 'structur':128,551,1337 'style':12,45,54,106,140,148,195,212,667,1080,1400,1423,1628,1656,1789,1810,1834,1847 'style-consist':666 'style-transf':147 'style/layout':1816 'style/layout/visual':990 'subag':598 'subprocess':744,775 'suggest':1291 'suitabl':1275 'summari':691 'support':172 'system':770,880,901,1061,1072,1127,1349,1907,1915 'system-prompt-path':900,1126,1348 'target':192,215,613,647,709,865,1001,1091,1153 'task':839 'temp':847,851,867,964,969,975,1185,1241,1383,1417 'termin':1507 'text':69,340,344,442,1115,1124,1544,1577,1895 'text/image':539 'three':27,932 'three-stag':26 'threshold':270,634,720,1521,1554,1665,1766,1800,1855 'tier':58,83,521 'time':753,1307,1431,1667,1862 'timelin':1036 'timing.total':1730 'timing.vlm':1498 'titl':1640 'title/subtitle/body':1012 'token':311 'token.sensenova.cn':321 'token.sensenova.cn/v1':320 'tool':76,150,1215,1938 'top':1032,1645 'top-right':1644 'top-to-bottom':1031 'topic-agent' 'topic-agent-skills' 'topic-ai-agents' 'topic-ai-assistant' 'topic-data-analysis' 'topic-document-processing' 'topic-office-automation' 'topic-presentation-slides' 'topolog':1016,1056,1096 'total':1668,1689,1698,1864 'transfer':141,149 'treat':808 'true':1523,1590,1614,1661,1721,1838,1851,1858 'two':520 'two-tier':519 'type':1039 'updat':18,1791 'url':209,319 'usabl':1108 'use':24,39,145,342,356,370,517,657,877,1069,1205,1332 'user':22,41,100,221,527,541,562,571,861,907,1090,1133,1283,1355 'user-fac':570 'user-prompt':906,1132,1354 'user-vis':561 'valid':638 'valu':798 'variabl':282,300,334,337,339 'verbos':236,1594,1808 'via':469 'video':163 'visibl':563 'vision':354,358 'visual':1010,1100 'vlm':429,801,1248,1255,1263,1276,1293,1305,1441 'vlm/llm/image':593 'vlm_review.model':1486 'vs':1330,1928 'wait':671 'want':222 'whether':1796 'within':158 'without':142 'work':681,723 'worker':513,534,542,555,574,590,674,685,701,704,1567,1735 'workflow':605,608,703 'your-api-key':326 'yyyymmdd':843 'zero':749 '保持这个风格重画':46 '按这张图风格生成':47","prices":[{"id":"19ac8e17-a4c7-4b06-84dc-63b5fdc352cc","listingId":"e106253b-641e-42a8-b858-906b236366c6","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"OpenSenseNova","category":"SenseNova-Skills","install_from":"skills.sh"},"createdAt":"2026-05-15T06:53:10.171Z"}],"sources":[{"listingId":"e106253b-641e-42a8-b858-906b236366c6","source":"github","sourceId":"OpenSenseNova/SenseNova-Skills/sn-image-imitate","sourceUrl":"https://github.com/OpenSenseNova/SenseNova-Skills/tree/main/skills/sn-image-imitate","isPrimary":false,"firstSeenAt":"2026-05-15T06:53:10.171Z","lastSeenAt":"2026-05-18T18:53:05.016Z"}],"details":{"listingId":"e106253b-641e-42a8-b858-906b236366c6","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"OpenSenseNova","slug":"sn-image-imitate","github":{"repo":"OpenSenseNova/SenseNova-Skills","stars":1627,"topics":["agent","agent-skills","ai-agents","ai-assistant","data-analysis","document-processing","office-automation","presentation-slides"],"license":"mit","html_url":"https://github.com/OpenSenseNova/SenseNova-Skills","pushed_at":"2026-05-15T04:43:37Z","description":"Modular SenseNova skills for building AI-powered office assistants and productivity workflows","skill_md_sha":"ed4d346bb49fa16ba9609bc04b8ed5ff7bbe92b5","skill_md_path":"skills/sn-image-imitate/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/OpenSenseNova/SenseNova-Skills/tree/main/skills/sn-image-imitate"},"layout":"multi","source":"github","category":"SenseNova-Skills","frontmatter":{"name":"sn-image-imitate","description":"Generates a new image that imitates the style of a reference image while updating content based on user intent.\nUses a three-stage pipeline: image annotation (long caption), caption rewriting, and image generation.\nUse when user asks to \"imitate style\", \"保持这个风格重画\", \"按这张图风格生成\", or \"style transfer with new content\"."},"skills_sh_url":"https://skills.sh/OpenSenseNova/SenseNova-Skills/sn-image-imitate"},"updatedAt":"2026-05-18T18:53:05.016Z"}}