Generate production-quality colorful icon sets using Google Imagen 4. Use this skill when the user needs custom app icons, emoji-style icons, cartoon icons, or any colorful icon set. Takes a project description, suggests icons, generates 1024px PNGs via Imagen 4, removes backgrounds, downscales to all target sizes, and delivers a review gallery for iterative refinement. Trigger on: "icon set", "generate icons", "app icons", "custom icons", "colorful icons", "cartoon icons", "emoji icons", "make icons", "icon generation", "imagen icons", or any request for a set of colorful visual assets.
100
100%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Passed
No known issues
Generate production-quality colorful icon sets using Google Imagen 4. Claude handles the creative work (suggesting icons, crafting prompts, reviewing). The bundled shell script handles the mechanical work (API calls, image processing, gallery).
Project description
0. Check dependencies (rembg, sips — auto-installed if missing)
1. Understand the project — gather context, aesthetic preferences
2. Suggest 12-20 icons organized by category
3. User confirms/adjusts icon list, choose style preset
4. Generate 1024px PNGs via Imagen 4, remove backgrounds, downscale
5. Open gallery — user marks: keep / retry / drop / add new
6. Regenerate retries + new icons, rebuild gallery
7. Repeat 5-6 until satisfied
8. Deliver final set with manifestEverything runs within Claude Code. The only external dependencies are
a GEMINI_API_KEY and rembg (auto-installed if missing).
All Imagen 4 API calls, background removal, downscaling, and gallery
generation go through the helper script bundled with this skill at
scripts/gemini-icon-set.sh.
Locating the script: Use ${CLAUDE_SKILL_DIR} to resolve the
path relative to this SKILL.md:
ICON_SH="${CLAUDE_SKILL_DIR}/scripts/gemini-icon-set.sh"If CLAUDE_SKILL_DIR is not set (older Claude Code or standalone
install), fall back to a search:
if [[ -n "${CLAUDE_SKILL_DIR:-}" ]]; then
ICON_SH="${CLAUDE_SKILL_DIR}/scripts/gemini-icon-set.sh"
else
ICON_SH="$(command -v gemini-icon-set.sh 2>/dev/null || \
find ~/.claude -path "*/gemini-icon-set/scripts/gemini-icon-set.sh" -type f 2>/dev/null | head -1)"
fi
if [[ -z "$ICON_SH" || ! -f "$ICON_SH" ]]; then
echo "Error: gemini-icon-set.sh not found. Ask the user for the path." >&2
fiStore the result in ICON_SH and use it for all subsequent commands.
Commands:
check-deps -- check and install dependencies (rembg, sips/ImageMagick)generate <manifest.json> -- generate 1024px PNGs from manifestprocess <output-dir> -- remove backgrounds + downscale to all sizesgallery <output-dir> [title] -- build self-contained HTML review galleryLocate the script (see "Shell Script" above) and check dependencies:
ICON_SH="${CLAUDE_SKILL_DIR}/scripts/gemini-icon-set.sh"
"$ICON_SH" check-depsThe script auto-installs rembg via uv tool install "rembg[cpu,cli]"
if missing. It also checks for sips (macOS) or convert
(ImageMagick), curl, python3, and base64.
If uv is missing, tell the user: brew install uv.
Ask the user about their project. One question at a time, don't over-interview. Gather:
./icons)A brief like "ice cream shop app, fun and colorful" is enough to proceed. Don't block on getting perfect answers.
Based on the project description, organize suggestions into categories:
Present the list as a table with icon name, category, and a short description. Let the user add, remove, or rename before generating.
Present the 5 presets as a table:
| Preset | Description | Best For |
|---|---|---|
| kawaii | Cute cartoon with bold brown outline, soft pastels | Fun apps, kids, food |
| flat | Clean vector, minimal shadows, bold colors | Business, productivity |
| glossy | Rounded 3D, saturated colors, soft reflections | Games, premium apps |
| sketch | Hand-drawn pencil lines, warm organic feel | Creative, artsy apps |
| pixel | Retro 8-bit, crisp edges, limited palette | Games, retro themes |
All presets append: centered on pure white background, single object, no text, no words, no letters, app icon style
The user can also provide a fully custom style prompt. If they do, append the same white-background suffix for consistency.
Write manifest.json to the output directory:
{
"style": "<selected preset prompt or custom>",
"output": "<output directory>",
"icons": {
"icon-name": "description of this specific icon",
"another-icon": "description of another icon"
}
}Icon names should be lowercase kebab-case (e.g., ice-cream-cone,
shopping-cart). These become the PNG filenames.
"$ICON_SH" generate manifest.json
"$ICON_SH" process <output-dir>
"$ICON_SH" gallery <output-dir> "<project name> Icons"The generate command:
{style prefix}, {icon description}originals/{output_dir}/originals/The process command:
rembg on each PNG in originals/ to nobg/sips -z (macOS) or convert -filter Lanczos -resize{output_dir}/{size}/{name}.pngThe gallery command:
file://Open the gallery HTML for the user to review:
open "<output-dir>/gallery.html"Ask the user to review the gallery. For each icon, they can mark:
For retries: delete the specific PNGs from originals/, nobg/,
and all size directories, then re-run generate + process + gallery.
The script skips existing files, so only deleted (missing) ones are
regenerated.
rm -f "<output-dir>/originals/<name>.png"
rm -f "<output-dir>/nobg/<name>.png"
for size in 16 24 32 48 64 96 128 256; do
rm -f "<output-dir>/$size/<name>.png"
doneFor new icons: add them to manifest.json and re-run the full
pipeline. Existing icons are skipped automatically.
For drops: remove the icon from manifest.json and delete its
PNGs from all directories.
Re-run generate + process + gallery after changes, then open the gallery again. Repeat Steps 5-6 until the user is satisfied.
Present a final summary:
Final Set: 16 icons, kawaii style
Output: ./icons/
Gallery: ./icons/gallery.html
Manifest: ./icons/manifest.json
Sizes: 16px, 24px, 32px, 48px, 64px, 96px, 128px, 256px (16 files each)See the styles reference for style preset prompts, manifest format, and output directory structure.
.env
file in the current directory. The script reads it automatically.generate command skips icons whose PNGs
already exist in originals/. Delete a PNG to force regeneration.rembg produces clean cutouts for cartoon
styles. Results may vary for photorealistic styles.gemini-svg-creator or icon-set-generator
skills instead.This skill can also be used without the full plugin:
SKILL.md to ~/.claude/commands/gemini-icon-set.mdscripts/gemini-icon-set.sh to ~/.local/bin/gemini-icon-set.sh
and chmod +x it (must be on your PATH)command -v gemini-icon-set.sh -- no path edits needed