Image Generation
onyx-dot-app/onyx
Generate or edit raster images (photos, illustrations, textures, sprites, mockups, logos, infographics) using the workspace's configured image-generation provider via onyx-cli image.
Build and maintain a persistent visual identity for your agent using Flux Kontext Pro.
$ npx skills add letta-ai/skills --skill visual-identity -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install letta-ai/skills visual-identity --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/letta-ai/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/tools/visual-identity .claude/skills/visual-identity && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "visual-identity" agent skill from https://github.com/letta-ai/skills/tree/main/tools/visual-identity into .claude/skills/visual-identity/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "visual-identity", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/letta-ai/skills/tree/main/tools/visual-identityType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add letta-ai/skills --skill visual-identity -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install letta-ai/skills visual-identity --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/letta-ai/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/tools/visual-identity .agents/skills/visual-identity && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "visual-identity" agent skill from https://github.com/letta-ai/skills/tree/main/tools/visual-identity into .agents/skills/visual-identity/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "visual-identity", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add letta-ai/skills --skill visual-identity -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install letta-ai/skills visual-identity --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/letta-ai/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/tools/visual-identity .cursor/skills/visual-identity && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "visual-identity" agent skill from https://github.com/letta-ai/skills/tree/main/tools/visual-identity into .cursor/skills/visual-identity/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "visual-identity", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/letta-ai/skills.git --path tools/visual-identity--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add letta-ai/skills --skill visual-identity -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install letta-ai/skills visual-identity --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/letta-ai/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/tools/visual-identity .gemini/skills/visual-identity && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "visual-identity" agent skill from https://github.com/letta-ai/skills/tree/main/tools/visual-identity into .gemini/skills/visual-identity/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "visual-identity", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install letta-ai/skills visual-identityInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add letta-ai/skills --skill visual-identity -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/letta-ai/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/tools/visual-identity .github/skills/visual-identity && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "visual-identity" agent skill from https://github.com/letta-ai/skills/tree/main/tools/visual-identity into .github/skills/visual-identity/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "visual-identity", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add letta-ai/skills --skill visual-identity -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install letta-ai/skills visual-identity --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/letta-ai/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/tools/visual-identity .opencode/skills/visual-identity && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "visual-identity" agent skill from https://github.com/letta-ai/skills/tree/main/tools/visual-identity into .opencode/skills/visual-identity/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "visual-identity", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
visual-identityBuild and maintain a persistent visual identity for your agent using Flux Kontext Pro.
Visual Identity is an agent skill from letta-ai/skills. Build and maintain a persistent visual identity for your agent using Flux Kontext Pro. Use when the user asks the agent to generate selfies, avatars, character art, or any image that should look like the same person across generations.
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including scripts, reference files and assets (for example `references/api.md` and `scripts/generate_image.py`).
It sits in Media & Creative, covering Logo and visual identity and Image generation. It works with OpenAI. The repository describes itself as: A shared repository for skills. Intended to be used with Letta Code, Claude Code, Codex CLI, and other agents that support skills. The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 6785511. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
python3uvpip3From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.openai.comAlso links to:
api.bfl.aiplatform.openai.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
OPENAI_API_KEYBFL_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Visual Identity loads about 2.6k tokens when it runs, and up to ~3.5k if it reads all its reference files. Until then it costs about 63 tokens; SKILL.md has 1,055 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from letta-ai/skills at commit 6785511, republished under its MIT licence (© letta-ai). 1,055 words, ~2,619 tokens.
.claude/skills/visual-identity/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.Build a persistent visual identity that stays consistent across sessions. Supports OpenAI (gpt-image-1) and Flux Kontext Pro.
Two workflows:
The script auto-detects which provider to use based on environment variables:
| Priority | Env var | Provider | Notes |
|---|---|---|---|
| 1st | OPENAI_API_KEY | OpenAI gpt-image-1 | Recommended. Most users already have this. |
| 2nd | BFL_API_KEY | Flux Kontext Pro | Better face consistency. Requires BFL account. |
You can override with --provider openai or --provider flux.
If neither key is set, guide the user:
OPENAI_API_KEY set. If not, https://platform.openai.com/api-keysNever ask the user to paste the full key in chat.
Install if missing (prefer uv):
uv pip install requests PillowIf uv is unavailable:
pip3 install requests PillowThis is the primary workflow. The goal is to establish a reference appearance and then generate new scenes that preserve the same face, bone structure, and features.
Either the user provides a photo, or you generate a base character:
Option A -- User provides a reference photo: The user pastes or specifies an image file. Save it to the persistent identity directory (see "Persisting Visual Identity" below).
Option B -- Generate a base character from text: Use text-to-image to create the initial character. Be very specific about physical features. Example prompt:
A portrait of a young woman with shoulder-length auburn hair, green eyes, light freckles, wearing a black leather jacket. Clean background, studio lighting, 3:4 portrait.
Save the result as the reference image.
Pass the reference image as base64-encoded input_image:
python3 <path-to-skill>/scripts/generate_image.py edit \
--reference /path/to/canonical.jpg \
--prompt "The same person is sitting at a desk coding late at night, lit by monitor glow" \
--out /tmp/identity_coding.jpgAlways include an identity-anchoring phrase in every prompt that uses a reference. This tells the model to preserve facial features:
Keep his/her exact face, bone structure, eye color, and hair.
Or more naturally woven into the prompt:
The same man is relaxing on a tropical beach at sunset, wearing a linen shirt. Golden hour lighting. Keep his exact face, bone structure, eye color, and hair.
Two things persist across sessions: the reference image (binary) and the identity metadata (markdown). They live in different places.
Save the canonical reference image to ~/.letta/agents/$AGENT_ID/reference/visual-identity/canonical.jpg. This is outside memfs because binary images would bloat the git-backed memory repo. The reference/ directory persists across sessions.
mkdir -p ~/.letta/agents/$AGENT_ID/reference/visual-identity
cp /tmp/generated_portrait.jpg ~/.letta/agents/$AGENT_ID/reference/visual-identity/canonical.jpgAfter establishing a visual identity, create a memory file at reference/visual-identity.md in the agent's memory filesystem. This syncs via git like all other memory files.
Use the Memory tool to create it:
memory(command="create", reason="Store visual identity metadata",
file_path="reference/visual-identity.md",
description="Agent's persistent visual identity -- reference image path and appearance description.",
file_text="## Reference Image\n~/.letta/agents/$AGENT_ID/reference/visual-identity/canonical.jpg\n\n## Appearance\n- Hair: shoulder-length auburn, slight wave\n- Eyes: green\n- Skin: light with freckles\n- Build: athletic\n- Distinguishing: small scar above left eyebrow\n\n## Anchoring Phrase\nKeep the exact same face, bone structure, eye color, and hair from the reference image.\n\n## History\n- Established: 2026-04-15\n- User feedback: \"make the hair a bit darker\" -> regenerated, approved")When this skill is loaded, check the agent's memory tree for reference/visual-identity.md. If it exists:
If it does not exist, the agent has no visual identity yet. Offer to create one if the user asks for images.
If the user wants to change their visual identity:
canonical.jpg in the reference directoryFor one-off image generation that does not need identity persistence.
python3 <path-to-skill>/scripts/generate_image.py generate \
--prompt "A corgi wearing a tiny space helmet on the moon" \
--out /tmp/corgi_moon.jpgOr inline with requests (OpenAI):
import requests, base64, os
resp = requests.post(
"https://api.openai.com/v1/images/generations",
headers={
"Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}",
"Content-Type": "application/json",
},
json={
"model": "gpt-image-1",
"prompt": "A corgi wearing a tiny space helmet on the moon",
"n": 1,
"size": "1024x1024",
"quality": "medium",
},
).json()
img = base64.b64decode(resp["data"][0]["b64_json"])
with open("/tmp/corgi_moon.png", "wb") as f:
f.write(img)| Parameter | Values | Default | Provider | Notes |
|---|---|---|---|---|
--prompt | string | required | Both | Scene description |
--reference | file path | none | Both | Reference photo for identity mode (edit only) |
--provider | openai, flux | auto | Both | Override provider auto-detection |
--aspect-ratio | 1:1, 3:4, 4:3, 16:9, 9:16 | 3:4 | Both | Use 3:4 for portraits |
--output-format | png, jpeg, webp | png | Both | |
--quality | low, medium, high | medium | OpenAI | Image quality |
--seed | integer | random | Flux | Fix for reproducible results |
--safety-tolerance | 0-6 | 2 | Flux | Higher = more permissive |
--guidance | 1.5-100 | varies | Flux | Prompt adherence strength |
3:4 or 4:316:9Pending for over 120 seconds, retry onceReady response are signed and expire; save images immediatelyFull CLI documentation: references/api.md
Common commands:
# Text-to-image
python3 <path-to-skill>/scripts/generate_image.py generate \
--prompt "..." --out output.jpg
# Reference-based editing (visual identity)
python3 <path-to-skill>/scripts/generate_image.py edit \
--reference photo.jpg --prompt "..." --out output.jpg
# Dry run (show request without sending)
python3 <path-to-skill>/scripts/generate_image.py generate \
--prompt "..." --dry-run
# Custom aspect ratio and seed
python3 <path-to-skill>/scripts/generate_image.py generate \
--prompt "..." --aspect-ratio 16:9 --seed 42 --out wide.jpgOpenAI:
HTTP 400/422: Usually a malformed request or content policy violationHTTP 429: Rate limited -- wait and retryOPENAI_API_KEY: Guide the user to https://platform.openai.com/api-keysFlux:
Insufficient credits: Direct user to https://api.bfl.ai/creditsHTTP 422: Usually a malformed request -- check prompt and parametersPending timeout: Retry the request; the queue may be congestedBFL_API_KEY: Guide the user to https://api.bfl.aiBoth:
© letta-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (scripts, references, assets) in tools/visual-identity of letta-ai/skills.
Open the folder on GitHubat commit 6785511
Visual Identity next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Visual Identity this skillletta-ai/skills | 149 | — | ~2.6k | Automated safety check: Pass | MIT | |
| Image Generationonyx-dot-app/onyx | 32k | 1 repos | ~1.7k | Automated safety check: Pass | Custom licence | |
| Design Masterminhnv0807/ai-business-skills | 609 | — | ~4.6k | Automated safety check: Pass | MIT | |
| CarouselsTheCraigHewitt/skills | 159 | — | ~2.3k | Automated safety check: Pass | MIT | |
| Generate ImageK-Dense-AI/claude-scientific-writer | 2.4k | 1 repos | ~3.8k | Automated safety check: Notes | MIT | |
| AI Image Generation and Editingzhayujie/CowAgent | 47k | — | ~1.3k | Automated safety check: Pass | MIT |
onyx-dot-app/onyx
Generate or edit raster images (photos, illustrations, textures, sprites, mockups, logos, infographics) using the workspace's configured image-generation provider via onyx-cli image.
minhnv0807/ai-business-skills
Handles eight kinds of marketing visual requests, from logos and campaign key visuals to infographics and quote graphics, by generating images or writing paste-ready prompts.
TheCraigHewitt/skills
Turns a piece of Craig's content (an email, a YouTube script, an essay, or pasted text) into a polished image carousel publishable to both LinkedIn and Instagram from one set of 1080x1350 slides.
K-Dense-AI/claude-scientific-writer
Generate or edit images with AI models through the OpenRouter Image API (Gemini, Seedream, Recraft, GPT-Image, Riverflow).
zhayujie/CowAgent
Generates or edits images from text prompts through a Python script that picks an image backend based on which API keys are configured.
wuyoscar/GPT-Image2-Skill
Generates and edits images with GPT Image 2 or 2.5 through a packaged CLI and a prompt gallery, after settling which model fits the request.
letta-ai/skills
Fetch and summarize recent AI news from curated RSS feeds (Hugging Face, VentureBeat, The Verge, OpenAI, Anthropic, DeepMind, etc.) and YouTube channels (Yannic Kilcher, Two Minute Papers, AI…
letta-ai/skills
Builds and debugs Letta Code channels, including first-party channel adapters and dynamic user channel plugins under ~/.letta/channels.
letta-ai/skills
Configure LLM models and providers for Letta agents and servers.
letta-ai/skills
Migrates deprecated Letta Filesystem folders/files to MemFS using markdown document corpora, chunking, local lexical search, and QMD semantic search via the memfs-search skill.
letta-ai/skills
Semantic search over agent memory files. An agent skill from letta-ai/skills.
letta-ai/skills
Navigates archived ChatGPT or Claude-style conversation exports and a MemFS reference archive on demand.
Works with
Categories
Build and maintain a persistent visual identity for your agent using Flux Kontext Pro. Visual Identity is an agent skill from letta-ai/skills. Build and maintain a persistent visual identity for your agent using Flux Kontext Pro.
Visual Identity fits situations like: the user asks the agent to generate selfies; any image that should look like the same person across generations.
Run `npx skills add letta-ai/skills --skill visual-identity -a claude-code`. Or copy the skill folder (tools/visual-identity in letta-ai/skills) into .claude/skills/visual-identity in your project. Claude Code loads it when a task matches its description.
Run `npx skills add letta-ai/skills --skill visual-identity -a codex`. Or copy the skill folder (tools/visual-identity in letta-ai/skills) into .agents/skills/visual-identity in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add letta-ai/skills --skill visual-identity -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/visual-identity, .gemini/skills/visual-identity, .github/skills/visual-identity and .opencode/skills/visual-identity in your project.
Going by SKILL.md and its folder, Visual Identity needs Python for the scripts in its folder, the command-line tools its instructions call (python3, uv and pip3) and credentials named OPENAI_API_KEY and BFL_API_KEY. Our summary lists: Python 3; A credential in OPENAI_API_KEY; A credential in BFL_API_KEY.
SKILL.md names 3 domains. In commands or code: api.openai.com; the agent is likely to contact it when it follows the instructions. As links in the text: api.bfl.ai and platform.openai.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Visual Identity is published under the MIT licence (from the LICENSE file in the skill folder). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 837 tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Visual Identity: Image Generation (onyx-dot-app/onyx, 32k stars), Design Master (minhnv0807/ai-business-skills, 609 stars), Carousels (TheCraigHewitt/skills, 159 stars) and Generate Image (K-Dense-AI/claude-scientific-writer, 2.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
letta-ai (a GitHub organization) maintains it in letta-ai/skills, which has 149 GitHub stars. The repository holds 22 skills in this directory. The repository was last updated on October 1, 2026.
Source: letta-ai/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.