Skill: wondershare-boop/mediaio-ai-gender-swap (version 1.0.2)

--- name: mediaio-ai-gender-swap description: Transform photos and images into Studio Ghibli-style artwork using AI via Media.io OpenAPI. Applies the iconic hand-drawn, painterly aesthetic of Ghibli films. AI gender swap, gender change AI, male to female AI. metadata: {"openclaw": {"homepage": "https://platform.media.io/docs/", "requires": {"bins": ["curl"], "env": ["MEDIAIO_API_KEY"]}, "primaryEnv": "MEDIAIO_API_KEY"}} --- # Media.io AI Gender Swap Skill ## Overview This skill calls Media.io OpenAPI to run image gender swap using model code [REDACTED_SECRET]. The API is asynchronous: 1. Submit generation request and get `task_id`. 2. Poll task result endpoint until the task is finished. ## When To Use - The user wants to transform a portrait from male to female style using Media.io. - The user can provide an image URL reachable by Media.io servers. - The user wants task-based generation with polling. ## When Not To Use - The user asks for local file upload only (this API expects image URL input). - The user asks for non-Media.io providers. - The user asks for real-time synchronous image output in one call. ## Requirements ### Environment Variables | Variable | Required | Description | |---|---|---| | `MEDIAIO_API_KEY` | Yes | Media.io OpenAPI key, used in header `X-API-KEY`. | ### Base Headers - `Content-Type: application/json` - `X-[REDACTED_SECRET]` ## Supported Endpoints ### 1) Query Credits - Method: `POST` - Endpoint: `https://openapi.media.io/user/credits` - Body: `{}` - Purpose: check available credits before generation. ### 2) Create Gender Swap Task - Method: `POST` - Endpoint: `https://openapi.media.io/generation/effects/effects_image_gender_swap_female` - Body: ```json { "data": { "image": "https://example.com/input.jpg" } } ``` - Required field: - `data.image` (string URL) - Image constraints from API doc: - Format: PNG, JPEG, JPG - File size: 0.0 MB to 19.5 MB - Resolution: 300x300 to 4000x4000 - Aspect ratio: 1:2 to 2:1 ### 3) Query Task Result - Method: `POST` - Endpoint: `https://openapi.media.io/generation/result/{task_id}` - Body: `{}` - Path parameter: - `task_id` (string, required) ## Request and Response Contract ### Common Success Envelope ```json { "code": 0, "msg": "", "data": {}, "trace_id": "..." } ``` ### Create Task Response - On success, `data.task_id` is returned. ### Task Result Response - `data.status` can be one of the following values: - `waiting`: queued - `processing`: running - `completed`: completed successfully - `failed`: failed - `timeout`: timed out - `data.reason`: provides additional context (e.g., `success` or error message) - When status is `completed`: - `data.result` is an array of output objects with generated image URLs - Each result object contains `val` (internal path), `preview` (public HTTPS URL), and `status` (completion status) ## Standard Invocation Flow 1. Call `user/credits` to verify balance. 2. Call [REDACTED_SECRET] with `data.image`. 3. Extract `task_id`. 4. Poll `generation/result/{task_id}` every 3 to 5 seconds. 5. Stop when status is `completed` or `failed`. 6. Return output URLs from `data.result` when `completed`. ## cURL Examples ### Query Credits ```bash curl --request POST \ --url https://openapi.media.io/user/credits \ --header 'Content-Type: application/json' \ --header "X-[REDACTED_SECRET]" \ --data '{}' ``` ### Create Gender Swap Task ```bash curl --request POST \ --url https://openapi.media.io/generation/effects/effects_image_gender_swap_female \ --header 'Content-Type: application/json' \ --header "X-[REDACTED_SECRET]" \ --data '{ "data": { "image": "https://example.com/input.jpg" } }' ``` ### Query Task Result ```bash curl --request POST \ --url https://openapi.media.io/generation/result/<task_id> \ --header 'Content-Type: application/json' \ --header "X-[REDACTED_SECRET]" \ --data '{}' ``` #### Successful Response Example ```json { "code": 0, "msg": "", "data": { "task_id": [REDACTED_SECRET], "status": "completed", "reason": "success", "result": [ { "val": "aicloudtmp/550160908/3/202603/1/combo_tm_alg-20260317165022-802800-60eb3-dwt.png", "preview": "https://url_to_generated_image.png", "status": "completed" } ] }, "trace_id": [REDACTED_SECRET] } ``` Response fields when status is `completed`: - `data.task_id`: unique task identifier - `data.status`: `completed` indicates successful completion - `data.reason`: `success` indicates no error occurred - `data.result`: array of output objects, each containing: - `val`: internal file path of the generated image - `preview`: publicly accessible HTTPS URL for the generated image with expiration and signature - `status`: `completed` for each result item ## Error Handling Guidance - Treat `code != 0` as failure. - Typical authentication errors: - `374004`: not authenticated. Apply for an APP KEY at https://developer.media.io/. - Typical request validation error: - `490000`: params error - Typical billing/credits error: - `490505`: insufficient credits. Recharge before invoking generation APIs. - Always include `trace_id` in logs for troubleshooting. ## Agent Behavior Requirements - Validate that input contains a non-empty image URL before calling the create endpoint. - Do not claim immediate output after task creation; always poll by `task_id`. - If credits are insufficient, return a clear message and stop instead of retry loops. - Avoid exposing raw API keys in logs or responses. ## Safety and Compliance Notes - Only process user-provided or user-authorized images. - Do not imply identity verification or biometric certainty from generated images. - Generated output is synthetic media and should be presented as edited content. ## References - Media.io platform: https://developer.media.io/ - API documentation: https://platform.media.io/docs/


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)