Blog Image
Use this skill to generate one blog thumbnail per run using the nano-img CLI.
It uses the nano-img CLI from the nanobana npm package.
CRITICAL NON-NEGOTIABLE: this skill depends on the nano-img-cli skill.
Before running any command, verify it is installed:
openclaw skills install nano-img-cli
If the command nano-img is not available after that, stop and report the error.
If the user did not provide a topic, ask for one before proceeding.
Inputs to infer
TOPIC: the subject of the blog post the image is for (e.g. "vector databases", "building a notes app in Rust")- Optional:
--save-topath override (default:~/blog-images/) - Optional:
--prefixfor the output filename
Prerequisite check
Before generating, run these checks in order:
1. Confirm nano-img is available:
nano-img --help
If this fails, run:
npm install -g nanobana
Then verify again. If still failing, stop and report.
2. Confirm NANO_IMAGE_API_KEY is set:
echo $NANO_IMAGE_API_KEY
If the output is empty, source ~/.zshrc first — the key is defined there:
source ~/.zshrc && echo $NANO_IMAGE_API_KEY
CRITICAL NON-NEGOTIABLE: never ask the user to add or set the API key manually. It is already in ~/.zshrc. Always source it before concluding the key is missing.
If it is still empty after sourcing, report the exact output and stop.
Workflow
- Confirm the topic with the user or infer it from the blog name they provided.
- Create
~/blog-images/if it does not exist. - Run the generation command using this exact structure:
nano-img generate -w 1600 -f webp --save-to ~/blog-images \
"1920x1080 thumbnail on topic \"{TOPIC}\" dont just use text use proper vectors resarch on web and make and all, add more vectors then just text (less text more vectors images and all)"
Replace {TOPIC} with the actual topic. Keep the rest of the prompt exactly as written.
Do not paraphrase, shorten, or reword the prompt text. It is battle-tested.
- Confirm the output file was written to
~/blog-images/. Note the exact absolute path. - Update the blog-meta JSON with the image path.
- Look for a matching JSON file in
~/blog-meta/whoseblog_pathvalue corresponds to the same blog. - If found, set
thumbnail_pathto the exact absolute path of the generated image file. - Write the updated JSON back to the same file. Do not change any other field.
- If no matching JSON file is found, note it in the completion report but do not fail the run.
- Look for a matching JSON file in
- Report the full output file path.
Quality bar
- CRITICAL NON-NEGOTIABLE: always use
-w 1600 -f webp. Never change these flags. - CRITICAL NON-NEGOTIABLE: always use
--save-to ~/blog-imagesunless the user explicitly provides a different path. - CRITICAL NON-NEGOTIABLE: never modify the prompt text. Use it verbatim with only
{TOPIC}substituted. - CRITICAL NON-NEGOTIABLE: do not skip the prerequisite check. If
nano-imgis missing, install it first. - CRITICAL NON-NEGOTIABLE: after a successful generation, always attempt to update the matching
~/blog-meta/*.jsonwiththumbnail_path. Never skip this step.
Completion report
At the end, report:
- Topic used
- Full
nano-imgcommand run - Output file path
- Whether the file exists at that path after generation
- Which
~/blog-meta/*.jsonfile was updated (or that no match was found)