106 Commits
Author SHA1 Message Date
Ewald a4154ccf05 Fix P0 bugs, remove Append V2/Lens Artifacts, and fix crop reload reset
- Fix batch bypass tuple handling, memory budget device-awareness, grain
  RNG device, roto payload limits, preview temp-file cleanup, and route
  double-registration.
- Add native VIDEO output (fps/audio) to effect nodes that previously
  only returned IMAGE/MASK when fed a VIDEO input.
- Split the oversized src/preview/ops/geometry.ts and add a starting
  golden-fixture test harness (spherize, transform) comparing backend
  and frontend math.
- Remove ImageOpsAppendV2 (Autogrow) and ImageOpsLensArtifacts; inline
  Append's helper back into its single caller.
- Collapse the Color Correct curve widget behind a toggle so the node
  no longer grows too tall.
- Fix Crop/generic-node video preview playback running at the RAF rate
  instead of the source video's real fps.
- Fix Crop losing its saved output size after a workflow reload:
  syncCropWidgets recomputed height from width and a preset aspect
  ratio on every resync (including onConfigure on load), discarding
  the restored value. It now only refreshes aspect-ratio bookkeeping
  on a resync.
2026-09-30 12:49:42 +02:00
EwaldandClaude Sonnet 5 eca3a8b68f Regenerate the example workflow with every node wired
Build example/All Nodes MIO.json from the node schemas with
scripts/generate_example_workflow.py: 32 nodes plus Load Image, 39
links, executed end to end in ComfyUI. An integration test fails when
the file goes stale.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 14:53:14 +02:00
EwaldandClaude Sonnet 5 019a5c9172 Load through comfy_entrypoint and adopt current ComfyUI APIs
Defining NODE_CLASS_MAPPINGS made ComfyUI skip comfy_entrypoint, so
/imageops/viewmedia and node replacements were never registered. Load
as a V3 extension only, move server.py to routes.py so it stops
shadowing ComfyUI's server module, and transcode animated previews
with PyAV instead of an external ffmpeg.

- Require ComfyUI 0.19.0 (has_intermediate_output); CI floor updated.
- Process 11 nodes on ComfyUI's torch device when the frames fit in
  free memory (IMAGEOPS_COMPUTE_DEVICE=cpu disables it).
- Add core CURVE input to Color Correct, BOUNDING_BOX output/input to
  Crop and Crop Stitch, LAYERS output to Comp (ComfyUI 0.31+),
  essentials_category, and Merge blend modes with golden parity.
- Report progress through the public set_progress API and drop the
  hidden unique_id input.
- Add ImageOps settings and a refresh-previews command.
- Fix ImageOpsComp rotation and preview saving (undefined
  to_display_range) and masked Transform edge colors.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 14:53:14 +02:00
EwaldandClaude Sonnet 5 1b0e112cf8 Add ImageOps Roto node and raise live preview quality
Add ImageOpsRoto: bezier, ellipse, rectangle and freehand shapes with add/subtract/intersect, feather/expand, keyframe animation and a live-preview editor. Raise preview canvas sizes and enable high-quality smoothing. Update node-count tests.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 10:53:40 +02:00
EwaldandClaude Sonnet 5 7a1a04add3 Fix Append output unpacking in v3 output type test
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 10:53:35 +02:00
Ewald ALOEBOETOE f5f358a739 Merge pull request #9 from MajoorWaldi/copilot/fix-comfyui-integration-tests
Handle CPU-only ComfyUI memory probing in `check_budget` to unblock v0.37.4 integration
2026-09-28 09:50:41 +02:00
copilot-swe-agent[bot]andMajoorWaldi 9c2cc41663 Fix frame range output type integration test unpacking
Co-authored-by: MajoorWaldi <129623145+MajoorWaldi@users.noreply.github.com>
2026-09-28 07:46:59 +00:00
copilot-swe-agent[bot]andMajoorWaldi a24e506413 Handle CPU-only Comfy memory probe failures
Co-authored-by: MajoorWaldi <129623145+MajoorWaldi@users.noreply.github.com>
2026-09-28 07:40:37 +00:00
copilot-swe-agent[bot] dfc39619c9 Initial plan 2026-09-28 07:36:08 +00:00
EwaldandClaude Sonnet 5 c4c7419ec5 Raise ComfyUI floor to 0.12.0, fix node counts, add changelog, extend comfyignore
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 08:57:59 +02:00
EwaldandClaude Sonnet 5 02fde119bd Remove tests/__init__.py rejected by unit isolation check
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 08:37:10 +02:00
EwaldandClaude Sonnet 5 c28d02e3b9 Add missing nodes/core/timeline module used by frame_range
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 08:36:41 +02:00
Ewald 23dcd1c2d9 Add lens/compositing effect nodes and depth-based Defocus, A/B compare on Preview
- 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.
2026-09-28 00:19:49 +02:00
Ewald ALOEBOETOE f140064444 docs: specify ImageOps live compositing correction patches 2026-09-27 20:27:09 +02:00
Ewald 7a1ecafc3b Fix preview/backend WYSIWYG bugs and clean up dead code across the pack
- 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
2026-09-27 19:50:21 +02:00
Ewald 9b62b3cd6f Track frontend test infra and gitignore local agent config
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.
2026-09-27 11:59:59 +02:00
Ewald 831b072943 Add professional compositing engines, HDR fixes, and native VIDEO support
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.
2026-09-27 11:55:49 +02:00
Ewald ALOEBOETOE bf499d4624 Update pyproject.toml 2026-08-23 23:05:18 +02:00
Ewald ALOEBOETOE 9eae4b71d5 Merge pull request #8 from MajoorWaldi/fix/restore-previews-v3-registry
test: decouple unit tests from ComfyUI and mock integration tests
v0.1.7
2026-08-23 22:54:35 +02:00
MajoorWaldi 711887f7c8 test: isolate pytest rootdir to prevent ComfyUI root initialization 2026-08-23 22:52:56 +02:00
MajoorWaldi 042fbedc91 test: enforce importlib mode and verify unit suite isolation from ComfyUI 2026-08-23 22:41:40 +02:00
MajoorWaldi beac378015 test: reorganize tests to strictly isolate pure unit tests from ComfyUI integration tests 2026-08-23 22:37:31 +02:00
MajoorWaldi 3e90388cf2 test: decouple unit tests from ComfyUI and mock integration tests 2026-08-23 22:31:01 +02:00
Ewald ALOEBOETOE adbcd86549 Merge pull request #7 from MajoorWaldi/fix/restore-previews-v3-registry
test: restructure tests, add integration test suite and update CI
2026-08-23 22:21:27 +02:00
MajoorWaldi 80d56cb114 test: add remaining unit and integration test files 2026-08-23 22:18:44 +02:00
MajoorWaldi 96ae739dca test: add unit and ComfyUI integration tests 2026-08-23 22:15:19 +02:00
MajoorWaldi 3a1279b14f ci: modernize GitHub Actions to v7, enforce strict test guards and expand test suites 2026-08-23 22:08:40 +02:00
MajoorWaldi d2d8a28e56 ci: improve integration environment verification 2026-08-23 21:59:44 +02:00
MajoorWaldi 6e744aada7 test: restructure tests, add integration test suite and update CI 2026-08-23 21:51:51 +02:00
Ewald ALOEBOETOE 3ac78e02ab Update pyproject.toml
Bump version to v0.1.6
2026-08-23 21:44:13 +02:00
Ewald ALOEBOETOE b6ec57a4fe Merge pull request #6 from MajoorWaldi/fix/restore-previews-v3-registry
chore(release): implement hardening (PR 12)
v0.1.6
2026-08-23 21:36:31 +02:00
MajoorWaldi cc11328d5f chore(release): implement Codex 5.6 Sol hardening (PR 12) 2026-08-23 21:24:37 +02:00
Ewald ALOEBOETOE d413ec5bab Merge pull request #5 from MajoorWaldi/fix/restore-previews-v3-registry
Fix/restore previews v3 registry
2026-08-22 16:35:05 +02:00
MajoorWaldi 5b5cb6cb72 fix(nodes): use io.MultiType.Input for image/video inputs and update gitignore 2026-08-22 16:29:40 +02:00
MajoorWaldi 0e23ed7fc7 fix(v3): convert image inputs to io.MultiType.Input[Image, Video]
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]).
2026-08-22 13:48:34 +02:00
MajoorWaldi ac06dabd89 feat(v3): migrate nodes to native Node 2.0 API and fix ComfyExtension entrypoint
- 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
2026-08-22 13:40:04 +02:00
MajoorWaldi 287b98b5dd feat(scripts): extend refactor_frontend.mjs for all modules 2026-08-22 12:26:43 +02:00
MajoorWaldi 3728ceddee fix: clean up duplicate extractions in preview ops 2026-08-22 12:25:14 +02:00
MajoorWaldi 9f3edbe033 feat: complete P3 roadmap tasks (V3 nodes, ImageOpsMedia, HDR support) 2026-08-22 12:21:32 +02:00
MajoorWaldi c10d02aebd chore: P0-P2 implementations (CI gate, Memory budget, MultiType, Golden Parity test) 2026-08-22 11:46:44 +02:00
Ewald ALOEBOETOE b59f70a46e Merge pull request #4 from MajoorWaldi/fix/restore-previews-v3-registry
fix: restore previews and V3 node registration
2026-08-21 22:57:48 +02:00
MajoorWaldi 882c909e6b fix: restore previews and V3 node registration 2026-08-21 22:56:44 +02:00
MajoorWaldi bf76568279 fix(compat): resolve AttributeError for V3 nodes by fetching root_init from sys.modules 2026-08-21 22:25:34 +02:00
MajoorWaldi a93034967e fix(nodes): register all 26 ImageOps nodes in __init__.py and nodes/__init__.py 2026-08-21 22:21:48 +02:00
MajoorWaldi 43a8180131 feat(vnext): complete Immediate First Sprint vNext migration and frontend parity tests 2026-08-21 22:13:27 +02:00
Ewald 40a8002a86 Fix ImageOps preview state and crop stitch 2026-06-12 00:42:31 +02:00
Ewald 9eef24e275 feat(imageops): add Crop Stitch node and improve crop functionality
- 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
2026-06-10 12:01:27 +02:00
Ewald ce750057fd fix(preview): improve pointer event handling and preview widget stability
- Add 'lostpointercapture' event listeners to handle pointer capture loss
- Implement reset button for image operations live preview
- Optimize preview widget height calculation to prevent layout jumps
2026-06-09 14:54:08 +02:00
Ewald ee2b519a87 chore: update imageops files and add example All Nodes MIO 2026-06-08 11:57:42 +02:00
Ewald e9183f86a2 fix(preview): improve interaction handling and remove unused features
- 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
2026-06-08 08:11:26 +02:00