Skip to main content

CLI tool for batch rendering AI image prompts from markdown files

Project description

Batch Renderer

A CLI tool for batch rendering AI image prompts from markdown files using the Poe API.

For AI image generation workflows: Write prompts in markdown, push to GitHub, and let Actions automatically render and commit the images. No local setup required.

Features

  • 📝 Extract prompts from markdown files using configurable patterns
  • 🎨 Batch render images using multiple AI models (GPT-Image-1, Nano-Banana, Flux, etc.)
  • 📦 Nested or flat output structure organized by sections
  • 🎯 Per-prompt metadata to override model, quality, aspect ratio, etc.
  • 🔄 Automatic retries on errors with loud failures
  • 📊 Rich CLI interface with progress bars and colored output
  • Dry-run mode to preview extraction before rendering
  • ⚙️ TAG LIBRARY for reusable prompt components (ADR-0006)
  • 🤖 GitHub Actions integration for automated rendering
  • 🖼️ LLM Gallery generation for multimodal review (ADR-0014)

Installation

For end users (recommended)

pip install batch-renderer

Version pinning recommended: Pin to a specific major.minor version to avoid breaking changes:

# Pin to 1.7.x series (recommended)
pip install "batch-renderer>=1.7,<1.8"

# Or pin to exact version
pip install batch-renderer==1.7.1

For GitHub Actions and CI, always pin — see the batch-renderer-action docs.

For development

# Clone the repository
cd batch-renderer

# Install dependencies
pipenv install

# Install the package in editable mode
pipenv install -e .

Quick Start

Recommended: GitHub Actions (CI-first)

The primary consumer workflow — write prompts locally, let GitHub Actions render automatically:

  1. Use the template: Visit https://github.com/jlumbroso/batch-renderer-template and click "Use this template"
  2. Add your Poe API key as a repository secret:
    • Settings → Secrets and variables → Actions
    • New repository secret: POE_API_KEY = your key from https://poe.com/api_key
  3. Write prompts in prompts/ (markdown files with TAG LIBRARY — see template examples)
  4. Push to GitHub:
    git add prompts/my-prompts.md
    git commit -m "feat: add new prompts"
    git push
    
    GitHub Actions automatically renders images and commits them to output/

View progress: Actions tab → "Generate Images" workflow

Alternative: Local CLI

For quick testing or one-off renders without CI:

# Install (if you haven't already)
pip install batch-renderer

# Set your API key
export POE_API_KEY=your_api_key_here

# Render images
batch-renderer prompts.md --no-confirm

# Preview extraction without rendering
batch-renderer prompts.md --dry-run

Note: For production workflows, use the GitHub Actions template above (handles secrets, retries, galleries, Git LFS).

For Contributors

Hacking on batch-renderer itself? See CONTRIBUTING.md for:

  • Development setup (pipenv, .env, local testing)
  • Release process and commit conventions
  • Architecture overview and ADR guidelines

Markdown Format

Basic Format

## 1. Section Title

### Concept 1.1: Image Title
A detailed description of the image you want to generate...

### Concept 1.2: Another Image
Another prompt description...

With Metadata

Add metadata as bullet points after the heading to override settings:

### Concept 1.1: Custom Image
- model: GPT-Image-1
- aspect: 16:9
- quality: high
- retries: 5

A detailed prompt for the image...

Standard Metadata Keys

  • model - Override the model for this prompt (e.g., GPT-Image-1, Nano-Banana)
  • format - Override output format (e.g., png, jpg)
  • skip - Set to true to skip this prompt
  • retries - Number of retry attempts (default: 3)

Custom Metadata Keys

Any other keys are passed directly to the API via extra_body:

  • aspect - Aspect ratio (1:1, 3:2, 2:3, 16:9, auto)
  • quality - Image quality (low, medium, high)
  • thinking_level - For thinking models (low, medium, high)
  • thinking_budget - Thinking budget (extended)
  • web_search - Enable web search (true / false)

CLI Usage

batch-renderer [OPTIONS] INPUT_FILE

Options

Option Description Default
--model, -m Model to use Nano-Banana (or POE_DEFAULT_MODEL env)
--output, -o Output directory out
--pattern, -p Extraction pattern (concept, numbered, simple) concept
--format, -f Output image format png
--flatten Flatten output (no subdirectories) false
--dry-run Extract and display without rendering false
--no-confirm Skip confirmation prompt false
--cache-images Cache images in logs/image_cache false
--validation-mode Metadata validation (strict, lenient, hybrid) hybrid
--api-key Poe API key (or POE_API_KEY env) -

Examples

Basic usage:

batch-renderer prompts.md

Use a specific model:

batch-renderer prompts.md --model GPT-Image-1

Flat output structure:

batch-renderer prompts.md --flatten

Dry run to preview:

batch-renderer prompts.md --dry-run

Batch render without confirmation:

batch-renderer prompts.md --no-confirm

Strict metadata validation:

batch-renderer prompts.md --validation-mode strict

Output Structure

Nested (default)

out/
  1-artificial-lovers/
    concept-1-1-blade-runner-noir-romance.png
    concept-1-2-holographic-love.png
  2-fantastic-eight/
    concept-2-1-renaissance-group-portrait.png

Flattened (with --flatten)

out/
  concept-1-1-blade-runner-noir-romance.png
  concept-1-2-holographic-love.png
  concept-2-1-renaissance-group-portrait.png

Configuration Precedence

Settings are applied in this order (later overrides earlier):

  1. Hard-coded defaults (Nano-Banana, png, etc.)
  2. Environment variables (POE_DEFAULT_MODEL, POE_API_KEY)
  3. Inline metadata (in markdown file)
  4. CLI arguments (--model, --format, etc.)

Validation Modes

hybrid (default)

  • Standard keys (model, format, skip, retries): Warns on malformed values
  • Custom keys: Pass through without validation

strict

  • Standard keys: Fails on malformed values
  • Custom keys: Pass through without validation

lenient

  • All keys: Warns only, never fails

Error Handling

  • Automatic retries: Failed requests are retried 3 times by default (configurable per-prompt)
  • Text responses: If model returns text instead of image, saves to .txt file with warning
  • Partial failures: Continues rendering remaining prompts if one fails
  • Summary report: Shows successful, text responses, and failed renders

Pattern Types

concept (default)

Extracts ### Concept X.Y: Title style prompts with section headers.

numbered

Extracts ### X.Y Title style prompts (no "Concept" keyword).

simple

Extracts all level-3 headings as prompts.

Environment Variables

For GitHub Actions: Set POE_API_KEY as a repository secret (see Quick Start above).

For local CLI:

# Set in your shell (recommended)
export POE_API_KEY=your_api_key_here
export POE_DEFAULT_MODEL=Nano-Banana  # optional

For contributors (development): Create a .env file — see CONTRIBUTING.md.

Contributing

Hacking on batch-renderer itself? See CONTRIBUTING.md for:

  • Development setup: pipenv, .env, editable install
  • Project structure: source layout, backend architecture
  • Testing: pytest suite, test patterns
  • Release process: semantic-release automation, commit format
  • ADR conventions: Architecture Decision Records
  • Pull request guidelines

The Quick Start above is for using batch-renderer in your projects. CONTRIBUTING.md is for developing the CLI tool itself.

Architecture Decisions

See docs/adr/ for detailed design decisions:

Troubleshooting

"POE_API_KEY not found"

Make sure you've created a .env file with your API key, or pass it via --api-key.

"No prompts found in file"

Check that your markdown file uses the correct pattern format. Use --dry-run to debug extraction.

Model returns text instead of image

This can happen if:

  • The model doesn't support image generation
  • The model name is incorrect
  • The prompt is ambiguous

The tool will save the text response to a .txt file for inspection.

License

MIT

Author

Jérémie Lumbroso with Claude Sonnet 4.5 Additional contributions from Claude Opus 4.8 and Claude Fable 5

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

batch_renderer-1.9.0.tar.gz (63.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

batch_renderer-1.9.0-py3-none-any.whl (60.9 kB view details)

Uploaded Python 3

File details

Details for the file batch_renderer-1.9.0.tar.gz.

File metadata

  • Download URL: batch_renderer-1.9.0.tar.gz
  • Upload date:
  • Size: 63.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for batch_renderer-1.9.0.tar.gz
Algorithm Hash digest
SHA256 d8435ec804d4aad1fc9616b686c37614ebd961ada1f75ad7660ed453630d2afb
MD5 2f7842b9dad85410e2e82142d6795e2e
BLAKE2b-256 edf1a589d6b4e0b171cc3bab54f971d39592e1fd495a82fa101c8df0bd08b186

See more details on using hashes here.

Provenance

The following attestation bundles were made for batch_renderer-1.9.0.tar.gz:

Publisher: release.yml on jlumbroso/batch-renderer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file batch_renderer-1.9.0-py3-none-any.whl.

File metadata

  • Download URL: batch_renderer-1.9.0-py3-none-any.whl
  • Upload date:
  • Size: 60.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for batch_renderer-1.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2d1c9dc4c0782d1b953871642a4267b35b319060472e84b3ffb09d99471d1cce
MD5 0489f2a2671348e0b0d4b448d0cb3543
BLAKE2b-256 877a249853a17dc37daf79ecc22c85ef834815d7a6dfb0ac72b281ee07500eab

See more details on using hashes here.

Provenance

The following attestation bundles were made for batch_renderer-1.9.0-py3-none-any.whl:

Publisher: release.yml on jlumbroso/batch-renderer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page