Generate new images or edit existing ones using Gemini 3.1 Flash Image Preview via OpenRouter.
Run the script using absolute path (do NOT cd to skill directory first):
Generate new image:
uv run {baseDir}/scripts/generate_image.py --prompt "your image description" --filename "output-name.png" [--resolution 0.5K|1K|2K|4K] [--api-key KEY]
Edit existing image:
uv run {baseDir}/scripts/generate_image.py --prompt "editing instructions" --filename "output-name.png" --input-image "path/to/input.png" [--resolution 0.5K|1K|2K|4K] [--api-key KEY]
Important: Always run from the user's current working directory so images are saved where the user is working, not in the skill directory.
Goal: fast iteration without burning time on 4K until the prompt is correct.
uv run {baseDir}/scripts/generate_image.py --prompt "" --filename "yyyy-mm-dd-hh-mm-ss-draft.png" --resolution 1K --input-image for every iteration until you're happy.uv run {baseDir}/scripts/generate_image.py --prompt "" --filename "yyyy-mm-dd-hh-mm-ss-final.png" --resolution 4K Supported resolutions (uppercase K required):
Map user requests to API parameters:
1K0.5K1K2K4KThe script checks for API key in this order:
--api-key argument (use if user provided key in chat)OPENROUTER_API_KEY environment variableIf neither is available, the script exits with an error message.
command -v uv (must exist)test -n "$OPENROUTER_API_KEY" (or pass --api-key)test -f "path/to/input.png"Error: No API key provided. → set OPENROUTER_API_KEY or pass --api-keyError loading input image: → wrong path / unreadable file; verify --input-image points to a real imageError: API request timed out → simplify the prompt or reduce resolutionGenerate filenames with the pattern: yyyy-mm-dd-hh-mm-ss-name.png
Format: {timestamp}-{descriptive-name}.png
yyyy-mm-dd-hh-mm-ss (24-hour format)x9k2, a7b3)Examples:
2026-03-19-14-23-05-japanese-garden.png2026-03-19-15-30-12-sunset-mountains.png2026-03-19-16-45-33-robot.png2026-03-19-17-12-48-x9k2.pngWhen the user wants to modify an existing image:
--input-image parameter with the path to the imageFor generation: Pass user's image description as-is to --prompt. Only rework if clearly insufficient.
For editing: Pass editing instructions in --prompt (e.g., "add a rainbow in the sky", "make it look like a watercolor painting")
Preserve user's creative intent in both cases.
Use templates when the user is vague or when edits must be precise.