- Add ImageOpsVignette, ImageOpsChromaticAberration, ImageOpsBloom, and
ImageOpsLensArtifacts for common lens/compositing effects.
- Add ImageOpsDefocus: depth-driven defocus/bokeh with shaped aperture
kernels (circle/hexagon/octagon/custom) and highlight bloom.
- Add input_space (srgb/linear) to ImageOpsColorAjust so scene-linear/HDR
sources aren't gamma-encoded twice.
- Add image_b + compare_mode/wipe_position to ImageOpsPreview for a real
A/B comparison, plus a separate live on-demand A/B toggle while editing.
- Redesign the live-preview HUD: unified pill-style badges, frame counter
now shows the real total and hides for single-frame sources, and the
Output overlay only appears for Pad Out with the real pixel size.
- Align README with the current node set and fix stale blend-mode docs.
- FrameRange: reattach interactive controls on onConfigure instead of
leaving them permanently dead after a workflow load/undo/paste
- FrameRange: stop silently swapping an inverted trim range in the
preview - match _timeline_indices' documented zero-frame contract
- Append: bypass no longer concatenates audio/fps from clips that
aren't part of the bypassed output
- Append: preview loop point now accounts for bypass
- Crop: bypass now returns a full-frame bbox instead of a 2-tuple that
broke the node's declared 3-output contract
- Channel: shuffle preview now errors like the backend when "Mask" is
selected without a connected mask, instead of faking success
- host.ts: RAF loop keeps polling instead of stopping for good when
the canvas is briefly detached from the DOM
- Text: fix drag miscalibration when the preview is zoomed
- Eyedropper: restore picking from any canvas (VHS/WAS previews
included), only excluding the LiteGraph graph canvas
- video_io.py: stop swallowing comfy_api import failures
- Remove dead code: compat/comfy_v3.py (V3NodeBase), core/parameters.py,
core/validation.py, dbl-click-reset.ts, unused MEDIA_INPUT_TYPE
imports, an unreachable fragment in _ensure_rgba
- memory.py: narrow an overly broad except clause
- distort.py: finish the first progress bar before starting the second
- keyer.py: fix inconsistent indentation
tests/package.json, tests/scripts/app.js, tests/frontend/node-modules.test.ts,
and tests/__init__.py were untracked but already required by
`npm run test:ts` (tsconfig.frontend-tests.json includes tests/frontend/**/*.ts);
leaving them untracked breaks that script for anyone else cloning the repo.
test_comp_backend.py and test_nodes.py are real test suites sitting directly
under tests/ rather than tests/unit or tests/integration, so CI doesn't
collect them yet; tracked as-is pending that cleanup.
.cursorrules and comfyui_agent.md are personal AI-agent config, not part of
the project; gitignored alongside the existing AGENTS.md/CODEX_TODO.md entries.
Core (nodes/core/): alpha, masks, batch consolidation, blend, transform
matrix, bbox, parameters, validation engines shared across nodes, each with
unit tests.
Fix an unconditional RGB clamp to [0,1] that silently destroyed HDR/negative
values in Merge, Transform, Color Correct, Comp, CornerPin, Distort,
Spherize, Crop Stitch, and the shared masked-compositing helpers. Alpha
stays clamped everywhere; RGB no longer does.
Fix Grain applying `amount` twice in overlay/soft_light modes (quadratic
instead of linear falloff).
Add STMap mode to Distort (absolute UV remap vs relative displacement).
Add bbox output/input wiring between Crop and Crop Stitch. Add edge_grow
and edge_color_match to Crop Stitch. Add despill to Keyer. Add shuffle mode
to Channel (R/G/B/A routed from any source). Add size/luma_response to
Grain. Add grid mode to Constant. Add frame/layer accumulation limits to
Preview and Draw, plus a font-path containment fix and supersampling in
Text.
Make Frame Range and Append recognize a real ComfyUI VIDEO input (not only
this pack's internal media wrapper), preserving true fps/audio instead of
silently dropping them, and add a native VIDEO output alongside the
existing IMAGE output on both.
Add node_replacements.py (empty registry, wired into the extension
lifecycle) for future schema migrations.
Add a CI matrix pinning the verified requires-comfyui floor, and
.comfyignore for Registry packaging.
In the V3 migration, IMAGE/VIDEO inputs were mistakenly converted to io.String.Input with force_input=True. This breaks ComfyUI UI links as they now resolve to STRING inputs.\nReplaced all such instances with native io.MultiType.Input('image', types=[io.Image, io.Video]).
- Refactor 26 nodes to io.ComfyNode with define_schema and execute\n- Implement ComfyExtension subclass with async comfy_entrypoint\n- Preserve majoor_imageops synthetic namespace loader to avoid nodes module collision\n- Update and validate unit, registry and frontend test suites\n- Rebuild frontend dist files
- 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.
- Added OpsPaint.gif (1539 KB) to the docs directory.
- Added OpsSpherize.gif (1129 KB) to the docs directory.
- Added OpsTransform.gif (1577 KB) to the docs directory.