Generate images, videos, upscale/enhance images, and train LoRA styles using the Krea.ai API. Supports 20+ image models (Flux, Imagen, GPT Image, Ideogram, Seedream...), 7 video models (Kling, Veo, Hailuo, Wan), and 3 upscalers (Topaz up to 22K).
IMPORTANT: Do NOT invent model names. Run list_models.py to get the live list of models, CU costs, and accepted parameters from the Krea API's OpenAPI spec. All scripts resolve models dynamically from the spec — there are no hardcoded endpoint tables. Scripts also accept full endpoint paths from list_models.py --json output (e.g. --model /generate/image/google/imagen-4-ultra).
Scripts are in the scripts/ directory alongside this file. Run them with uv run from the user's working directory so output files are saved where the user expects.
Generate image:
bash
uv run ~/.codex/skills/krea/scripts/generate_image.py --prompt "your description" --filename "output.png" [--model nano-banana-2] [--width 1024] [--height 1024] [--api-key KEY]
Generate video:
bash
uv run ~/.codex/skills/krea/scripts/generate_video.py --prompt "your description" --filename "output.mp4" [--model veo-3.1-fast] [--duration 5] [--aspect-ratio 16:9] [--api-key KEY]
Enhance/upscale image:
bash
uv run ~/.codex/skills/krea/scripts/enhance_image.py --image-url "https://..." --filename "upscaled.png" --width 4096 --height 4096 [--enhancer topaz-standard-enhance] [--api-key KEY]
Train a LoRA style:
bash
uv run ~/.codex/skills/krea/scripts/train_style.py --name "my-style" --urls-file images.txt [--model flux_dev] [--type Style] [--trigger-word "mystyle"] [--api-key KEY]
List available models:
bash
uv run ~/.codex/skills/krea/scripts/list_models.py [--type image|video|enhance]
Run a multi-step pipeline:
bash
uv run ~/.codex/skills/krea/scripts/pipeline.py --pipeline pipeline.json [--api-key KEY]
Check job status:
bash
uv run ~/.codex/skills/krea/scripts/get_job.py --job-id "uuid" [--api-key KEY]
Important: Always run from the user's current working directory so files are saved where the user is working.
Goal: fast iteration without burning CU on expensive models until the prompt is right.
Draft (cheap/fast): use --model z-image or --model flux-1-dev (3-5 CU, ~5s) for quick iteration
bash
uv run ~/.codex/skills/krea/scripts/generate_image.py --prompt "<draft prompt>" --filename "yyyy-mm-dd-hh-mm-ss-draft.png" --model flux-1-dev
Iterate: adjust prompt, keep trying with cheap models
Final (high quality): switch to --model gpt-image or --model nano-banana-pro
bash
uv run ~/.codex/skills/krea/scripts/generate_image.py --prompt "<final prompt>" --filename "yyyy-mm-dd-hh-mm-ss-final.png" --model nano-banana-pro
Models, CU costs, and accepted body fields are fetched live from the Krea API's OpenAPI spec ( /openapi.json). Run list_models.py to see what's currently available:
bash
uv run ~/.codex/skills/krea/scripts/list_models.py # all models with params
uv run ~/.codex/skills/krea/scripts/list_models.py --type image # image models only
uv run ~/.codex/skills/krea/scripts/list_models.py --json # machine-readable
Short aliases (e.g. flux for flux-1-dev) are maintained for convenience. The scripts resolve them automatically via the spec. If a model isn't in the alias list, pass the full OpenAPI model ID or endpoint path.
Map user requests for images:
flux-1-dev or z-imagenano-banana-pro or gpt-imageideogram-3seedream-4 or nano-banana-pronano-banana-2Map user requests for video:
hailuo-2.3veo-3.1veo-3 with --generate-audioveo-3.1-fastEnhancers: topaz-standard-enhance (faithful upscaling, default), topaz-generative-enhance (creative enhancement), topaz-bloom-enhance (adding creative details).
ParamDescriptionDefault--modelModel ID or alias (run list_models.py)nano-banana-2``--promptText description (required)—--filenameOutput filename (required)—--widthWidth in pixels (512-4096)1024--heightHeight in pixels (512-4096)1024--aspect-ratioAspect ratio (1:1, 16:9, 9:16, 4:3, 3:2, etc.)—--resolution1K, 2K, 4K (nano-banana models)—--seedSeed for reproducibility—--image-urlInput image URL or local file path for image-to-image—--style-idLoRA style ID to apply—--style-strengthLoRA strength (-2 to 2)1.0--batch-sizeNumber of images (1-4)1--stepsInference steps, 1-100 (flux models)25--guidance-scaleGuidance scale, 0-24 (flux models)3--qualitylow/medium/high/auto (gpt-image)auto--output-dirOutput directorycwd--api-keyKrea API token—
ParamDescriptionDefault--modelModel ID or alias (run list_models.py)veo-3.1-fast``--promptText description (required)—--filenameOutput filename (required)—--durationDuration in seconds5--aspect-ratio16:9, 9:16, 1:116:9--start-imageURL or local file path for image-to-video—--end-imageEnd frame URL (kling only)—--resolution720p, 1080p (veo only)720p--modestd, pro (kling only)std--generate-audioGenerate audio (veo-3 only)false--output-dirOutput directorycwd--api-keyKrea API token—
ParamDescriptionDefault--enhancerEnhancer ID (run list_models.py --type enhance)topaz-standard-enhance``--image-urlSource image URL or local file path (required)—--filenameOutput filename (required)—--widthTarget width (required)—--heightTarget height (required)—--enhancer-modelSub-model variantStandard V2--creativity1-6 (generative) or 1-9 (bloom)—--face-enhancementEnable face enhancementfalse--sharpenSharpening 0-1—--denoiseDenoising 0-1—--scaling-factorUpscaling factor 1-32—--output-formatpng, jpg, webppng--output-dirOutput directorycwd--api-keyKrea API token—
ParamDescriptionDefault--nameStyle name (required)—--modelBase model: flux_dev, flux_schnell, wan, qwen, z-imageflux_dev``--typeLoRA type: Style, Object, Character, DefaultStyle``--urlsTraining image URLs (space-separated)—--urls-fileText file with one URL per line—--trigger-wordTrigger word to activate the LoRA in prompts—--learning-rateLearning rate0.0001--max-train-stepsMax training steps1000--batch-sizeTraining batch size1--timeoutPolling timeout in seconds3600--skip-validationSkip URL HEAD-check validationfalse--output-dirDirectory to save training manifest—--api-keyKrea API token—
Training requires 3-2000 images. The script validates all URLs before submitting. Training takes 15-45 minutes. On completion, the style ID is printed to stdout and a training-manifest.json is saved if --output-dir is set.
Use the style ID with --style-id in generate_image.py:
bash
uv run ~/.codex/skills/krea/scripts/generate_image.py --prompt "mystyle product on white background" --style-id "style_abc123" --model flux-1-dev --filename "branded.png"
Scripts check for API key in this order:
--api-key argument (use if user provided key in chat)KREA_API_TOKEN environment variableIf neither is available, the script exits with an error message.
Preflight:
command -v uv (must exist)test -n "$KREA_API_TOKEN" (or pass --api-key)Common failures:
Error: No API key → set KREA_API_TOKEN or pass --api-key402 Insufficient credits → top up compute units at https://krea.ai/settings/billing402 This model requires a higher plan → model needs a paid plan upgrade at https://krea.ai/settings/billing429 Too many requests → concurrent job limit reached; scripts auto-retry up to 3 times with backoffJob failed → check prompt for content moderation issues, try different wordingGenerate filenames with the pattern: yyyy-mm-dd-hh-mm-ss-name.ext
yyyy-mm-dd-hh-mm-ss (24h format).png for images, .mp4 for videosExamples:
2026-03-31-14-23-05-cyberpunk-cat.png2026-03-31-15-30-12-beach-waves.mp4For generation: Pass user's description as-is to --prompt. Only rework if clearly insufficient.
For image-to-image: Use --image-url with the source image and describe the desired transformation in --prompt.
For video from image: Use --start-image with the source image and describe the desired motion/action in --prompt.
Preserve user's creative intent in all cases.
--output-dir)--batch-size > 1, files are saved as name-1.png, name-2.png, etc.Quick draft image:
bash
uv run ~/.codex/skills/krea/scripts/generate_image.py --prompt "A serene Japanese garden with cherry blossoms" --filename "2026-03-31-14-23-05-japanese-garden.png"
High quality final:
bash
uv run ~/.codex/skills/krea/scripts/generate_image.py --prompt "A serene Japanese garden with cherry blossoms, golden hour lighting" --filename "2026-03-31-14-25-30-japanese-garden-final.png" --model nano-banana-pro --resolution 4K
Image-to-image edit:
bash
uv run ~/.codex/skills/krea/scripts/generate_image.py --prompt "transform to watercolor painting style" --filename "2026-03-31-14-30-00-watercolor.png" --image-url "https://example.com/photo.jpg" --model nano-banana-pro
Generate video:
bash
uv run ~/.codex/skills/krea/scripts/generate_video.py --prompt "A majestic eagle soaring over snow-capped mountains at sunrise" --filename "2026-03-31-15-00-00-eagle-mountains.mp4" --model veo-3 --duration 8 --generate-audio
Upscale image to 4K:
bash
uv run ~/.codex/skills/krea/scripts/enhance_image.py --image-url "https://example.com/photo.jpg" --filename "2026-03-31-15-10-00-upscaled.png" --width 4096 --height 4096 --enhancer topaz
Train a LoRA style:
bash
uv run ~/.codex/skills/krea/scripts/train_style.py --name "acme-brand" --model flux_dev --type Style --trigger-word "acmestyle" --urls-file brand-images.txt --output-dir output/acme-brand
List models:
bash
uv run ~/.codex/skills/krea/scripts/list_models.py --type image
For multi-step workflows (generate → enhance → animate, fan_out branching, template variables, parallel execution, resume, dry-run), see PIPELINES.md.
Quick example:
bash
uv run ~/.codex/skills/krea/scripts/pipeline.py --pipeline '{"steps":[{"action":"generate_image","prompt":"a cat astronaut","filename":"cat"},{"action":"enhance","use_previous":true,"enhancer":"topaz-standard-enhance","width":4096,"height":4096,"filename":"cat-4k"}]}'