{"id":"fad3ba13-2c67-45c3-ad52-e953f170cbcf","shortId":"ufmA3k","kind":"skill","title":"fotor-skills","tagline":"Fotor AI image generator and AI video generator for photo editing, background remover, background replacement, product photos, ad creatives, social media graphics, poster and banner design, image upscaling, photo restoration, portrait enhancement, text-to-video, and image-to-vide","description":"# fotor-skills\n\nFotor OpenAPI skill for AI image generation, AI photo editing, AI video generation, product photos, ad creatives, social media graphics, background removal, photo restoration, and image upscaling.\n\nThis skill should match user requests expressed in outcome language first, not SDK language. Keep technical details behind the scenes unless they are needed to unblock execution.\n\n## When This Skill Matches\n\nUse this skill when the user asks for outcomes such as:\n\n- Generate AI images from a text prompt\n- Edit or restyle an existing photo\n- Turn a product shot into an e-commerce or ad-ready asset\n- Create posters, banners, covers, thumbnails, or social media graphics\n- Remove or replace an image background\n- Restore, enhance, or upscale a blurry or old photo\n- Generate AI videos from text, one image, multiple images, or start/end frames\n- Batch-produce visual assets for branding, content, or marketing campaigns\n\n## Search Intent Coverage\n\nCommon search phrases this skill should be able to match include:\n\n- AI photo editor\n- AI image generator\n- AI video generator\n- Image to image\n- Text to image\n- Text to video\n- Product photo generator\n- Ad creative generator\n- Marketing visual generator\n- Poster maker\n- Banner maker\n- Social media post generator\n- Cover and thumbnail generator\n- Background remover\n- Background replacement\n- Photo restoration\n- Image upscaler\n- E-commerce image generation\n- Brand asset generation\n\nFor API key application and product details, see `https://developers.fotor.com/fotor-skills/`.\n\nUse `uv` as the bootstrap layer. Prefer a skill-local Python 3.12 environment and run bundled scripts from that local environment instead of the system Python.\n\n## Runtime Setup\n\nKeep setup lightweight and local to the skill directory.\n\nInstall `uv` first if it is missing:\n\n```bash\n# macOS / Linux\ncurl -LsSf https://astral.sh/uv/install.sh | sh\n\n# Windows (PowerShell)\npowershell -ExecutionPolicy ByPass -c \"irm https://astral.sh/uv/install.ps1 | iex\"\n```\n\nTypical first-run setup:\n\n```bash\nuv python install 3.12\nuv venv --python 3.12 .venv\n./.venv/bin/python scripts/ensure_sdk.py\n```\n\nSetup rules:\n\n1. Prefer a local Python 3.12 environment in the skill directory.\n2. Use `uv` to prepare Python 3.12 and create `.venv` when the local environment is missing.\n3. Run bundled scripts from the local skill environment, not the system Python.\n4. Ensure `FOTOR_OPENAPI_KEY` is set. If the user asks where to get a key, wants the official `fotor-skills` homepage during setup, or needs a key + homepage walkthrough, read `references/get_api_key.md` first.\n\nCurrent default interpreter paths:\n\n- POSIX: `./.venv/bin/python`\n- Windows: `.venv\\\\Scripts\\\\python.exe`\n\n## Interaction Rules\n\n- Speak in user-task language first. Do not lead with SDK, scripts, JSON, model IDs, or parameter tables unless they are needed to unblock the task or the user explicitly asks.\n- Ask for only one missing blocker at a time.\n- Once the minimum required information is present, execute immediately. Do not send vague transition messages like \"I’m starting now\" unless execution has actually started and a result or clear in-progress status will follow.\n- If execution will take noticeable time, say that the task is running and give a short expectation such as \"usually takes a few seconds to a few dozen seconds; I’ll send the result when it’s ready.\"\n- If credentials are missing, resolve that blocker quickly and then return to the original task instead of turning the conversation into a long setup lesson.\n- When the local skill environment is missing, prepare it with `uv` before installing dependencies or executing the task. Avoid installing into the system Python unless the user explicitly asks.\n- Choose the model and default parameters internally unless the user explicitly requests a specific model or technical control.\n- Return the result as soon as it is ready. Do not make the user ask follow-up questions like \"where is the image?\"\n- If the user asks how to recharge, buy credits, top up, or purchase tokens, use `references/credits-and-recharge.md` and follow its recharge guidance flow.\n- If a task fails because credits are insufficient, do not stop at the raw error. Use `references/credits-and-recharge.md` to explain the failure and provide recharge guidance.\n- If an update reminder is available, keep it to one short non-blocking sentence and continue the current task.\n\n## Scripts\n\n### `scripts/ensure_sdk.py`\n\nCross-platform (Windows / macOS / Linux) script to install or upgrade `fotor-sdk` to the latest PyPI release with `uv pip install --python <interpreter>`. Run before every task.\n\n- **No args** — install or upgrade to the latest PyPI release\n- **`--upgrade`** — same behavior, kept as an explicit alias\n\n### `scripts/run_task.py`\n\nExecute one or more Fotor tasks from JSON. Handles client init, polling, and progress.\n\n**Single task:**\n```bash\necho '{\"task_type\":\"text2image\",\"params\":{\"prompt\":\"A cat\",\"model_id\":\"seedream-4-5-251128\"}}' \\\n  | ./.venv/bin/python scripts/run_task.py\n```\n\n**Batch (array):**\n```bash\necho '[\n  {\"task_type\":\"text2image\",\"params\":{\"prompt\":\"A cat\",\"model_id\":\"seedream-4-5-251128\"},\"tag\":\"cat\"},\n  {\"task_type\":\"text2video\",\"params\":{\"prompt\":\"Sunset\",\"model_id\":\"kling-v3\",\"duration\":5},\"tag\":\"sunset\"}\n]' | ./.venv/bin/python scripts/run_task.py --concurrency 5\n```\n\n**Options:** `--input FILE`, `--concurrency N` (default 5), `--poll-interval S` (default 2.0), `--timeout S` (default 1200).\n\n**Output:** JSON with `task_id`, `status`, `success`, `result_url`, `error`, `elapsed_seconds`, `creditsIncrement`, `tag`.\n\nAutomatic fallback:\n\n- If a task fails on its primary model and the current `task_type + model_id` matches a built-in fallback mapping, `run_task.py` automatically retries once with the fallback model.\n- If the failure is insufficient credits (`code=510` / `No enough credits`), `run_task.py` returns the failure immediately and does not retry on a fallback model.\n- The output includes `fallback_used`, `original_model_id`, and `fallback_model_id`.\n\n### `scripts/upload_image.py`\n\nUpload a local image file through Fotor's signed upload flow and return a reusable image URL.\n\n```bash\n./.venv/bin/python scripts/upload_image.py ./input.jpg --task-type image2image\n```\n\nThe script:\n\n- Calls `/v1/upload/sign` with the mapped upload `type` and `suffix`\n- Uploads the local file to the signed target\n- Prints JSON containing `file_url` and `upload_url`\n\nUse `file_url` as the `image_url`, `start_image_url`, `end_image_url`, or an item inside `image_urls` for image-based tasks.\n\nSupported task-to-upload mapping:\n\n- `image2image` -> `img2img`\n- `image_upscale` -> `img_upscale`\n- `background_remove` -> `bg_remove`\n- `single_image2video` -> `img2video`\n- `start_end_frame2video` -> `img2video`\n- `multiple_image2video` -> `img2video`\n\n### `scripts/check_skill_update.py`\n\nCheck whether the installed skill has a newer version available for the current install source.\n\n```bash\n./.venv/bin/python scripts/check_skill_update.py --mark-notified --check-interval-hours 24\n```\n\nFor development/testing when install-source metadata is unavailable:\n\n```bash\n./.venv/bin/python scripts/check_skill_update.py --install-source skills-github --slug fotor-skills --current-version 1.0.0 --github-source fotor-ai/fotor-skills --mark-notified --check-interval-hours 24\n```\n\nThe script:\n\n- Detects the install source first: `clawhub` or `skills-github`\n- For `clawhub`, reads installed `_meta.json` and fetches the latest version via `clawhub inspect <slug> --json`\n- For `skills-github`, reads local `SKILL.md` frontmatter top-level `version` field, falls back to legacy `metadata.version`, finds the GitHub source, and fetches the remote `SKILL.md` version plus `CHANGELOG.md` highlights when available\n- Prints JSON with `install_source`, `current_version`, `latest_version`, `update_available`, and `should_notify`\n- Stores the last-notified version in a local state file when `--mark-notified` is used\n- Caches the last successful version check and supports a minimum recheck interval via `--check-interval-hours` (default 24)\n- Includes `changelog_preview` so the reminder can mention the main highlights without dumping the full changelog\n- Supports development/testing overrides such as `--install-source`, `--slug`, `--current-version`, and `--github-source`\n\n## Reference Files\n\nOnly read the reference files that match the current need. Do not load all of them by default.\n\n### Task Execution References\n\nRead these when choosing a model, validating parameters, or mapping an ambiguous user request to a recommended workflow:\n\n- `references/image_models.md` -- image model IDs, T2I/I2I capabilities, per-model parameter constraints (resolution, ratios, input limits, max refs)\n- `references/video_models.md` -- video model IDs, T2V/I2V/SE/MI capabilities, per-model parameter constraints (duration, resolution, ratios, input limits, audio)\n- `references/parameter_reference.md` -- full function signatures and parameter tables for all 8 task types\n- `references/image_scenarios.md` -- scenario-to-model mapping for image generation (T2I, I2I, utilities); read when user intent is ambiguous\n- `references/video_scenarios.md` -- scenario-to-model mapping for video generation (T2V, I2V, SE, MI); read when user intent is ambiguous\n\n### Operational References\n\nRead these only when the user asks about installation, upgrade, workspace layout, API key acquisition, or the official `fotor-skills` homepage. Do not read them for normal image/video task execution.\n\n- `references/credits-and-recharge.md` -- credit lookup, payment links, recharge guidance, and insufficient-credit handling\n- `references/get_api_key.md` -- guide for giving the official `fotor-skills` homepage, sending users to the API-key dashboard entry, and configuring `FOTOR_OPENAPI_KEY`\n- `references/install-or-upgrade.md` -- how to install or upgrade `fotor-skills` for both ClawHub and `npx skills`, and how to phrase a concise non-pushy upgrade reminder\n\n## Workflow\n\n1. If `uv` is missing, install it first using the platform-appropriate installer shown in Setup.\n2. If Python 3.12 is not already available to `uv`, run `uv python install 3.12`.\n3. If `.venv` is missing, create it with `uv venv --python 3.12 .venv`.\n4. Run `./.venv/bin/python scripts/ensure_sdk.py` before every task to install or upgrade the latest `fotor-sdk` with `uv`.\n5. After `.venv` is ready and `ensure_sdk.py` completes, silently run `./.venv/bin/python scripts/check_skill_update.py --mark-notified --check-interval-hours 24`. Do not inspect the state file manually. Only if it reports `should_notify: true`, read `references/install-or-upgrade.md` and send one short non-blocking update reminder. If the check fails or times out, ignore it and continue without mentioning the failure.\n6. If the user asks how to get an API key or wants the official `fotor-skills` homepage during setup, read `references/get_api_key.md` and include both links before expanding into lower-level setup details.\n7. Verify `FOTOR_OPENAPI_KEY` is set.\n8. If the user asks about account credits, recharge, buying credits, or payment links, read `references/credits-and-recharge.md`, then use the appropriate balance or payment-links flow from that reference.\n9. For image-based tasks that start from a local file, first run `./.venv/bin/python scripts/upload_image.py <local-file> --task-type <task-type>` and keep the returned `file_url`.\n10. Read the appropriate model reference to choose `model_id`. Each model's per-model spec section lists supported resolutions, aspect ratios, duration, input constraints, and max reference images.\n11. If user intent is ambiguous (no specific model requested), consult the scenario files (`image_scenarios.md` / `video_scenarios.md`) for recommended model + params.\n12. **Validate parameters** against the chosen model's spec before calling -- check resolution, aspect ratio, duration, and multi-image limits.\n13. **Quick path** -- pipe JSON into `./.venv/bin/python scripts/run_task.py` (works for both single and batch).\n14. **Custom path** -- write inline Python using the SDK directly (see examples below), still preferring the local `.venv` interpreter.\n15. Check `result_url` in output. Chain `image_upscale` if higher resolution needed.\n\nIf the user asks to check account credits or remaining credits, read `references/credits-and-recharge.md` and use the SDK client flow described there instead of `run_task.py`.\n\nBuilt-in automatic fallback mappings are defined in `references/fallback_models.json`.\n\n`run_task.py` reads that file directly. Keep exact fallback pairs there instead of duplicating them in `SKILL.md` or scenario references.\n\n## Available Task Types\n\n| task_type | Function | Required Params |\n|-----------|----------|-----------------|\n| `text2image` | `text2image()` | `prompt`, `model_id` |\n| `image2image` | `image2image()` | `prompt`, `model_id`, `image_urls` |\n| `image_upscale` | `image_upscale()` | `image_url` |\n| `background_remove` | `background_remove()` | `image_url` |\n| `text2video` | `text2video()` | `prompt`, `model_id` |\n| `single_image2video` | `single_image2video()` | `prompt`, `model_id`, `image_url` |\n| `start_end_frame2video` | `start_end_frame2video()` | `prompt`, `model_id`, `start_image_url`, `end_image_url` |\n| `multiple_image2video` | `multiple_image2video()` | `prompt`, `model_id`, `image_urls` (≥2) |\n\nFor full parameter details (defaults, `on_poll`, `**extra`), read `references/parameter_reference.md`.\n\n## Credits and Recharge\n\nFor any balance lookup, recharge guidance, or insufficient-credit case, read `references/credits-and-recharge.md`.\n\nKeep `SKILL.md` focused on routing:\n\n- Use the credits reference when the user asks about remaining balance, total credits, recharge, top-up, or payment links.\n- Use the same reference when a task fails with `code=510` or `No enough credits`.\n- Keep detailed API examples, field meanings, and user-facing recharge wording in the reference instead of expanding this main skill file.\n\n## Inline Python Examples\n\nWhen `scripts/run_task.py` is insufficient (custom logic, chaining, progress callbacks):\n\n### Client Init\n\n```python\nimport os\nfrom fotor_sdk import FotorClient\nclient = FotorClient(api_key=os.environ[\"FOTOR_OPENAPI_KEY\"])\n```\n\n### Single Task\n\n```python\nfrom fotor_sdk import text2image\nresult = await text2image(client, prompt=\"A diamond kitten\", model_id=\"seedream-4-5-251128\")\nprint(result.result_url)\n```\n\n### Batch with TaskRunner\n\n```python\nfrom fotor_sdk import TaskRunner, TaskSpec\nrunner = TaskRunner(client, max_concurrent=5)\nspecs = [\n    TaskSpec(\"text2image\", {\"prompt\": \"A cat\", \"model_id\": \"seedream-4-5-251128\"}, tag=\"cat\"),\n    TaskSpec(\"text2video\", {\"prompt\": \"Sunset\", \"model_id\": \"kling-v3\", \"duration\": 5}, tag=\"sunset\"),\n]\nresults = await runner.run(specs)\n```\n\n### Video with Audio\n\n```python\nfrom fotor_sdk import text2video\nresult = await text2video(client, prompt=\"Jazz band\", model_id=\"kling-v3\",\n                          audio_enable=True, audio_prompt=\"Smooth jazz\")\n```\n\n## TaskResult\n\n```python\nresult.success          # bool: True when COMPLETED with result_url\nresult.result_url       # str | None\nresult.status           # TaskStatus: COMPLETED / FAILED / TIMEOUT / IN_PROGRESS / CANCELLED\nresult.error            # str | None (e.g. \"NSFW_CONTENT\")\nresult.elapsed_seconds  # float\nresult.creditsIncrement # int | float: credits consumed by this task\nresult.metadata         # dict (includes \"tag\" from TaskRunner)\n```\n\n## Error Handling\n\n- **Single task**: catch `FotorAPIError` (has `.code` attribute).\n- **Batch**: check `result.success` per item; runner never raises on individual failures.\n- **NSFW**: appears as `error=\"NSFW_CONTENT\"` in TaskResult.\n- **Insufficient credits**: if `result.error`, exception text, or a combined fallback error contains `code=510` or `No enough credits`, treat it as a recharge case. Tell the user credits are insufficient, then fetch and present payment links.\n\nFor troubleshooting, enable SDK debug logging: `logging.getLogger(\"fotor_sdk\").setLevel(logging.DEBUG)`.","tags":["fotor","skills","fotor-ai","agent-skills","openclaw-skills"],"capabilities":["skill","source-fotor-ai","skill-fotor-skills","topic-agent-skills","topic-openclaw-skills","topic-skills"],"categories":["fotor-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/fotor-ai/fotor-skills/fotor-skills","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add fotor-ai/fotor-skills","source_repo":"https://github.com/fotor-ai/fotor-skills","install_from":"skills.sh"}},"qualityScore":"0.455","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 10 github stars · SKILL.md body (16,131 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-18T19:08:20.985Z","embedding":null,"createdAt":"2026-04-23T13:04:18.274Z","updatedAt":"2026-05-18T19:08:20.985Z","lastSeenAt":"2026-05-18T19:08:20.985Z","tsv":"'-251128':798,817,2069,2100 '-4':796,815,2067,2098 '-5':797,816,2068,2099 '/.venv/bin/python':351,434,799,835,957,1058,1078,1517,1543,1678,1766 '/fotor-skills':1100 '/fotor-skills/':270 '/input.jpg':959 '/uv/install.ps1':334 '/uv/install.sh':323 '/v1/upload/sign':967 '1':355,1470 '1.0.0':1093 '10':1689 '11':1719 '12':1739 '1200':855 '13':1760 '14':1774 '15':1793 '2':366,1487,1929 '2.0':851 '24':1067,1108,1217,1552 '3':382,1502 '3.12':283,345,349,360,372,1490,1501,1513 '4':395,1515 '5':832,838,845,1533,2088,2113 '510':909,1991,2234 '6':1593 '7':1628 '8':1334,1635 '9':1664 'abl':201 'account':1641,1812 'acquisit':1390 'actual':505 'ad':21,63,141,226 'ad-readi':140 'ai':5,9,52,55,58,118,169,205,208,211,1099 'alia':766 'alreadi':1493 'ambigu':1284,1354,1373,1724 'api':261,1388,1434,1602,1998,2042 'api-key':1433 'appear':2214 'applic':263 'appropri':1482,1654,1692 'arg':750 'array':802 'ask':112,405,472,473,609,642,655,1382,1597,1639,1809,1968 'aspect':1710,1752 'asset':143,184,258 'astral.sh':322,333 'astral.sh/uv/install.ps1':332 'astral.sh/uv/install.sh':321 'attribut':2201 'audio':1324,2122,2141,2144 'automat':870,895,1833 'avail':704,1051,1167,1178,1494,1859 'avoid':599 'await':2057,2117,2130 'back':1149 'background':15,17,68,158,244,246,1027,1885,1887 'balanc':1655,1945,1971 'band':2135 'banner':28,146,234 'base':1013,1668 'bash':316,341,784,803,956,1057,1077 'batch':181,801,1773,2073,2202 'batch-produc':180 'behavior':761 'behind':92 'bg':1029 'block':712,1575 'blocker':478,562 'blurri':164 'bool':2151 'bootstrap':275 'brand':186,257 'built':890,1831 'built-in':889,1830 'bundl':287,384 'buy':659,1644 'bypass':329 'c':330 'cach':1199 'call':966,1749 'callback':2029 'campaign':190 'cancel':2169 'capabl':1296,1313 'case':1953,2244 'cat':792,811,819,2094,2102 'catch':2197 'chain':1799,2027 'changelog':1219,1233 'changelog.md':1164 'check':1042,1064,1105,1204,1213,1549,1580,1750,1794,1811,2203 'check-interval-hour':1063,1104,1212,1548 'choos':610,1276,1696 'chosen':1744 'clawhub':1116,1122,1132,1454 'clear':511 'client':777,1823,2030,2040,2059,2085,2132 'code':908,1990,2200,2233 'combin':2229 'commerc':138,254 'common':194 'complet':1540,2154,2164 'concis':1463 'concurr':837,842,2087 'configur':1439 'constraint':1301,1318,1714 'consult':1729 'consum':2183 'contain':985,2232 'content':187,2175,2218 'continu':715,1588 'control':627 'convers':575 'cover':147,240 'coverag':193 'creat':144,374,1507 'creativ':22,64,227 'credenti':557 'credit':660,679,907,912,1408,1417,1642,1645,1813,1816,1940,1952,1963,1973,1995,2182,2222,2238,2248 'creditsincr':868 'cross':722 'cross-platform':721 'curl':319 'current':429,717,882,1054,1091,1173,1244,1260 'current-vers':1090,1243 'custom':1775,2025 'dashboard':1436 'debug':2261 'default':430,614,844,850,854,1216,1269,1934 'defin':1837 'depend':594 'describ':1825 'design':29 'detail':91,266,1627,1933,1997 'detect':1111 'developers.fotor.com':269 'developers.fotor.com/fotor-skills/':268 'development/testing':1069,1235 'diamond':2062 'dict':2188 'direct':1783,1844 'directori':308,365 'dozen':545 'dump':1230 'duplic':1852 'durat':831,1319,1712,1754,2112 'e':137,253 'e-commerc':136,252 'e.g':2173 'echo':785,804 'edit':14,57,124 'editor':207 'elaps':866 'enabl':2142,2259 'end':1001,1035,1906,1909,1917 'enhanc':35,160 'enough':911,1994,2237 'ensur':396 'ensure_sdk.py':1539 'entri':1437 'environ':284,292,361,379,390,585 'error':688,865,2193,2216,2231 'everi':747,1520 'exact':1846 'exampl':1785,1999,2020 'except':2225 'execut':101,489,503,519,596,768,1271,1406 'executionpolici':328 'exist':128 'expand':1621,2013 'expect':534 'explain':692 'explicit':471,608,620,765 'express':81 'extra':1937 'face':2005 'fail':677,875,1581,1988,2165 'failur':694,904,916,1592,2212 'fall':1148 'fallback':871,892,900,924,929,935,1834,1847,2230 'fetch':1127,1158,2252 'field':1147,2000 'file':841,943,978,986,992,1192,1251,1256,1558,1675,1687,1732,1843,2017 'find':1153 'first':85,311,338,428,447,1115,1477,1676 'first-run':337 'float':2178,2181 'flow':673,949,1660,1824 'focus':1958 'follow':517,644,669 'follow-up':643 'fotor':2,4,46,48,397,415,733,772,945,1088,1098,1395,1426,1440,1450,1529,1609,1630,2036,2045,2052,2078,2125,2264 'fotor-ai':1097 'fotor-sdk':732,1528 'fotor-skil':1,45,414,1087,1394,1425,1449,1608 'fotorapierror':2198 'fotorcli':2039,2041 'frame':179 'frame2video':1036,1907,1910 'frontmatt':1142 'full':1232,1326,1931 'function':1327,1864 'generat':7,11,54,60,117,168,210,213,225,228,231,239,243,256,259,1345,1363 'get':408,1600 'github':1085,1095,1120,1138,1155,1248 'github-sourc':1094,1247 'give':531,1422 'graphic':25,67,152 'guid':1420 'guidanc':672,698,1413,1948 'handl':776,1418,2194 'higher':1803 'highlight':1165,1228 'homepag':417,424,1397,1428,1611 'hour':1066,1107,1215,1551 'i2i':1347 'i2v':1365 'id':456,794,813,827,860,886,933,937,1294,1311,1698,1871,1876,1895,1902,1913,1926,2065,2096,2108,2137 'iex':335 'ignor':1585 'imag':6,30,42,53,73,119,157,174,176,209,214,216,219,250,255,651,942,954,996,999,1002,1008,1012,1023,1292,1344,1667,1718,1758,1800,1877,1879,1881,1883,1889,1903,1915,1918,1927 'image-bas':1011,1666 'image-to-vid':41 'image/video':1404 'image2image':963,1021,1872,1873 'image2video':1032,1039,1897,1899,1921,1923 'image_scenarios.md':1733 'img':1025 'img2img':1022 'img2video':1033,1037,1040 'immedi':490,917 'import':2033,2038,2054,2080,2127 'in-progress':512 'includ':204,928,1218,1617,2189 'individu':2211 'inform':486 'init':778,2031 'inlin':1778,2018 'input':840,1304,1322,1713 'insid':1007 'inspect':1133,1555 'instal':309,344,593,600,729,743,751,1045,1055,1072,1081,1113,1124,1171,1240,1384,1446,1475,1483,1500,1523 'install-sourc':1071,1080,1239 'instead':293,571,1827,1850,2011 'insuffici':681,906,1416,1951,2024,2221,2250 'insufficient-credit':1415,1950 'int':2180 'intent':192,1352,1371,1722 'interact':439 'intern':616 'interpret':431,1792 'interv':848,1065,1106,1210,1214,1550 'irm':331 'item':1006,2206 'jazz':2134,2147 'json':454,775,857,984,1134,1169,1764 'keep':89,300,705,1684,1845,1956,1996 'kept':762 'key':262,399,410,423,1389,1435,1442,1603,1632,2043,2047 'kitten':2063 'kling':829,2110,2139 'kling-v3':828,2109,2138 'languag':84,88,446 'last':1185,1201 'last-notifi':1184 'latest':737,756,1129,1175,1527 'layer':276 'layout':1387 'lead':450 'legaci':1151 'lesson':580 'level':1145,1625 'lightweight':302 'like':497,647 'limit':1305,1323,1759 'link':1411,1619,1648,1659,1980,2256 'linux':318,726 'list':1707 'll':548 'load':1264 'local':281,291,304,358,378,388,583,941,977,1140,1190,1674,1790 'log':2262 'logging.debug':2267 'logging.getlogger':2263 'logic':2026 'long':578 'lookup':1409,1946 'lower':1624 'lower-level':1623 'lssf':320 'm':499 'maco':317,725 'main':1227,2015 'make':639 'maker':233,235 'manual':1559 'map':893,970,1020,1282,1342,1360,1835 'mark':1061,1102,1195,1546 'mark-notifi':1060,1101,1194,1545 'market':189,229 'match':78,105,203,887,1258 'max':1306,1716,2086 'mean':2001 'media':24,66,151,237 'mention':1225,1590 'messag':496 'meta.json':1125 'metadata':1074 'metadata.version':1152 'mi':1367 'minimum':484,1208 'miss':315,381,477,559,587,1474,1506 'model':455,612,624,793,812,826,879,885,901,925,932,936,1278,1293,1299,1310,1316,1341,1359,1693,1697,1700,1704,1727,1737,1745,1870,1875,1894,1901,1912,1925,2064,2095,2107,2136 'multi':1757 'multi-imag':1756 'multipl':175,1038,1920,1922 'n':843 'need':98,421,463,1261,1805 'never':2208 'newer':1049 'non':711,1465,1574 'non-block':710,1573 'non-pushi':1464 'none':2161,2172 'normal':1403 'notic':522 'notifi':1062,1103,1181,1186,1196,1547,1565 'npx':1456 'nsfw':2174,2213,2217 'offici':413,1393,1424,1607 'old':166 'one':173,476,708,769,1571 'openapi':49,398,1441,1631,2046 'oper':1374 'option':839 'origin':569,931 'os':2034 'os.environ':2044 'outcom':83,114 'output':856,927,1798 'overrid':1236 'pair':1848 'param':789,808,823,1738,1866 'paramet':458,615,1280,1300,1317,1330,1741,1932 'path':432,1762,1776 'payment':1410,1647,1658,1979,2255 'payment-link':1657 'per':1298,1315,1703,2205 'per-model':1297,1314,1702 'photo':13,20,32,56,62,70,129,167,206,224,248 'phrase':196,1461 'pip':742 'pipe':1763 'platform':723,1481 'platform-appropri':1480 'plus':1163 'poll':779,847,1936 'poll-interv':846 'portrait':34 'posix':433 'post':238 'poster':26,145,232 'powershel':326,327 'prefer':277,356,1788 'prepar':370,588 'present':488,2254 'preview':1220 'primari':878 'print':983,1168,2070 'produc':182 'product':19,61,132,223,265 'progress':514,781,2028,2168 'prompt':123,790,809,824,1869,1874,1893,1900,1911,1924,2060,2092,2105,2133,2145 'provid':696 'purchas':664 'pushi':1466 'pypi':738,757 'python':282,297,343,348,359,371,394,604,744,1489,1499,1512,1779,2019,2032,2050,2076,2123,2149 'python.exe':438 'question':646 'quick':563,1761 'rais':2209 'ratio':1303,1321,1711,1753 'raw':687 'read':426,1123,1139,1253,1273,1349,1368,1376,1400,1567,1614,1649,1690,1817,1841,1938,1954 'readi':142,555,636,1537 'recharg':658,671,697,1412,1643,1942,1947,1974,2006,2243 'recheck':1209 'recommend':1289,1736 'ref':1307 'refer':1250,1255,1272,1375,1663,1694,1717,1858,1964,1984,2010 'references/credits-and-recharge.md':667,690,1407,1650,1818,1955 'references/fallback_models.json':1839 'references/get_api_key.md':427,1419,1615 'references/image_models.md':1291 'references/image_scenarios.md':1337 'references/install-or-upgrade.md':1443,1568 'references/parameter_reference.md':1325,1939 'references/video_models.md':1308 'references/video_scenarios.md':1355 'releas':739,758 'remain':1815,1970 'remind':702,1223,1468,1577 'remot':1160 'remov':16,69,153,245,1028,1030,1886,1888 'replac':18,155,247 'report':1563 'request':80,621,1286,1728 'requir':485,1865 'resolut':1302,1320,1709,1751,1804 'resolv':560 'restor':33,71,159,249 'restyl':126 'result':509,551,630,863,1795,2056,2116,2129,2156 'result.creditsincrement':2179 'result.elapsed':2176 'result.error':2170,2224 'result.metadata':2187 'result.result':2071,2158 'result.status':2162 'result.success':2150,2204 'retri':896,921 'return':566,628,914,951,1686 'reusabl':953 'rout':1960 'rule':354,440 'run':286,339,383,529,745,1497,1516,1542,1677 'run_task.py':894,913,1829,1840 'runner':2083,2207 'runner.run':2118 'runtim':298 'say':524 'scenario':1339,1357,1731,1857 'scenario-to-model':1338,1356 'scene':94 'script':288,385,437,453,719,727,965,1110 'scripts/check_skill_update.py':1041,1059,1079,1544 'scripts/ensure_sdk.py':352,720,1518 'scripts/run_task.py':767,800,836,1767,2022 'scripts/upload_image.py':938,958,1679 'sdk':87,452,734,1530,1782,1822,2037,2053,2079,2126,2260,2265 'se':1366 'search':191,195 'second':541,546,867,2177 'section':1706 'see':267,1784 'seedream':795,814,2066,2097 'send':493,549,1429,1570 'sentenc':713 'set':401,1634 'setlevel':2266 'setup':299,301,340,353,419,579,1486,1613,1626 'sh':324 'short':533,709,1572 'shot':133 'shown':1484 'sign':947,981 'signatur':1328 'silent':1541 'singl':782,1031,1771,1896,1898,2048,2195 'skill':3,47,50,76,104,108,198,280,307,364,389,416,584,1046,1084,1089,1119,1137,1396,1427,1451,1457,1610,2016 'skill-fotor-skills' 'skill-loc':279 'skill.md':1141,1161,1855,1957 'skills-github':1083,1118,1136 'slug':1086,1242 'smooth':2146 'social':23,65,150,236 'soon':632 'sourc':1056,1073,1082,1096,1114,1156,1172,1241,1249 'source-fotor-ai' 'speak':441 'spec':1705,1747,2089,2119 'specif':623,1726 'start':500,506,998,1034,1671,1905,1908,1914 'start/end':178 'state':1191,1557 'status':515,861 'still':1787 'stop':684 'store':1182 'str':2160,2171 'success':862,1202 'suffix':974 'sunset':825,834,2106,2115 'support':1015,1206,1234,1708 'system':296,393,603 't2i':1346 't2i/i2i':1295 't2v':1364 't2v/i2v/se/mi':1312 'tabl':459,1331 'tag':818,833,869,2101,2114,2190 'take':521,538 'target':982 'task':445,467,527,570,598,676,718,748,773,783,786,805,820,859,874,883,961,1014,1017,1270,1335,1405,1521,1669,1681,1860,1862,1987,2049,2186,2196 'task-to-upload':1016 'task-typ':960,1680 'taskresult':2148,2220 'taskrunn':2075,2081,2084,2192 'taskspec':2082,2090,2103 'taskstatus':2163 'technic':90,626 'tell':2245 'text':37,122,172,217,220,2226 'text-to-video':36 'text2image':788,807,1867,1868,2055,2058,2091 'text2video':822,1891,1892,2104,2128,2131 'thumbnail':148,242 'time':481,523,1583 'timeout':852,2166 'token':665 'top':661,1144,1976 'top-level':1143 'top-up':1975 'topic-agent-skills' 'topic-openclaw-skills' 'topic-skills' 'total':1972 'transit':495 'treat':2239 'troubleshoot':2258 'true':1566,2143,2152 'turn':130,573 'type':787,806,821,884,962,972,1336,1682,1861,1863 'typic':336 'unavail':1076 'unblock':100,465 'unless':95,460,502,605,617 'updat':701,1177,1576 'upgrad':731,753,759,1385,1448,1467,1525 'upload':939,948,971,975,989,1019 'upscal':31,74,162,251,1024,1026,1801,1880,1882 'url':864,955,987,990,993,997,1000,1003,1009,1688,1796,1878,1884,1890,1904,1916,1919,1928,2072,2157,2159 'use':106,271,367,666,689,930,991,1198,1478,1652,1780,1820,1961,1981 'user':79,111,404,444,470,607,619,641,654,1285,1351,1370,1381,1430,1596,1638,1721,1808,1967,2004,2247 'user-fac':2003 'user-task':443 'usual':537 'util':1348 'uv':272,310,342,346,368,591,741,1472,1496,1498,1510,1532 'v3':830,2111,2140 'vagu':494 'valid':1279,1740 'venv':347,350,375,436,1504,1511,1514,1535,1791 'verifi':1629 'version':1050,1092,1130,1146,1162,1174,1176,1187,1203,1245 'via':1131,1211 'vide':44 'video':10,39,59,170,212,222,1309,1362,2120 'video_scenarios.md':1734 'visual':183,230 'walkthrough':425 'want':411,1605 'whether':1043 'window':325,435,724 'without':1229,1589 'word':2007 'work':1768 'workflow':1290,1469 'workspac':1386 'write':1777","prices":[{"id":"b29319bb-6be3-464f-a5c6-5f5da8306067","listingId":"fad3ba13-2c67-45c3-ad52-e953f170cbcf","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"fotor-ai","category":"fotor-skills","install_from":"skills.sh"},"createdAt":"2026-04-23T13:04:18.274Z"}],"sources":[{"listingId":"fad3ba13-2c67-45c3-ad52-e953f170cbcf","source":"github","sourceId":"fotor-ai/fotor-skills/fotor-skills","sourceUrl":"https://github.com/fotor-ai/fotor-skills/tree/main/skills/fotor-skills","isPrimary":false,"firstSeenAt":"2026-04-23T13:04:18.274Z","lastSeenAt":"2026-05-18T19:08:20.985Z"}],"details":{"listingId":"fad3ba13-2c67-45c3-ad52-e953f170cbcf","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"fotor-ai","slug":"fotor-skills","github":{"repo":"fotor-ai/fotor-skills","stars":10,"topics":["agent-skills","openclaw-skills","skills"],"license":null,"html_url":"https://github.com/fotor-ai/fotor-skills","pushed_at":"2026-04-28T07:49:38Z","description":"Fotor Skills for OpenClaw.","skill_md_sha":"4f58072370a44dba22705a78b995721412165a85","skill_md_path":"skills/fotor-skills/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/fotor-ai/fotor-skills/tree/main/skills/fotor-skills"},"layout":"multi","source":"github","category":"fotor-skills","frontmatter":{"name":"fotor-skills","description":"Fotor AI image generator and AI video generator for photo editing, background remover, background replacement, product photos, ad creatives, social media graphics, poster and banner design, image upscaling, photo restoration, portrait enhancement, text-to-video, and image-to-video. Built for e-commerce, marketing, branding, and content creation."},"skills_sh_url":"https://skills.sh/fotor-ai/fotor-skills/fotor-skills"},"updatedAt":"2026-05-18T19:08:20.985Z"}}