- Add ImageOpsCropStitch node for cropping and stitching images
- Update ImageOpsCrop node to include a crop mask output
- Implement crop region mask generation for improved cropping functionality
- Update related metadata and widget configuration for new and updated nodes
- Add { passive: false } to event listeners for better control
- Remove color swatches and related logic from constant node
- Reset view instead of fit all in pad-out node
- Refine pan and zoom interactions in preview navigation
- Stop unnecessary event propagation in some cases
- Updated multiple instances in keyer.ts, nodestream.ts, and ops.ts to use the `willReadFrequently: true` option when obtaining 2D rendering contexts from HTMLCanvasElement. This change aims to improve performance when reading pixel data frequently.
- Enhanced navigation.ts to support aborting wheel event listeners using an AbortController.
- Modified state.ts and types.ts to include an optional AbortController in the NodeState interface for better management of event listeners.
Remove NATIVE_NUMERIC_WIDGET_NAMES exclusion list (rotate_deg, scale, strength, width, height, rotate). Excluded widgets were left visible as native LiteGraph sliders at the bottom of nodes, creating vertical empty space and duplicate UI (notably CameraShake/Transform/Spherize). Also includes prior session work: P1-P4 UX improvements, video preview anti-blink/anti-stutter fixes in source.ts, README and REFACTO docs cleanup.
- Implement global, shadows, midtones, and highlights zones for color correction
- Add brightness, contrast, saturation, vibrance, and gamma controls per zone
- Include temperature and tint adjustments with improved hue adjustment range
- Introduce soft brush drawing feature with adjustable softness
- Enhance draw tool with improved cursor feedback and eraser functionality
- Optimize performance with requestAnimationFrame for certain interactions
- Refactor color correction widget synchronization and reset logic
- Wheel zoom and pan on middle-click stopped working due to recent
changes in Node's graph canvas container.
- Implement capture-phase wheel event handling on the document to
regain control of preview zoom independent of Node version.
- Add safety checks against zero-size or detached canvases.
- Ensure pointer events reach preview canvases even if parent
containers have pointer-events:none applied.
- Improve compatibility with Node 2.0 by adding fallbacks for
widgets without proper addDOMWidget support.
- Add a check for IMAGEOPS_CLASSES before auto-expanding image nodes
- This prevents auto-expanding for nodes that aren't in the IMAGEOPS_CLASSES set
- Applies to both JS and TypeScript versions of the code
- Implement spherize, fisheye, defisheye, latlong, and unlatlong transformations
- Add support for custom strength and invert options
- Update pad out functionality with improved bounds drawing and source handling
- Fix color widget type in corner pin node
- Add sync_dimensions toggle to crop node for linked/free aspect ratio
- Add new color correction parameters: tint, vibrance, shadows, midtones, highlights
- Remove padOutStitcher and related functions
- Update color correction wheel and widget interactions
- Modify renderColorCorrect to include new parameters
- Improve syncColorCorrectWidgets to handle new parameters
- Implement bicubic interpolation function for smoother image resampling
- Add logic to switch between nearest, bilinear, and bicubic sampling methods
- Update both Python and JavaScript implementations for consistency
- Modify safe denominator calculation to preserve sign for negative values
- Optimize Perlin noise gradient calculations by using precomputed tables
- Reduce canvas resolution for noise node previews to match canvas size
- Implement screen-to-world coordinate conversion for consistent zoom/pan across widgets
- Remove unused renderNonce from NodeState
- Implement corner pin controls for composition layers
- Add functions to handle corner pin normalization and validation
- Update composition layer serialization and deserialization to include corner pin data
- Modify comp layer rect calculation to support corner pin
- Add utility functions for link handling in the graph
- Implement new ImageOpsPadOutStitch node in Python and JavaScript
- Add stitching functionality to combine original and outpainted areas
- Introduce feathering option for smooth transitions between areas
- Update adapter and ops to support new node in both environments
- Extend preview host to recognize and process new node type
- Added drawOverlayFormatSelect, drawPressureSizeInput, drawPressureOpacityInput, and drawTiltSizeInput to NodeState for enhanced drawing options.
- Introduced bbox property in CropPreviewGeometry to provide detailed bounding box information for cropping functionality.
- Implemented `ImageOpsPadOut` for adding padding to images with customizable padding values and fill color.
- Implemented `ImageOpsCornerPin` for applying corner pin transformations to images, allowing for perspective adjustments.
- Added helper functions for rendering padded canvases and corner pin transformations in the preview.
- Updated type definitions to include new states and geometry for corner pin and pad out operations.
- Enhanced the main operations file to support new image operations and their respective masks.
- Implemented `imageToMaskPreviewCanvas` function to convert images to mask previews based on alpha values.
- Updated `renderCompPreview` to support additional parameters for center positioning and rotation of layers.
- Modified `buildRenderer` to utilize `getInputOriginSlot` for improved input handling.
- Enhanced `NodeState` interface with additional properties for drawing and color management.
- Expanded `CropDragMode` and `CompDragMode` types to include new drag options.
- Replace queue.shift() with index pointer in resolveNodeStreamPreview to reduce O(n) complexity.
- Introduce MaskCanvas type and caching mechanisms for prepared mask canvases in ops.ts.
- Enhance fitCanvas to check for prepared mask canvases and mark them accordingly.
- Update extractCanvasField to utilize caching for performance improvements.
- Refactor renderCompPreview to handle alpha compositing more efficiently.
- Implement syncVideoToTick function to manage video playback timing based on render ticks.
- Modify ensureVideoFrameCanvas to support tick-based synchronization for video frames.
- Change waveform and vectorscope data types from Uint16Array to Uint32Array to prevent overflow.
- Update types to include new properties for interaction handling and static render caching.
- Introduced new state properties in ensureState to manage rendering state, including lastRenderTick, renderInFlight, queuedRenderTick, and renderNonce.
- Added hashText and serializePreviewValue functions for efficient preview value serialization.
- Implemented buildPreviewRenderKey to create a unique key for rendering based on node state and inputs.
- Improved rendering logic in registerImageOpsLivePreview to handle queued renders and prevent unnecessary re-renders.
- Refactored blit function to accept various source types and improved canvas handling.
- Added ensureCanvasSize and renderImageSourceToCanvas functions to streamline canvas creation and image rendering.
- Updated ops and renderer modules to utilize new rendering functions and improve performance.
- Enhanced error handling during rendering processes to provide clearer feedback.
- Introduced a new progress tracking system for image operations, allowing for better user feedback during processing.
- Updated `invert.py`, `merge.py`, `noise.py`, `preview.py`, and `transform.py` to utilize the new progress tracking.
- Added unique ID handling for progress tracking to each operation.
- Enhanced the noise generation to support frame length and FPS settings.
- Modified the image operations adapter to accommodate changes in function signatures for progress tracking.
- Implemented procedural animation handling in the preview system to support animated values.
- Created a new `nodes_progress.py` file to encapsulate the progress tracking logic.
- Updated canvas context retrieval to handle potential null values gracefully in `renderer.ts`.
- Enhanced error handling by returning null when context cannot be obtained.
- Added a `tick` parameter to the adapter apply context in `types.ts`.
- Introduced new distortion and noise nodes in Python, implementing image distortion and noise generation functionalities.
- Improved memory management by closing previous bitmaps in `source.ts`.
- Updated the render function to accept an optional outputSlot parameter.
- Modified renderNode to handle output slots and gather input information.
- Introduced RenderInputInfo interface to encapsulate details about each input.
- Added logic to create placeholder canvases for missing upstream nodes.
- Updated signature function to include outputSlot in cache key.
ci: add nightly build and stable release workflows
- Created nightly.yml for automated nightly builds and uploads to GitHub.
- Added release-on-tag.yml for creating stable releases on version tags.
- Implemented steps to create zip archives excluding unnecessary files.
- Configured GitHub Actions to publish releases and custom nodes to the registry.
- Implemented ImageOpsComp for image composition with multiple layers and blending modes.
- Created ImageOpsCrop for interactive cropping with aspect ratio support.
- Developed ImageOpsDraw for drawing on images with customizable tools and overlays.
- Added utility functions for handling crop and draw operations, including aspect ratio resolution and canvas management.
- Introduced TypeScript interfaces and utility functions for managing composition layers and crop rectangles in the preview.
- Implemented `computeScopes`, `drawHistogram`, `drawWaveform`, `drawRgbWaveform`, and `drawVectorscope` functions for image analysis.
- Created `parseAnnotated`, `makeViewUrl`, `ensureBitmap`, and `ensureVideoFrameCanvas` functions for media source handling.
- Added TypeScript definitions for ComfyUI integration, including node state, media state, and scopes options.
- Established project structure with `package.json`, `tsconfig.json`, and `package-lock.json` for dependency management and TypeScript configuration.
- Added ops.ts for image processing operations including color adjustments, blurring, transformations, and more.
- Introduced progress.ts to manage execution progress for ImageOps nodes.
- Created registry.ts to build an adapter registry for ImageOps and interop.
- Developed renderer.ts for recursive rendering of nodes with support for interop.
- Implemented scopes.ts for histogram, waveform, and vectorscope computations and visualizations.
- Added source.ts for media source helpers, including parsing and ensuring bitmap/video frame canvases.