Extensions/ComfyUI-Purz
ComfyUI Extension

ComfyUI-Purz

A comprehensive node pack for ComfyUI that provides powerful image effects, pattern generation, and animated pattern creation capabilities.

By purzbeats·Created about a year ago·Updated 3 months ago· 23
purzbeats/ComfyUI-Purz
Nodes27
On cloudLocal install
CategoryPurz/Patterns/Animated, Purz/Patterns/Basic
Stars23
Updated3 months ago
Readme

ComfyUI-Purz

A comprehensive node pack for ComfyUI that provides powerful image effects, pattern generation, and animated pattern creation capabilities. Perfect for creating dynamic textures, visual effects, and animated sequences.

<img width="3573" height="2177" alt="Example Workflow" src="https://github.com/user-attachments/assets/b9c4c61d-f5f1-49fb-84a9-f47b2f2c9e4a" />

✂️ What's new in v2.1.0

  • Image Crop + Video Crop — Standalone crop / resize nodes with a live preview canvas, a draggable green crop overlay, 14 aspect-ratio presets, and four fit modes (Stretch / Cover / Contain / Crop). Output: single IMAGE or single VIDEO. Each comes in two flavors: client-side (source file stays in the browser) and upload (persists across reloads, processed server-side).
  • Draggable crop overlay — Click and drag the green rectangle on any crop preview to position the crop window. Anchor + offset_x / offset_y update automatically so the workflow knows exactly where to crop.
  • Playback controls on every video preview — Extractor nodes get Play / Pause that drives the scrubber and commits the current frame on pause. Trim nodes get Play Loop, which auto-rewinds inside the trim handles so you can preview the segment exactly as it'll render.
  • Crop preview smoothness — Preview canvas capped at 720px (longest side) and driven by requestVideoFrameCallback so playback updates every frame, not every 250 ms. Server-side video resize switched to OpenCV (~10× faster than per-frame PIL).

🎬 What's new in v2.0.0

  • Media Extractor — Standalone "Load Video" node, scrub a local video, output a single chosen frame. Two flavors:
    • Media Extractor (Purz) — pure client-side; the video file never reaches the server. Only the chosen PNG is sent on commit.
    • Media Extractor Upload (Purz) — uploads to ComfyUI's input/ directory; selection persists across browser reloads.
  • Video Trim — Set in / out points on a video, output the trimmed segment as a VIDEO. Two flavors:
    • Video Trim (Purz) — client-side; trim segment is baked in-browser via MediaRecorder (webm vp9/vp8 + opus) and shipped up once. Source file stays local.
    • Video Trim Upload (Purz) — server-side VideoFromFile.as_trimmed() — lazy windowed read, no re-encode, instant.
  • Playback in every preview widget — Play / Pause that drives the scrubber; trim nodes get a Play-Loop that auto-rewinds inside the trim handles so you can preview the segment.
  • Pixelate node rewrite — Now a full retro-pixel pipeline: area / nearest / median downsampling, posterize + named palettes (Game Boy, NES, C64, PICO-8, CGA, Endesga 32), ordered Bayer + Floyd-Steinberg dithering, grid-line overlay, separate X/Y pixel sizes, optional MASK input.

🎚️ V3 Schema with Slider UI

All nodes now support ComfyUI's V3 schema with slider widgets for numeric inputs - providing a much better user experience than the default number pickers with increment buttons.

V3 Features:

  • Slider Controls - All numeric parameters use intuitive slider widgets
  • Auto-Detection - Automatically uses V3 when available, falls back to V1 for older ComfyUI versions
  • Animated Grain - New checkbox toggle for the Grain effect to enable animated film grain
  • Live Animation Preview - Effects with animation capabilities preview in real-time

🎬 Video Batch Processing

Apply real-time WebGL filters to entire video sequences! The Interactive Image Filter now fully supports batch processing, making it perfect for video workflows:

How It Works

  1. Load your video - Use any video loader node (like VHS) to load frames into ComfyUI
  2. Connect to Interactive Filter - Pipe your image batch into the Interactive Image Filter node
  3. Preview & adjust - Use the built-in playback controls to scrub through your video while adjusting filters in real-time
  4. Run the workflow - When you execute, all frames are automatically processed through WebGL and output as a filtered batch
  5. Combine with video output - Connect the output to any video combiner node to export your filtered video

Video Features

  • Frame Playback - Built-in play/pause and frame scrubber to preview your video
  • Adjustable FPS - Choose playback speed (6, 8, 12, 16, 24, 30, 48, 60 fps)
  • Live Preview - See filter effects applied in real-time as you scrub through frames
  • Automatic Processing - Backend waits for WebGL processing to complete before outputting
  • Chunked Upload - Large batches are uploaded efficiently in chunks to handle any video length

🚀 Features

🎛️ Interactive Media Nodes (v2.0.0+)

Eight standalone media nodes that load their own files. No upstream IMAGE batch or VHS loader required — every node has its own "Load …" button (client-side variant) or "Upload …" button (server-side variant that persists across browser reloads).

All four feature pairs share the same client-side / server-side split:

  • Client-side (Path A) — source file is wrapped in a blob URL and never reaches the server until you queue the workflow. Only the final result (a PNG, a webm, or a small JSON) hits the backend. Source state doesn't survive a browser refresh.
  • Upload (Path B) — source file goes into ComfyUI's input/ directory the moment you pick it. Workflow serializes the filename and the resize / trim parameters so reloading the page restores everything.

🎯 Media Extractor / Media Extractor Upload — frame picker

Load a video, scrub or play through it, hit pause on the frame you want. The selected frame becomes the IMAGE output.

📸 Add screenshot of Media Extractor node here

  • Built-in Play / Pause that drives the scrubber via requestVideoFrameCallback.
  • First / Last buttons jump to the first or last frame.
  • Pausing or releasing the scrubber commits the current frame.
  • Output: IMAGE ([1, H, W, 3] tensor).

✂️ Video Trim / Video Trim Upload — clip trimmer

Load a video, drag the dual-handle timeline to set in / out points. Hit Play Loop to preview the trim exactly as it'll render.

📸 Add screenshot of Video Trim node here

  • Dual-handle timeline with draggable start / end + click-to-seek + playhead.
  • Play Loop loops playback between the handles for accurate preview.
  • Auto-bake on Queue (Path A): backend signals the frontend, which encodes the trim as webm via MediaRecorder (audio preserved) and ships it up once. Re-queues with unchanged handles short-circuit instantly.
  • Server-side trim (Path B): VideoFromFile.as_trimmed(start, duration) — lazy windowed read, no re-encode, instant.
  • Output: VIDEO.

🖼️ Image Crop / Image Crop Upload (new in v2.1.0) — image crop / resize

Load an image, set the output dimensions, pick a fit mode, drag the green overlay to position the crop. Live preview shows the source with the crop region highlighted.

📸 Add screenshot of Image Crop node here

  • 14 aspect-ratio presets (1:1, 4:3, 3:4, 16:9, 9:16, 21:9, 9:21, 3:2, 2:3, 5:4, 4:5, 2:1, 1:2, Free).
  • Aspect change anchors the output's longest side to the source's longest side (no more 1920×4480 surprises for 9:21 on a 1080p source).
  • Four fit modes: Stretch (squish), Cover (anchor-positioned crop), Contain (letterbox with bg color), Crop (Cover plus manual zoom + offset).
  • Draggable green overlay — click and drag anywhere on the preview to move the crop window. Anchor snaps to center so offsets cover the full source extent.
  • Output: IMAGE.

🎥 Video Crop / Video Crop Upload (new in v2.1.0) — video crop / resize

Same UX as Image Crop, but for video. Plays with audio so you can preview the framing in motion.

📸 Add screenshot of Video Crop node here

  • Everything Image Crop has, plus playback.
  • Path A bakes the resized clip in-browser via <canvas> + MediaRecorder (audio passthrough). Bake duration ≈ playback duration of the clip.
  • Path B resizes server-side via OpenCV (cv2.INTER_AREA for downscale, cv2.INTER_LANCZOS4 for upscale) — fast on long clips.
  • Output: VIDEO.

🎛️ Interactive Image Filter

A powerful real-time image filter system with WebGL preview:

  • 120+ Filter Effects across 8 categories
  • Layer-Based System - Stack multiple effects with individual opacity
  • Drag & Drop Reordering - Easily rearrange effect layers
  • Real-Time Preview - See changes instantly via WebGL shaders
  • Effect Search + Favorites - Fuzzy search, star favorites, and recently used effects
  • Undo/Redo - Full undo/redo with Ctrl+Z / Ctrl+Shift+Z
  • A/B Split Preview - Draggable before/after comparison divider
  • Mask Support - Optional MASK input for selective filtering
  • Non-Destructive - Adjust filters without re-running the workflow
  • Pipeline Output - Filtered result outputs to the workflow for further processing
  • Video Batch Support - Process entire video sequences with playback preview
  • 40+ Built-in Presets - Professional presets for Film, Portrait, Landscape, B&W, Mood, Creative, Cinematic, Vintage, Stylized, and Enhancement styles
  • Custom Presets - Save and load your own effect combinations

Filter Categories:

  • Basic (16): Desaturate, Brightness, Contrast, Exposure, Gamma, Vibrance, Saturation, Lift, Gain, Offset, Auto Contrast, Normalize, Equalize, Solarize, Fade, Cross Process
  • Color (15): Hue Shift, Temperature, Tint, Colorize, Channel Mixer, Split Tone, Color Balance, Selective Color, HSL Adjust, Gradient Map, Color Lookup, Vibrance Pro, RGB Curves, CMYK Adjust, Color Harmony
  • Tone (16): Highlights, Shadows, Whites, Blacks, Levels, Curves, Tone Curve, HDR Tone, Shadow Recovery, Highlight Recovery, Midtone Contrast, Luminosity Mask, Zone System, Dynamic Range, Tone Split, Local Contrast
  • Detail (15): Blur, Sharpen, Unsharp Mask, Clarity, Dehaze, High Pass, Low Pass, Bilateral Filter, Surface Blur, Smart Sharpen, Micro Contrast, Texture Enhance, Noise Reduction, Detail Extract, Frequency Separation
  • Effects (17): Vignette, Grain, Posterize, Threshold, Invert, Sepia, Duotone, Light Leak, Lens Flare, Bokeh, Film Burn, Scratch, Dust, Water Droplets, Frosted Glass, Heat Distortion, CRT Scanlines
  • Artistic (14): Emboss, Edge Detect, Sketch, Oil Paint, Watercolor, Pencil Sketch, Charcoal, Woodcut, Linocut, Pop Art, Comic Book, Stained Glass, Mosaic, Pointillism
  • Creative (14): Pixelate, Chromatic Aberration, Glitch, Halftone, Mirror, Kaleidoscope, Tunnel, Ripple, Wave Distortion, Twirl, Spherize, Pinch, Stretch, Fisheye
  • Lens (13): Lens Distortion, Tilt Shift, Radial Blur, Depth of Field, Focus Stack, Miniature, Anamorphic, Barrel Distortion, Pincushion, Mustache Distortion, CA Red/Cyan, CA Blue/Yellow, Lens Vignette

📸 Image Effects

Transform your images with professional-grade effects:

  • Black & White Conversion - High-quality grayscale conversion using luminance weighting
  • Image Rotation - Rotate images with customizable background colors and transparency support
  • Blur Effects - Gaussian, box, and motion blur with adjustable intensity
  • Color Adjustments - Fine-tune brightness, contrast, and saturation
  • Image Flipping - Horizontal, vertical, and combined flipping options
  • Pixelate Effect (v2.0.0 rewrite) - Full retro-pixel pipeline: area / nearest / median downsampling, posterize + named palettes (Game Boy, NES, C64, PICO-8, CGA, Endesga 32), Bayer + Floyd-Steinberg dithering, grid lines, non-square pixels, optional MASK input
  • Edge Detection - Sobel, Canny, and Laplacian edge detection algorithms

🎨 Pattern Generation

Create stunning patterns from scratch:

  • Checkerboard - Classic checkerboard patterns with customizable colors and square sizes
  • Stripes - Horizontal, vertical, and diagonal stripe patterns
  • Polka Dots - Circular dot patterns with staggered and regular arrangements
  • Grid Patterns - Solid, dashed, and dotted grid overlays
  • Noise Patterns - Random, smooth, and cloudy noise generation
  • Gradients - Linear, radial, diagonal, and corner gradients

✨ Animated Patterns

Bring your patterns to life with mathematical precision:

  • Animated Checkerboards - Dynamic checkerboard patterns with wave modulation
  • Animated Stripes - Moving stripe patterns with various wave effects
  • Animated Polka Dots - Pulsating and morphing dot patterns
  • Animated Noise - Evolving noise patterns with temporal coherence

📦 Installation

  1. Navigate to your ComfyUI custom nodes directory:

    cd ComfyUI/custom_nodes/
    
  2. Clone this repository:

    git clone https://github.com/purzbeats/ComfyUI-Purz.git
    
  3. Install dependencies:

    cd ComfyUI-Purz
    pip install -r requirements.txt
    
  4. Restart ComfyUI

🎯 Node Categories

Purz/Interactive

  • Interactive Filter - Real-time layer-based image filter with 120+ effects, WebGL preview, and video batch support
  • Media Extractor - Load a video locally, scrub to a frame, output that single frame (client-side)
  • Media Extractor Upload - Same, but the video persists in input/ across reloads (server-side)
  • Video Trim - Load a video locally, set in/out points, output the trimmed VIDEO (client-side bake)
  • Video Trim Upload - Same, persistent across reloads, lazy VideoFromFile.as_trimmed() on the backend
  • Image Crop (v2.1.0) - Load an image locally, crop / resize with a draggable overlay, output IMAGE
  • Image Crop Upload (v2.1.0) - Same, persistent; server-side resize via PIL
  • Video Crop (v2.1.0) - Load a video locally, crop / resize with a draggable overlay, output VIDEO
  • Video Crop Upload (v2.1.0) - Same, persistent; server-side resize via OpenCV (per-frame)

Purz/Image/Color

  • Image to Black & White - Convert color images to grayscale
  • Color Adjust - Adjust brightness, contrast, and saturation

Purz/Image/Transform

  • Rotate Image - Rotate images with background options
  • Flip/Mirror Image - Flip images horizontally, vertically, or both

Purz/Image/Effects

  • Blur Image - Apply various blur effects
  • Pixelate Effect - Create pixelated effects
  • Edge Detection - Detect edges using multiple algorithms

Purz/Patterns/Basic

  • Checkerboard Pattern - Generate checkerboard patterns
  • Stripes Pattern - Create stripe patterns in multiple directions
  • Polka Dot Pattern - Generate polka dot patterns
  • Grid Pattern - Create grid overlays
  • Gradient Pattern - Generate gradient fills

Purz/Patterns/Noise

  • Simple Noise Pattern - Generate various noise types

Purz/Patterns/Animated

  • Animated Checkerboard - Dynamic checkerboard with wave modulation
  • Animated Stripes - Moving stripe patterns
  • Animated Polka Dots - Animated dot patterns
  • Animated Noise - Temporal noise patterns

🔧 Advanced Features

Mathematical Operations

The animated pattern nodes support advanced mathematical operations for texture combination:

  • Basic Operations: Add, Subtract, Multiply, Divide
  • Comparison: Minimum, Maximum, Greater Than, Less Than
  • Trigonometric: Sine, Cosine, Tangent
  • Advanced: Power, Modulo, Smooth Min/Max

Wave Generation

Multiple wave types and shapes for animation:

  • Wave Types: Sine, Cosine, Square, Triangle, Sawtooth
  • Directions: Horizontal, Vertical, Diagonal, Radial
  • Shapes: Sine, Square, Triangle wave shaping

Color Ramp Interpolation

Professional color interpolation methods:

  • Linear - Standard linear interpolation
  • Ease - Smooth step interpolation
  • B-Spline - Smooth B-spline curves
  • Cardinal - Cardinal spline interpolation
  • Constant - Hard transitions

💡 Usage Tips

  1. Video Workflows: Load video with VHS or similar, connect to Interactive Filter, preview with playback controls, then output to video combiner
  2. Batch Processing: All nodes support batch processing for multiple images and video frames
  3. Color Formats: Use hex color codes (e.g., #FF0000 for red) in pattern generators
  4. Animation: Set frame_count to create image sequences for video generation
  5. Performance: Lower resolution patterns render faster - upscale if needed
  6. Experimentation: Try different mathematical operations for unique effects

💾 Custom Presets

When you save custom presets in the Interactive Image Filter, they are stored as JSON files in:

ComfyUI/custom_nodes/ComfyUI-Purz/presets/

Important: If you uninstall or update this node pack, your custom presets may be deleted. Back up the presets/ folder before uninstalling to preserve your saved presets.

🛠️ Requirements

  • ComfyUI
  • PyTorch
  • NumPy
  • PIL (Pillow)
  • OpenCV (cv2)

📝 License

This project is open source. Feel free to use, modify, and distribute according to your needs.

🤝 Contributing

Contributions are welcome! Please feel free to submit pull requests or open issues for bug reports and feature requests.

📞 Support

If you encounter any issues or have questions, please open an issue on the GitHub repository.

🗺️ Roadmap

Future plans for ComfyUI-Purz:

  • [x] Custom WebGL Effects - Break out Interactive Image Filter effects into separate shader files, allowing users to create and share their own custom WebGL effects
  • [x] More Effects - Expanded to 120+ effects with 80 new shader effects in v1.5.0
  • [x] More Presets - Added 16 new presets (Cinematic, Vintage, Stylized, Enhancement)
  • [x] Layer Reordering - Drag and drop to re-arrange effect layers
  • [x] Effect Search + Favorites - Searchable effect picker with fuzzy search, favorites, and recently used
  • [x] Undo/Redo - Full undo/redo system with Ctrl+Z / Ctrl+Shift+Z
  • [x] A/B Split Preview - Before/after comparison with draggable divider
  • [x] Mask Support - Apply filter effects selectively using masks
  • [x] Media Extractor - Standalone video frame picker (v2.0.0)
  • [x] Video Trim - In/out point trimming with VIDEO output (v2.0.0)
  • [x] Pixelate Rewrite - Retro palettes, dithering, grid lines (v2.0.0)
  • [x] Image Crop + Video Crop - Standalone crop / resize nodes with live preview (v2.1.0)
  • [x] Draggable crop overlay - Position the crop window by dragging the green box (v2.1.0)
  • [x] Smooth video previews - rVFC-driven playback, capped preview canvas (v2.1.0)
  • [ ] Native UI Refactor - Refactor effects layers window to use native ComfyUI elements for proper resize on V1/V2

Creating Custom Effects

You can create your own WebGL filter effects:

  1. Copy shaders/custom/_template.glsl to a new file like shaders/custom/myeffect.glsl
  2. Edit the shader code (WebGL 1.0 GLSL)
  3. Optionally create shaders/custom/myeffect.json for custom parameters:
    {
      "name": "My Effect",
      "category": "Custom",
      "params": [
        { "name": "amount", "label": "Amount", "min": 0, "max": 1, "default": 0.5, "step": 0.01 }
      ]
    }
    
  4. Restart ComfyUI - your effect will appear in the dropdown

📋 Changelog

v2.1.0 (2026-05-19)

  • Image Crop + Image Crop Upload + Video Crop + Video Crop Upload — Four new standalone crop / resize nodes (Purz/Interactive). Each pair has a client-side variant (source stays in the browser, baked on Queue) and an upload variant (file lives in input/, processed server-side). Live preview canvas shows the full source with a green overlay marking the crop region; 14 aspect-ratio presets; four fit modes (stretch / cover / contain / crop).
  • Draggable crop overlay — Click and drag the green rectangle on any crop preview to position the crop window. Anchor snaps to center, offset_x / offset_y track the drag, the workflow stays in sync.
  • Playback controls on every video preview widget. Extractor nodes get Play / Pause that commits on pause. Trim nodes get Play Loop that auto-rewinds between the trim handles for accurate preview.
  • Preview performance — Canvas capped at 720px on its longest side, redrawn via requestVideoFrameCallback for per-frame updates during playback (was throttled to ~4 fps by timeupdate).
  • Server-side video resize switched from PIL Image.LANCZOS to OpenCV (cv2.INTER_AREA / cv2.INTER_LANCZOS4) with a single bulk uint8 conversion — roughly 10× faster on long clips.
  • Diagnostic + defensive fixes for the Path-A bake protocol: fsync after writing baked PNG / webm, small post-wait sleep before reading cached files, eager PIL decode to surface partial-write errors, hardened unique_id check, named print lines that pinpoint cache miss reasons.

v2.0.0 (2026-05-18)

  • Media Extractor + Media Extractor Upload — Standalone frame-picker nodes. Path A keeps the video file in the browser; only the chosen frame goes to the backend. Path B uploads to input/ for cross-reload persistence.
  • Video Trim + Video Trim Upload — Standalone trim nodes that output a VIDEO. Path A bakes the segment in-browser via MediaRecorder and auto-fires on Queue (no manual bake button). Path B uses VideoFromFile.as_trimmed() for instant lazy trims.
  • Playback in every video preview — Play / Pause that drives the scrubber on extractor nodes; Play Loop that auto-rewinds inside the trim handles on trim nodes. Click-anywhere-on-preview also toggles play.
  • Pixelate node rewrite — Full retro-pixel pipeline: area / nearest / median downsampling, posterize + 6 named palettes (Game Boy, NES, C64, PICO-8, CGA, Endesga 32), ordered Bayer + Floyd-Steinberg dithering, grid lines, separate X/Y pixel sizes, optional MASK input. Shared _pixelate_image() used by V1 and V3.

v1.8.0 (2026-02-05)

  • Effect Search + Favorites + Recently Used - Searchable effect picker with fuzzy search, star favorites, recently used section, collapsible categories, and keyboard navigation
  • Undo/Redo System - Full undo/redo with Ctrl+Z / Ctrl+Shift+Z, toolbar buttons, 50-state stack
  • A/B Split Preview - Draggable before/after divider on preview canvas; toggle between Split, Original, and Filtered views
  • Mask Support - Optional MASK input for selective filtering (per-pixel blend, works in V1 and V3)
  • Modular Frontend - Split monolithic JS into 5 ES modules for maintainability (zero behavior change)

v1.7.0 (2026-02-05)

  • Code Quality Refactor - Major internal cleanup with no user-facing behavior changes
    • Extracted shared utils.py module consolidating 10 duplicate helper implementations
    • Reduced V3 Interactive Filter from 657 lines to 51 lines by eliminating duplicated code
    • Replaced 400-line if/elif filter chain with clean registry-based dispatch pattern
    • Correct V3 API usage (cls.hidden.unique_id) replaces hacky fallback logic
  • Performance - Vectorized HSV conversion for hueShift and colorize effects (massive speedup on large images)

v1.6.1 (2025-01-26)

  • Memory Leak Fix - Interactive Filter now properly cleans up WebGL resources when node is deleted
  • DOM Widget Overflow Fix - UI controls no longer break out of node bounds in LiteGraph
  • Batch Processing Timing Fix - Frames are now properly processed through filters before output (fixes race condition)

v1.6.0 (2025-12-08)

  • V3 Schema Support - All nodes now use ComfyUI V3 schema with slider widgets for better UX
    • Slider controls for all numeric inputs (brightness, contrast, angles, sizes, etc.)
    • Auto-detects V3 API availability, falls back to V1 for older ComfyUI
    • New V3 files: image_effects_v3.py, pattern_generators_v3.py, animated_patterns_v3.py, interactive_filters_v3.py
  • Animated Grain - New checkbox toggle to enable animated film grain effect
  • Live Animation Preview - Effects with animation now preview continuously in real-time
  • Fixed - Single image processing now works correctly

v1.5.0 (2025-12-08)

  • 80 New Shader Effects - Massive expansion to 120+ total effects
    • Basic: Lift, Gain, Offset, Auto Contrast, Normalize, Equalize, Solarize, Fade, Cross Process
    • Color: Split Tone, Color Balance, Selective Color, HSL Adjust, Gradient Map, Color Lookup, Vibrance Pro, RGB Curves, CMYK Adjust, Color Harmony
    • Tone: Tone Curve, HDR Tone, Shadow Recovery, Highlight Recovery, Midtone Contrast, Luminosity Mask, Zone System, Dynamic Range, Tone Split, Local Contrast
    • Detail: High Pass, Low Pass, Bilateral Filter, Surface Blur, Smart Sharpen, Micro Contrast, Texture Enhance, Noise Reduction, Detail Extract, Frequency Separation
    • Effects: Light Leak, Lens Flare, Bokeh, Film Burn, Scratch, Dust, Water Droplets, Frosted Glass, Heat Distortion, CRT Scanlines
    • Artistic: Watercolor, Pencil Sketch, Charcoal, Woodcut, Linocut, Pop Art, Comic Book, Stained Glass, Mosaic, Pointillism
    • Creative: Mirror, Kaleidoscope, Tunnel, Ripple, Wave Distortion, Twirl, Spherize, Pinch, Stretch, Fisheye
    • Lens: Depth of Field, Focus Stack, Miniature, Anamorphic, Barrel Distortion, Pincushion, Mustache Distortion, CA Red/Cyan, CA Blue/Yellow, Lens Vignette
  • 16 New Presets - Cinematic (Blockbuster, Noir, Sci-Fi, Horror), Vintage (Kodachrome, Polaroid, 70s, Daguerreotype), Stylized (Neon Nights, Anime, Watercolor Dream, Comic), Enhancement (Portrait Pro, Landscape HDR, Detail Pop, Auto Fix)
  • Layer Reordering - Drag and drop layers with visual indicators
  • Fixed - Custom shaders now work correctly in video batch processing

v1.4.0 (2025-12-08)

  • NEW: Custom WebGL Effects - Create and share your own filter effects
    • 42 built-in shaders extracted to shaders/ directory for reference
    • Custom shaders go in shaders/custom/ with optional .json metadata
    • Template provided at shaders/custom/_template.glsl
    • Backend API endpoints for dynamic shader loading

v1.3.0 (2025-12-08)

  • NEW: Video Batch Processing - Full support for processing video sequences
    • Built-in playback controls with play/pause, frame scrubber, and FPS selection
    • Real-time preview of filters on video frames as you scrub through
    • Automatic WebGL batch processing when workflow executes
    • Backend synchronization ensures all frames are processed before output
    • Chunked upload system handles large video batches efficiently
    • Works seamlessly with video loader/combiner nodes (VHS, etc.)

v1.2.0 (2025-12-08)

  • NEW: Preset System for Interactive Image Filter
    • 25 built-in professional presets across 6 categories (Film, Portrait, Landscape, Black & White, Mood, Creative)
    • Save custom presets as JSON files in the presets/ folder
    • Load presets instantly via dropdown menu
    • Presets are portable and can be shared between installations

v1.1.0 (2025-12-07)

  • NEW: Interactive Image Filter - A powerful layer-based real-time filter system
    • 42 filter effects across 8 categories (Basic, Color, Tone, Detail, Effects, Artistic, Creative, Lens)
    • Real-time WebGL preview - see changes instantly without re-running workflow
    • Layer system with per-layer opacity control
    • Stack multiple effects for complex adjustments
    • Filtered output pipes directly into workflow for further processing
    • Save button to export filtered images directly to output folder

v1.0.1

  • Initial release with image effects, pattern generation, and animated patterns