Install
openclaw skills install picture-itGenerate and edit images from the CLI using picture-it. Use this skill whenever the user asks to create, edit, or manipulate images — blog headers, social cards, hero images, product comparisons, YouTube thumbnails, movie posters, magazine covers, Instagram edits, background removal, or any visual content. Also trigger when the user mentions picture-it by name, wants to composite images, apply color grading, add text to images, remove or replace backgrounds, crop/resize photos, or needs any kind of image generation or photo editing from the terminal. This skill covers multi-pass AI image editing workflows that chain composable operations together.
openclaw skills install picture-itPhotoshop for AI agents. Composable image operations from the CLI.
Source: https://github.com/geongeorge/picture-it | npm: https://www.npmjs.com/package/picture-it
picture-it must be installed and configured. Requires Node.js 18+.
# Install (pick one)
npm install -g picture-it
pnpm add -g picture-it
bun install -g picture-it
# Setup
picture-it download-fonts
The FAL API key is required for AI operations (generate, edit, remove-bg, upscale). Set it via environment variable or the CLI:
# Option 1: Environment variable (preferred — use platform-managed secrets)
export FAL_KEY=your-key-here
# Option 2: CLI config (stored in ~/.picture-it/config.json with 0600 permissions)
picture-it auth --fal <fal-api-key>
NEVER paste API keys into chat. Always use environment variables or the CLI auth command. Get a FAL key from https://fal.ai.
Note: User images are uploaded to fal.ai for AI processing when using generate, edit, remove-bg, or upscale commands. Local-only commands (crop, grade, grain, vignette, text, compose, template, info) do not transmit data.
Every command takes an image in and outputs an image. Chain them to build anything. The agent calling picture-it IS the planner — there is no AI planner inside the tool.
Image generation costs real money ($0.03–$0.15 per FAL call). A 4-pass workflow is $0.10+. Don't burn budget on a vague idea — spend time planning before running any commands.
Before touching picture-it, get full clarity on what the user wants. Ask yourself:
If any of these are unclear, ask the user before proceeding. A 30-second question saves $0.15 in wasted generation.
Think through at least 3 different approaches before picking one. Consider:
Present your top 2-3 ideas to the user briefly — one sentence each — and let them pick before generating. Example:
"Here are a few directions:
- Dramatic product shot — generate a dark stage, edit to place your logo as a glowing 3D object ($0.07)
- Clean comparison — remove-bg from both products, compose on gradient with text ($0.01)
- Text-behind-subject — generate an action scene, edit to weave the title behind the subject ($0.07)
Which direction, or a mix?"
Before running the first command, write out the full pipeline:
1. generate (flux-dev $0.03) — dark stage scene
2. edit (seedream $0.04) — place logo into scene
3. compose (free) — add text overlay
4. grade + vignette (free) — post-process
Total: ~$0.07
This avoids discovering mid-way that you need a different approach and wasting the earlier calls.
| Command | What it does | Needs FAL? |
|---|---|---|
generate | Create image from text prompt | Yes |
edit | Edit image(s) with AI | Yes |
remove-bg | Remove background | Yes |
replace-bg | Remove bg + generate new one | Yes |
crop | Resize/crop to exact dimensions | No |
grade | Apply color grading | No |
grain | Add film grain | No |
vignette | Add edge darkening | No |
text | Render text onto image (Satori) | No |
compose | Overlay images/text/shapes from JSON | No |
template | Built-in templates (no AI) | No |
info | Analyze image dimensions/colors | No |
Choose the right model for the job — don't overspend.
Generation (no input images):
flux-schnell ($0.003) — Default. Fast, good quality. Use for backgrounds and base scenes.flux-dev ($0.03) — Better quality. Use for hero images, portraits, detailed scenes where quality matters.Editing (with input images):
seedream ($0.04) — Default. Good for compositing multiple images, placing objects in scenes, adding text. Handles up to 10 inputs.banana2 ($0.08) — Better image preservation. Use when you need the input image to stay more faithful, or >10 inputs.banana-pro ($0.15) — Best quality, best text rendering. Use for premium work, complex edits, character consistency.Background removal:
bria (default) — Best edge quality, clean cutoutsbirefnet — Good general purposepixelcut — Alternativerembg — CheapestThis is the difference between mediocre and professional output. Read references/prompt-library.md for a full library of tested prompts you can copy and adapt. Key rules:
For generation: Be specific about lighting ("dramatic side lighting from upper right"), camera ("shot on Canon R5 70-200mm f2.8"), and atmosphere ("dust particles visible in the light beam"). Vague prompts produce generic results.
For text-behind-subject: The key phrase is: "Add '[TEXT]' in large bold [color] letters BEHIND the [subject] — the [subject's] body overlaps and partially covers the letters." Without "BEHIND" and the occlusion instruction, the text floats on top.
For edits: Always end with "Keep everything else exactly the same" and list what to preserve. Without this, the AI changes things you didn't want changed.
For background replacement: Use realistic, specific locations ("modern upscale mall entrance during daytime, natural warm daylight"). Over-dramatic backgrounds ("city at night with neon reflections") look obviously fake.
For big titles and hero text: Use the FAL model via edit — it handles large text well and integrates it into the scene naturally. No font size math needed, just say "very large bold" in the prompt.
For precise small text (credits, URLs, badges, coverlines): Use compose or text with Satori. This is where font sizing matters — images display much smaller on phones. Quick rule: on a 1080px Instagram image, nothing under 36px is readable. Run picture-it download-fonts first if fonts aren't installed.
Hierarchy: Max 3 text sizes per image. Brand name should be larger than tagline.
Font pairing: Serif + sans-serif works best. For FAL model text, just describe the style in the prompt. For Satori, 3 fonts are bundled — drop more .ttf files into ~/.picture-it/fonts/. Run picture-it download-fonts if fonts aren't installed. See references/composition-guide.md for pairing suggestions.
Read references/composition-guide.md for detailed multi-pass workflows, product photography, magazine covers, and overlay composition.
picture-it generate --prompt "dark cosmic background with nebula" --size 1200x630 -o bg.png
picture-it text -i bg.png --title "Hello World" --font "Space Grotesk" --color white --font-size 64 -o hero.png
picture-it generate --prompt "abstract dark tech background" --size 1200x630 -o bg.png
picture-it text -i bg.png --title "My Blog Post" --font "DM Serif Display" --font-size 72 -o header.png
picture-it grade -i header.png --name cinematic -o header-graded.png
picture-it edit -i photo.jpg --prompt "replace background with modern hotel entrance, keep subject identical" --model banana-pro -o edited.jpg
# 1. Generate a scene
picture-it generate --prompt "runner on mountain trail at golden hour" --model flux-dev --size 1280x720 -o runner.png
# 2. Use FAL edit to add text BEHIND the subject
picture-it edit -i runner.png --prompt "Add 'RUN FASTER' in large bold black letters BEHIND the runner — the runner's body overlaps the text" --model seedream -o thumbnail.png
# 1. Remove backgrounds from product photos
picture-it remove-bg -i product-a.png --model bria -o a-cutout.png
picture-it remove-bg -i product-b.png --model bria -o b-cutout.png
# 2. Generate a background
picture-it generate --prompt "split gradient, blue left to orange right" --size 1200x630 -o bg.png
# 3. Compose cutouts onto background with text
picture-it compose -i bg.png --overlays overlays.json -o comparison.png
# 1. Generate base scene
picture-it generate --prompt "dark stage with green spotlight" --model flux-dev --size 2048x1080 -o stage.png
# 2. Edit scene to place objects
picture-it edit -i stage.png -i logo.png --prompt "Place Figure 2 as glowing 3D cube in the spotlight" --model seedream -o composed.png
# 3. Post-process
picture-it crop -i composed.png --size 1200x630 --position attention -o cropped.png
picture-it grade -i cropped.png --name cinematic -o graded.png
picture-it vignette -i graded.png --opacity 0.3 -o final.png
Use --platform <name> with generate or crop:
| Preset | Size |
|---|---|
blog-featured | 1200x630 |
og-image | 1200x630 |
youtube-thumbnail | 1280x720 |
instagram-square | 1080x1080 |
instagram-story | 1080x1920 |
twitter-header | 1500x500 |
Read stdout to get the file path. This is how you chain commands.
--model bria for remove-bg — the default birefnet leaves rectangular artifacts that cause ugly glow/shadow halos when compositing.glow effect in compose mode blurs the entire rectangular buffer, not the shape. Avoid using glow on cutout images — use the background color/lighting to create the glow effect instead.shadow effect has the same rectangular artifact issue. For cutout images on clean backgrounds, skip shadows entirely.remove-bg + compose instead of edit to preserve the original exactly.edit with banana-pro, don't pass resolution or limit_generations params — it auto-detects.crop to exact dimensions after FAL generation — FAL models output approximate sizes.flux-dev ($0.03) not flux-schnell ($0.003) when image quality matters (hero images, portraits). The quality difference is significant.edit, be very explicit in the prompt: "the text is BEHIND the subject — the subject's body overlaps and partially covers the letters."