oiiotool
Image processing with oiiotool CLI — format conversion (EXR, TIFF, DPX, PNG, JPEG, HDR), OCIO/ACES color management and display transforms, exposure adjustment, resize/crop, compositing, EXR sequence to video, texture baking, image comparison, and batch/sequence operations. Use when working with image files, EXR sequences, color spaces, or HDR content.
What this skill does
# oiiotool Skill Command-line image processing with [OpenImageIO's oiiotool](https://docs.openimageio.org). Industry-standard tool used across VFX, CGI, game dev, and photography for format conversion, color management, compositing, and batch image operations. ## Setup ```bash pip install openimageio ``` This installs both the `oiiotool` CLI and the `OpenImageIO` Python module. Verify: ```bash oiiotool --version oiiotool --list-formats ``` ### OCIO / ACES Configuration oiiotool uses OpenColorIO for color management. **Since OCIO 2.2+, built-in ACES configs are available — no file download needed:** ```bash # Use built-in ACES CG config (recommended for most users) export OCIO=ocio://cg-config-latest # Or specify per-command oiiotool --colorconfig ocio://cg-config-latest input.exr ... ``` Available built-in configs: - `ocio://cg-config-latest` — CG-focused config (no camera color spaces, lean). Recommended. - `ocio://studio-config-latest` — Full studio config (includes camera color spaces). - `ocio://cg-config-v4.0.0_aces-v2.0_ocio-v2.5` — Pin to a specific version. For production studios with a custom config: ```bash export OCIO=/path/to/studio_config.ocio ``` Check what's available: ```bash oiiotool --colorconfiginfo ``` ## Core Concept: Stack-Based Processing oiiotool processes commands **left to right** on a stack: - Naming a file **pushes** it onto the stack - Commands **pop** inputs, process, and **push** results - `-o` writes the top of stack to a file ```bash # Read -> process -> write oiiotool input.exr --resize 1920x1080 -o output.png # Two images -> composite -> write oiiotool fg.exr bg.exr --over -o comp.exr ``` ## File Info & Metadata ```bash # Basic info (resolution, channels, format) oiiotool --info input.exr # Verbose info (all metadata) oiiotool --info -v input.exr # Pixel statistics (min, max, mean, stddev per channel) oiiotool --stats input.exr # Filter metadata with regex oiiotool --info -v --metamatch "camera|lens" input.exr ``` ## Format Conversion Supported formats: EXR, TIFF, PNG, JPEG, DPX, HDR (Radiance), BMP, TGA, GIF, WebP, JPEG2000, PSD, ICO, FITS, and more. ```bash # Simple conversion (format inferred from extension) oiiotool input.exr -o output.png oiiotool input.dpx -o output.tiff oiiotool input.hdr -o output.exr # Control output bit depth oiiotool input.exr -d uint8 -o output.png # 8-bit oiiotool input.exr -d uint16 -o output.png # 16-bit oiiotool input.exr -d half -o output.exr # 16-bit float (half) oiiotool input.exr -d float -o output.tiff # 32-bit float # JPEG quality oiiotool input.exr -d uint8 --compression jpeg:95 -o output.jpg # EXR compression types oiiotool input.exr --compression zip -o output.exr # lossless, good general oiiotool input.exr --compression piz -o output.exr # lossless, best for noisy/CG oiiotool input.exr --compression zips -o output.exr # lossless, scanline oiiotool input.exr --compression dwaa:45 -o output.exr # lossy, very small files # Tiled vs scanline EXR oiiotool input.exr --tile 64 64 -o output.exr oiiotool input.exr --scanline -o output.exr # Add dither when going from high bit depth to 8-bit (reduces banding) oiiotool input.exr -d uint8 --dither -o output.png ``` ### Production Tip: Selective Channel Reading For large multichannel EXRs (beauty + depth + normals + crypto), read only what you need to save memory and time: ```bash # Read only R,G,B channels (skip depth, normals, cryptomatte, etc.) oiiotool -i:ch=R,G,B input.exr -o output.png # Combined with conversion and color management oiiotool -i:ch=R,G,B input.exr --resize 1024x0 --colorconvert "ACES2065-1" "Rec.1886 Rec.709 - Display" --compression "jpeg:90" -o output.jpg ``` This is critical in production where EXRs can have 50+ channels and be hundreds of MB each. ## Color Management (OCIO) ### Color Space Conversion ```bash # Convert between named color spaces oiiotool input.exr --colorconvert ACEScg "sRGB - Texture" -o output.png oiiotool input.exr --colorconvert linear srgb -o output.png oiiotool input.exr --tocolorspace "sRGB - Texture" -o output.png # Set the assumed input color space (without changing pixels) oiiotool input.png --iscolorspace srgb --tocolorspace linear -o linear.exr ``` ### ACES Display Transforms (Tone Mapping) The proper way to view HDR content. Applies the ACES Reference Rendering Transform (RRT) + Output Device Transform (ODT) for correct highlight rolloff: ```bash # sRGB monitor (most common for web/review) oiiotool input.exr --ociodisplay "sRGB - Display" "ACES 1.0 - SDR Video" -d uint8 -o output.png # Rec.709 broadcast oiiotool input.exr --ociodisplay "Rec.1886 Rec.709 - Display" "ACES 1.0 - SDR Video" -d uint8 -o output.png # DCI-P3 cinema oiiotool input.exr --ociodisplay "P3-D65 - Display" "ACES 1.0 - SDR Cinema" -d uint8 -o output.png # HDR (1000 nits, PQ) oiiotool input.exr --ociodisplay "Rec.2100-PQ - Display" "ACES 1.1 - HDR Video (1000 nits & Rec.2020 lim)" -d uint16 -o output.png # Un-tone-mapped (linear to display, no RRT — useful for comparing raw values) oiiotool input.exr --ociodisplay "sRGB - Display" "Un-tone-mapped" -d uint8 -o output.png ``` > **When to use display transforms vs colorconvert:** Use `--ociodisplay` when converting HDR scene-referred data to a display for viewing (applies tone mapping). Use `--colorconvert` when converting between working color spaces (no tone mapping, preserves linearity). ### OCIO Looks & File Transforms ```bash # Apply an OCIO look (e.g., ACES gamut compression) oiiotool input.exr --ociolook "ACES 1.3 Reference Gamut Compression" -o output.exr # Apply a file-based transform (3D LUT, CDL, CLF) oiiotool input.exr --ociofiletransform my_grade.cube -o output.exr # Inverse oiiotool input.exr --ociofiletransform:inverse=1 my_grade.cube -o output.exr ``` ### Manual Matrix Color Conversion When you don't have OCIO or need a specific 3x3 matrix: ```bash # ACEScg to linear sRGB (comma-separated, row-major) oiiotool input.exr --ccmatrix "1.70505,-0.62179,-0.08326,-0.13026,1.14080,-0.01055,-0.02400,-0.12897,1.15297" -o output.exr ``` ## Exposure Adjustment EXR stores linear light values. Exposure in stops is powers of 2: ```bash # Lower exposure (darken) — reveal HDR highlights oiiotool input.exr --mulc 0.0625 -o output.exr # -4 stops oiiotool input.exr --mulc 0.0078125 -o output.exr # -7 stops # Raise exposure (brighten) — reveal shadow detail oiiotool input.exr --mulc 4 -o output.exr # +2 stops oiiotool input.exr --mulc 16 -o output.exr # +4 stops # Fractional stops oiiotool input.exr --mulc 0.00407 -o output.exr # -7.6 stops ``` **Exposure + ACES display transform** (most useful combo for HDR review): ```bash oiiotool input.exr --mulc 0.0078125 --ociodisplay "sRGB - Display" "ACES 1.0 - SDR Video" -d uint8 -o output_exp-7.png ``` ### Exposure Reference Table | Stops | Multiplier | Formula | Use Case | |-------|-----------|---------|----------| | +8 | 256 | 2^8 | Deep shadow recovery | | +6 | 64 | 2^6 | Dark shadow detail | | +4 | 16 | 2^4 | Shadow detail | | +2 | 4 | 2^2 | Slight brighten | | 0 | 1 | 2^0 | Native exposure | | -2 | 0.25 | 2^-2 | Slight darken | | -4 | 0.0625 | 2^-4 | Highlight recovery | | -6 | 0.015625 | 2^-6 | Bright highlight detail | | -8 | 0.00390625| 2^-8 | Extreme highlight recovery | ## Ready-Made Scripts ### Exposure Sweep Generate a composite contact sheet of multiple exposures from an HDR EXR: ```bash python scripts/exposure_sweep.py input.exr python scripts/exposure_sweep.py input.exr --stops -8,-6,-4,-2,0,2,4,6,8 python scripts/exposure_sweep.py input.exr --display "sRGB - Display" --view "ACES 1.0 - SDR Video" python scripts/exposure_sweep.py input.exr --cols 4 --output sweep.jpg ``` ### EXR Sequence to Video Convert an EXR image sequence to MP4: ```bash python sc
Related in Ads & Marketing
ads
IncludedMulti-platform paid advertising audit and optimization skill. Analyzes Google, Meta, YouTube, LinkedIn, TikTok, Microsoft, and Apple Ads. 250+ checks with scoring, parallel agents, industry templates, and AI creative generation.
banana
IncludedAI image generation Creative Director powered by Google Gemini Nano Banana models. Use this skill for ANY request involving image creation, editing, visual asset production, or creative direction. Triggers on: generate an image, create a photo, edit this picture, design a logo, make a banner, visual for my anything, and all /banana commands. Handles text-to-image, image editing, multi-turn creative sessions, batch workflows, and brand presets.
rpg-migration-analyzer
IncludedAnalyzes legacy RPG (Report Program Generator) programs from AS/400 and IBM i systems for migration to modern Java applications. Extracts business logic from RPG III/IV/ILE source code, identifies data structures (D-specs), file operations (F-specs), program dependencies (CALLB/CALLP), and converts RPG constructs to Java equivalents. Generates migration reports, complexity estimates, and Java implementation strategies with POJO classes, JPA entities, and service methods. Use when modernizing AS/400 or IBM i legacy systems, analyzing RPG source files (.rpg, .rpgle, .RPGLE), converting RPG to Java, mapping data specifications to Java classes, planning legacy system migration, or when user mentions RPG analysis, Report Program Generator, RPG III/IV/ILE, AS/400 modernization, IBM i migration, packed decimal conversion, or mainframe application rewrite.
brand-library-architect
IncludedBuild a complete brand library for a product — visual asset render pipeline, brand documentation set (BRAND, COPY, MANIFESTO, BIOS, FAQ, GLOSSARY, TONE, PRICING), open-source convention files (README, CONTRIBUTING, SECURITY, CODE_OF_CONDUCT), and a self-contained press kit. This skill should be used when the user asks to "build a brand library / brand kit / press kit / brand assets" for a product, "set up a brand library workflow," "create a positioning manifesto plus visual identity," or any combination of brand documentation + visual asset pipeline. Apply phase-by-phase or run end-to-end. Templates are product-agnostic and use {{TOKEN}} placeholders the skill prompts the user to fill.
writing-tech-post
IncludedAuthors engineering blog posts end-to-end: launch deep-dives, incident postmortems, architecture migrations, performance case studies, tutorials, AI/agent system writeups, security disclosures, and research-to-product translations. Picks the correct archetype, plans the abstraction ladder, enforces an evidence cadence (diagrams, benchmarks, profiles, traces, code, ablations), tunes voice against publisher house styles (Datadog, Vercel, GitHub, AWS, Meta, Cloudflare, Jane Street), and runs a pre-publish gate for narrative momentum and disclosure ethics. Use when drafting a new engineering post, restructuring a draft that feels flat, deciding which evidence form belongs where, validating that depth and product context are balanced, or preparing a postmortem, migration, or performance narrative for external publication. Do not use for API reference documentation, README authoring, marketing copy, release notes, generic SEO content, ghost-written executive thought leadership, or non-engineering long-form essays.
blog-google
IncludedGoogle API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity analysis for E-E-A-T, YouTube video search for embedding, and Google Ads Keyword Planner. Progressive feature availability based on credential tier (API key, OAuth/service account, GA4, Ads). Shares config with claude-seo at ~/.config/claude-seo/google-api.json. Use when user says "google data", "page speed", "core web vitals", "search console", "indexation", "GA4", "keyword research", "nlp entities", "blog performance", "youtube search", "google api setup".