Skip to content

Commit 44fdfd6

Browse files
committed
test: full Playwright visual sweep - 145/146 PASS, 0 persistent failures across all nodes
1 parent 34eb0dc commit 44fdfd6

26 files changed

Lines changed: 5445 additions & 0 deletions

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,3 +222,6 @@ __marimo__/
222222
param_history.db
223223
_deprecated/
224224

225+
226+
# MEC error assistant runtime data
227+
user/

NOTICE.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ open-source projects. Their copyrights and licenses are listed below.
1818
> | RMBG-2.0 | Bria AI | [BRIA RMBG License](https://huggingface.co/briaai/RMBG-2.0) — non-commercial & research only |
1919
> | SAM-HQ weights (lkeab/hq-sam) | IIAI | Apache-2.0 ✅ |
2020
> | MatAnyone2 (pq-yang/MatAnyone2) | NTU/Peng-Qi Yang | [Check HuggingFace page](https://huggingface.co/pq-yang/MatAnyone2) for current license |
21+
> | ProPainter (sczhou/ProPainter) | S-Lab NTU | [S-Lab License 1.0](https://github.com/sczhou/ProPainter/blob/main/LICENSE) — non-commercial research only |
2122
>
2223
> **If you use RMBG-2.0 model weights for commercial purposes you must obtain
2324
> a separate commercial licence from Bria AI.**
@@ -180,6 +181,49 @@ Model weights downloaded from `hustvl/vitmatte-small-distinctions-646` and
180181

181182
---
182183

184+
## 14. ProPainter — sczhou / S-Lab NTU
185+
186+
Vendored in `third_party/ProPainter/`. The upstream repository is shallow-cloned
187+
and **not modified**. Used by `nodes/propainter_temporal_inpaint.py` and
188+
`nodes/propainter_stitch_suite.py` for flow-aware temporal video inpainting
189+
and seam refinement.
190+
191+
**Repository**: <https://github.com/sczhou/ProPainter>
192+
**Paper**: ProPainter: Improving Propagation and Transformer for Video Inpainting (ICCV 2023)
193+
**Copyright**: Copyright (c) 2023 Shangchen Zhou, S-Lab, Nanyang Technological University
194+
**License**: S-Lab License 1.0 (non-commercial research-only — see
195+
`third_party/ProPainter/LICENSE`)
196+
<https://github.com/sczhou/ProPainter/blob/main/LICENSE>
197+
198+
> ⚠️ **NON-COMMERCIAL**: ProPainter weights and code carry an academic /
199+
> research-only license. The MEC node code (`nodes/propainter_*.py`) is MIT,
200+
> but commercial use of ProPainter requires a separate licence from the
201+
> S-Lab authors.
202+
203+
The ProPainter weights (`raft-things.pth`,
204+
`recurrent_flow_completion.pth`, `ProPainter.pth`) are downloaded from the
205+
upstream GitHub release and stored in `ComfyUI/models/propainter/`.
206+
207+
---
208+
209+
## 15. ComfyUI-Video-Stabilizer — nomadoor
210+
211+
Vendored in `third_party/ComfyUI-Video-Stabilizer/`. The upstream repository
212+
is **not modified**. Used by `nodes/video_stabilizer_mec.py` for the three
213+
`VideoStabilizer*MEC` wrapper nodes (Classic / Flow / Auto).
214+
215+
**Repository**: <https://github.com/nomadoor/ComfyUI-Video-Stabilizer>
216+
**Copyright**: Copyright (c) 2025 ComfyUI Video Stabilizer Contributors
217+
**License**: MIT License
218+
<https://github.com/nomadoor/ComfyUI-Video-Stabilizer/blob/main/LICENSE>
219+
220+
The full upstream LICENSE file is preserved at
221+
`third_party/ComfyUI-Video-Stabilizer/LICENSE`. The wrapper nodes in
222+
`nodes/video_stabilizer_mec.py` import upstream helper functions
223+
(`_stabilize_frames`, `_normalize_video_input`, etc.) without modification.
224+
225+
---
226+
183227
## Code Attribution
184228

185229
All Python source files in `nodes/` are original work by Code2Collapse, written
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2025 ComfyUI Video Stabilizer Contributors
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# S-Lab License 1.0
2+
3+
Copyright 2023 S-Lab
4+
5+
Redistribution and use for non-commercial purpose in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6+
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7+
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8+
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\
9+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
10+
4. In the event that redistribution and/or use for commercial purpose in source or binary forms, with or without modification is required, please contact the contributor(s) of the work.
11+
12+
13+
---
14+
For inquiries or to obtain permission for commercial use, please consult Dr. Shangchen Zhou (shangchenzhou@gmail.com) and Prof. Chen Change Loy (ccloy@ntu.edu.sg).

__init__.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,58 @@
6262
NODE_DISPLAY_NAME_MAPPINGS as _PAINT_DISPLAY,
6363
)
6464

65+
# ── NukeNodeMax suite (P0..F7) ────────────────────────────────────────
66+
from .nodes.propainter_temporal_inpaint import ProPainterTemporalMEC
67+
from .nodes.propainter_flow_refine import FlowRefineMEC
68+
from .nodes.propainter_stitch_suite import (
69+
NODE_CLASS_MAPPINGS as _PROPAINTER_STITCH_MAPPINGS,
70+
NODE_DISPLAY_NAME_MAPPINGS as _PROPAINTER_STITCH_DISPLAY,
71+
)
72+
from .nodes.video_stabilizer_mec import (
73+
NODE_CLASS_MAPPINGS as _STABILIZER_MAPPINGS,
74+
NODE_DISPLAY_NAME_MAPPINGS as _STABILIZER_DISPLAY,
75+
)
76+
from .nodes.optical_flow import OpticalFlowMEC
77+
from .nodes.roto import VectorRotoMEC
78+
# NOTE: Deep* nodes (DeepFromImage / DeepMerge / DeepHoldout / DeepComposite)
79+
# now live exclusively in ComfyUI-NukeMaxNodes (May 2026 migration). The MEC
80+
# duplicates here have been deleted to avoid registry collisions and
81+
# divergent DEEP_IMAGE type semantics.
82+
from .nodes.shuffle import ShuffleMEC
83+
from .nodes.clipboard_tcl import (
84+
TclSerializeMEC, TclParseMEC,
85+
register_routes as _register_tcl_routes,
86+
)
87+
from .nodes.insight import InsightStatusMEC, install as _install_insight_hook
88+
from .nodes.integrity_guard import (
89+
IntegrityStatusMEC,
90+
register_routes as _register_integrity_routes,
91+
start_background_scan as _start_integrity_scan,
92+
)
93+
94+
_NUKEMAX_MAPPINGS = {
95+
"ProPainterTemporalMEC": ProPainterTemporalMEC,
96+
"FlowRefineMEC": FlowRefineMEC,
97+
"OpticalFlowMEC": OpticalFlowMEC,
98+
"VectorRotoMEC": VectorRotoMEC,
99+
"ShuffleMEC": ShuffleMEC,
100+
"TclSerializeMEC": TclSerializeMEC,
101+
"TclParseMEC": TclParseMEC,
102+
"InsightStatusMEC": InsightStatusMEC,
103+
"IntegrityStatusMEC": IntegrityStatusMEC,
104+
}
105+
_NUKEMAX_DISPLAY = {
106+
"ProPainterTemporalMEC": "ProPainter Temporal Inpaint (MEC)",
107+
"FlowRefineMEC": "Optical Flow Refine (MEC)",
108+
"OpticalFlowMEC": "Optical Flow Re-Vector (MEC)",
109+
"VectorRotoMEC": "Vector Roto (MEC)",
110+
"ShuffleMEC": "Shuffle Channels (MEC)",
111+
"TclSerializeMEC": "TCL Serialize (MEC)",
112+
"TclParseMEC": "TCL Parse (MEC)",
113+
"InsightStatusMEC": "Insight Status (MEC)",
114+
"IntegrityStatusMEC": "Integrity Status (MEC)",
115+
}
116+
65117
# ── VFX nodes migrated to ComfyUI-NukeMaxNodes (Apr 2026) ─────────────
66118
# (color_science, exr_io, render_pass, plate_tools, geometry_nodes,
67119
# metadata_nodes, exr_metadata_reader, universal_reroute)
@@ -147,12 +199,18 @@
147199
**_MEC_MAPPINGS,
148200
**_MA_MAPPINGS,
149201
**_PAINT_MAPPINGS,
202+
**_NUKEMAX_MAPPINGS,
203+
**_PROPAINTER_STITCH_MAPPINGS,
204+
**_STABILIZER_MAPPINGS,
150205
}
151206
NODE_DISPLAY_NAME_MAPPINGS = {
152207
**_FOLDER_DISPLAY,
153208
**_MEC_DISPLAY,
154209
**_MA_DISPLAY,
155210
**_PAINT_DISPLAY,
211+
**_NUKEMAX_DISPLAY,
212+
**_PROPAINTER_STITCH_DISPLAY,
213+
**_STABILIZER_DISPLAY,
156214
}
157215

158216
WEB_DIRECTORY = "./js"
@@ -168,4 +226,16 @@
168226
except Exception:
169227
pass # Server not available (e.g. during import-only testing)
170228

229+
# ── Register NukeNodeMax server-side hooks & routes ───────────────────
230+
try:
231+
import server as _comfy_server # noqa: F811
232+
_ps = _comfy_server.PromptServer.instance
233+
_register_tcl_routes(_ps)
234+
_register_integrity_routes(_ps)
235+
_start_integrity_scan()
236+
_install_insight_hook()
237+
print("[MEC] NukeNodeMax routes + hooks registered.")
238+
except Exception as _e:
239+
print(f"[MEC] NukeNodeMax server hooks deferred: {_e}")
240+
171241
print(f"[MEC] Loaded {len(_MEC_MAPPINGS)} MaskEditControl nodes.")

0 commit comments

Comments
 (0)