Memory-driven AI visual assistant. Supports 7 core capabilities (image generation, editing, face swap, virtual try-on, beauty enhance, image-to-video, motion transfer) and 17 scenario workflows. Triggered only when the user explicitly asks for a supported personalized visual workflow such as avatar series, background swap, try-on, style remix, daily card, or bring-image-to-life. It reads Meitu credentials, may read local profile/memory files, invokes the local `meitu` CLI, may send selected local context to Meitu OpenAPI, and writes outputs plus optional memory/profile updates locally.
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Um comando direto ignora o prompt de revisão. Verifique a origem antes de executá-lo.
Instruções da origem · Visualização somente leitura
name
meitu-visual-me
description
Memory-driven AI visual assistant. Supports 7 core capabilities (image generation, editing, face swap, virtual try-on, beauty enhance, image-to-video, motion transfer) and 17 scenario workflows. Triggered only when the user explicitly asks for a supported personalized visual workflow such as avatar series, background swap, try-on, style remix, daily card, or bring-image-to-life. It reads Meitu credentials, may read local profile/memory files, invokes the local `meitu` CLI, may send selected local context to Meitu OpenAPI, and writes outputs plus optional memory/profile updates locally.
version
1.1.0
metadata
{"openclaw":{"requires":{"bins":"[Truncated]","env":"[Truncated]","paths":"[Truncated]"},"primaryEnv":"MEITU_OPENAPI_ACCESS_KEY","security":{"dataFlow":"Inputs, selected local context, and generated prompts may be sent to Meitu OpenAPI when used by the workflow.","credentials":"Credentials are used only for CLI authentication and must not be disclosed.","persistence":"Record workflows may access declared project and visual memory/rules files."}}}
security
{"credential_use":"Uses Meitu OpenAPI credentials from env or ~/.meitu/credentials.json for CLI calls; credentials must not be echoed, logged, or embedded in prompts.","remote_processing":"Images, videos, generated prompts, and local profile/memory/project details or summaries incorporated into prompts may be sent to Meitu OpenAPI.","persistence":"The workflow may read/write ./visual/, ./DESIGN.md, ./output/, drafts, references, observations, visual memory, and quality rules for personalization and feedback recording when the user continues with profile-based personalization or project memory recording.","privacy_note":"Local files remain stored locally, but excerpts, summaries, or derived details included in API prompts are transmitted to Meitu OpenAPI.","consent":"First-use authorization must disclose that profile, memory, and project context may be incorporated into prompts sent to Meitu OpenAPI; users may opt out by not using memory/profile context or not providing photos."}
Local reads: Meitu Visual Me may read local files such as MEMORY.md, USER.md, and ./visual/PROFILE.md for personalized generation. These files remain stored locally, but excerpts, summaries, or derived details may be incorporated into generated prompts.
Uploaded to meitu API: Images you provide (photos, reference images), generated prompts, and any local profile/memory/project details included in those prompts are sent to the Meitu OpenAPI for processing, subject to the Meitu privacy policy.
First-use authorization: On first use, the skill will explain the above data usage, including possible prompt inclusion of local profile/memory/project context. You can choose not to provide photos or not to use memory/profile context.
Overview
Memory-driven AI visual assistant. Reads user profiles and daily memories to generate personalized images and videos. Supports 17 scenario workflows and 28 trending styles. Play first, give feedback, and the system automatically learns your preferences.
credentials: prefer environment variables or a pre-provisioned ~/.meitu/credentials.json; if the operator explicitly wants persistent local setup, run meitu config set-ak --value <AK> + meitu config set-sk --value <SK>
user knowledge (optional): ./visual/ (if absent, knowledge reads are skipped until the user chooses to start a local visual workspace; reference photos and profile/memory files are then stored under ./visual/)
user config (optional): $VISUAL/config/defaults.yaml
Path alias: In the text below, $VISUAL = {OPENCLAW_HOME}/workspace/visual/. When ./visual/ exists, it points to that directory; on the OpenClaw platform it auto-resolves to ~/.openclaw/workspace/visual/.
Platform Setup
OpenClaw: User data is located at ~/.openclaw/workspace/visual/. The platform injects it automatically; ./visual/ resolves to that path at runtime.
Claude Code / Other Agents: User data is located at ./visual/ under the current working directory. Only create or update this local workspace when the user continues with profile-based personalization or long-lived local memory; otherwise skip knowledge writes.
All ./visual/ paths in the workflows below are resolved to the corresponding actual path by each platform at runtime.
Preflight
Must pass before every generation; if it fails, stop generation:
meitu --version — if not installed, prompt: npm install -g meitu-cli@latest
Verify credentials: meitu auth verify --json — if credentials are invalid, this will return an auth error. For credential setup, read references/setup.md
Check whether the ./visual/ directory exists (if not, prompt first-time user; do not block)
Did the user send an image or a video? — Videos are not supported; prompt user to send a screenshot
One-time workspace resolution (results persist throughout the workflow):
Detect mode: cwd has openclaw.yaml → project mode; else → one-off
检查 ./visual/ 目录 → 确定 capabilities
Minimization rule: only read or persist the profile, memory, or project fields needed for the current request. Do not create or update long-lived memory/profile records for name, gender, or identity details unless the user explicitly wants that personalization behavior.
Variables available after resolution (referenced directly in subsequent steps):
Route first, read later — match the workflow first, then decide what to read and how to proceed.
First: Match Workflow
Compare the user's input against the trigger words in the Workflows section below to match a specific workflow. Read references/workflows.md for scenario details.
When no match is found, there are three cases:
Clear description (e.g., "帮我画一只猫在月球上") — no workflow match needed; determine the style per prompt building rules, then generate directly with text-to-image
Only sent an image without text — recommend 4 suitable options based on image content (e.g., swap background, style remix, make ID card, image-to-video), let user choose
Each workflow's corresponding CLI command is listed in the Workflows section table. For detailed command parameters, read references/models.md. image-edit requires selecting a sub-model: praline_pro (general editing) / gummy_pro (portrait/pet photography, hairstyle adjustment); stylization defaults to image-style-transfer, and only explicit high-quality editing paths should use image-edit --model nougat.
Routing decision output (passed from Context to Execute):
Pure narrative style; keyword stacking is forbidden
❌ woman, dress, red background, fashion, 8K, masterpiece
✅ A young woman in a tailored brown dress, posing with confidence against a cherry red backdrop, fashion editorial feel with warm film grain
When a reference image is provided, explicitly state its purpose in the prompt (preserve facial likeness / reference composition / reference style); don't just attach an image without explanation
Embed style keywords into the narrative — pick 1-2 and weave them naturally into sentences; stacking at the end is forbidden
When user context is available, prioritize embedding personal details; when unavailable, generate directly based on user description without blocking.
Every generated image must have a clear style direction. Style determination priority:
User specified a style this time → use it directly
User didn't specify, but ./visual/memory/global.md has a recorded preferred style → use the memorized style directly without asking again
User didn't specify, and there's no memory → based on the day's state and scenario, pick 4 suitable styles from references/style-library.md's style matching guide, let user choose before generating
Never generate a "generic" image without a style direction. If the user consistently picks the same style, remember it through the observation pipeline in the Record phase, and use it directly next time.
Example 1 (persona-diorama — from memory/今日.md, the user completed an important delivery today):
An isometric miniature workspace on a wooden desk. A tiny figure surrounded by [items extracted from memory]. A celebratory confetti cannon mid-burst on the desk corner. Warm afternoon light through a window, the whole scene feels like a lovingly crafted toy shop diorama.
Example 2 (swap-bg — user sent a selfie and said "换成东京街头"):
Keep the person exactly the same, change only the background to a vibrant Tokyo street scene with neon signs, busy crosswalks, and the warm glow of shop fronts lining both sides of the road, evening atmosphere with soft city lights
Example 3 (ID card — with reference image, user chose Cyber Neon style):
FACE LIKENESS IS THE #1 PRIORITY. Preserve exact facial structure. A young man with short black hair, black-framed glasses, and an oversized hoodie. Apply 3D collectible figure rendering LIGHTLY — keep proportions close to real. Generate a vertical ID CARD in Cyber Neon style: brushed carbon fiber base, neon cyan and magenta glow border, monospaced terminal font. Info area: "小明" / "独立开发者" / "杭州" — EST. 2000. Side strip: "卫衣收集者". Slight tilt, studio-lit product shot feel.
Execute
CLI command decision table:
Task type
Command
Key parameters
Notes
Text-to-image
meitu text-to-image
--prompt --size --ratio
No reference image
Generation with reference image
meitu text-to-image
--image_list --prompt --size
Stylization / group photo
Background swap / content editing
meitu image-edit
--image_list --prompt --model
See model selection table
Face swap
meitu image-face-swap
--head_image_url --sence_image_url --prompt
Avatar series
Beauty enhance
meitu image-edit --model gummy_pro
--image_list --prompt --model gummy_pro
Single-person portrait retouch
Image-to-video
meitu image-to-video
--image_list --prompt --video_duration
Async task
Motion transfer
meitu video-motion-transfer
--image_list --reference_video_list --prompt
Async task
Virtual try-on
meitu image-outfit-swap
--image_url --prompt [--clothes_image_url]
image-edit model selection:
Priority
Model
Use case
Output style
1
text-to-image --image_list
Stylization: cartoon, 3D figure, anime, sketch, artistic recreation
Artistic (NOT realistic face)
2
gummy_pro
Portrait/pet photography, hairstyle adjustment
Realistic portrait
3
praline_pro (default)
Everything else: text manipulation, background swap, color grading, add/remove elements, multi-image fusion
Pass via --image_list, prompt describes target style
text-to-image --image_list
Background swap
Pass via --image_list, prompt explicitly says "keep person unchanged"
image-edit --model praline_pro
Group photo (multiple references)
Pass multiple via --image_list, prompt describes group photo scene
text-to-image --image_list img1 img2
Analyze reference only (not passed to tool)
Extract composition/style info into prompt
text-to-image (pure text-to-image)
Face swap
Pass separately via --head_image_url and --sence_image_url
image-face-swap
Output directory: Use output_dir resolved in Preflight. Ensure the directory exists (mkdir -p). Add --json --download-dir {output_dir} to all meitu commands.
Result field references:
With --download-dir → use downloaded_files[0].saved_path for local path (media_urls also available but local path is more reliable)
Without --download-dir → use media_urls[0] for result URL
Error response → first read CLI raw fields code, hint, error_name, and action_url; when presenting the failure to the user, map them to the Agent-enhanced fields error_type, user_hint, next_action, and action_link using the meitu-tools contract
Image input: Pass user-provided images via URL or local path. When a reference image is needed, check ./visual/assets/references/user.jpg.
Refine (MUST for creative tasks, skip for tool tasks)
Tool tasks (beauty, virtual-tryon, image-superres-enhance) → skip this step and go directly to Deliver.
Iterative refinement loop for creative tasks:
Present result — show the generated image + briefly explain design rationale (why this style/composition/color palette)
Wait for feedback — three possible directions:
User approves ("好" / "不错") → proceed to Deliver
User requests modifications ("背景换一下" / "颜色太亮") → step 3
User rejects entirely ("完全不对" / "重新来") → go back to Execute and regenerate
Adjust and regenerate — modify prompt or parameters based on feedback → re-run CLI command → back to step 1
Iteration cap — recommend at most 3 rounds. After 3 rounds, proactively suggest: adjust the requirement direction, split into sub-tasks, or try a different workflow
Note: Do not generate multiple images consecutively without presenting results. Wait for user feedback after each generation.
Deliver
Files are already in the correct directory (Execute uses Preflight's output_dir); only rename is needed:
Path display rule: When presenting file paths to the user, prefer ~/.openclaw/... format. Some chat platforms (e.g., WeChat Work MEDIA) only recognize ~/ prefix paths; absolute paths will prevent images/files from displaying. Internal processing can use absolute paths.
WeChat delivery: For the WeChat channel (channel=openclaw-weixin), use MEDIA:visual/output/meitu-visual-me/{filename}.jpg (relative path).
After delivery: After delivery, wait for user feedback before the next generation. If user gives style/preference feedback, proceed to Record. When the user says "适配各平台", read references/channel-presets.md.
DESIGN.md maintenance: If DESIGN.md Iteration Log > 5 entries → compact: keep the most recent 5, archive older entries to ./drafts/design-history.md.
Record
can_record = false → skip this entire section. In one-off mode, all feedback is only effective for the current conversation.
Zero-write default — write nothing after generation; only write when user gives active feedback:
User says
What to do
"好" / "喜欢这个风格"
Append observation to ./visual/memory/observations/observations.yaml (auto, no user confirmation needed). If that observation's projects >= 2, mention non-blockingly at end of reply: "By the way, you've preferred X across N projects. Want to save it as a universal preference?" User confirms → write to memory/global.md or memory/scenes/{scene}.md, delete the observation; user ignores → do nothing
"不要 XX 风格"
Has openclaw.yaml → ask: "Only skip XX for this project, or never use XX for all future projects?" Project-only → append to ./DESIGN.md Constraints; all future → append to ./visual/rules/quality.yaml (requires user confirmation). No openclaw.yaml → applies only to current task, no write
"我是男的" (identity facts)
Write to ./visual/PROFILE.md
Sends a new reference photo
Save as ./visual/assets/references/user.jpg
"换个背景重生"
Re-run current task, no write
If the user says nothing, write nothing and don't read observations.yaml (zero overhead).
One-off mode exception: When a user repeatedly expresses the same preference in one-off mode (e.g., says "不要渐变" multiple times), the Agent MAY proactively suggest:
"You've mentioned no gradients several times. Want to add it to the global forbidden list?"
→ User agrees → write to $VISUAL/rules/quality.yaml (requires confirmation)
→ User disagrees → effective only for the current conversation
Positive feedback recording path:
Read $VISUAL/memory/observations/observations.yaml (create if it doesn't exist)
Scan for semantically similar keys → merge or create new
Write back to file
If len(projects) >= 2 → propose promotion (non-blocking)
Promotion proposal template:
"You've preferred X across N projects. Want to save it?
→ Save to {scope_hint} scene [default]
→ Save to global preferences
→ Don't save"
If scope_hint is not null → default to scenes/{scope_hint}.md; if null → default to global.md.
User confirms → write to target file + delete observation entry. User ignores → do nothing.