Add Wan segment example workflows

This commit is contained in:
OnekoSL
2026-06-24 22:15:08 +02:00
parent a33efb065f
commit 75b967717c
7 changed files with 7077 additions and 4 deletions
+3 -3
View File
@@ -4,9 +4,9 @@ The separate workflow [anima_to_wan2.2_i2v.json](../../pysssss-workflows/anima_t
The recommended robust continuation path now avoids dynamic ComfyUI loop nodes:
- [anima_to_wan2.2_segment_start.json](../../pysssss-workflows/anima_to_wan2.2_segment_start.json) renders segment 0 and stores numbered PNG frames.
- [wan2.2_segment_extend.json](../../pysssss-workflows/wan2.2_segment_extend.json) loads the saved `last_frame.png`, renders one more Wan segment, drops its duplicate first frame, and appends frames to the same run folder.
- [wan2.2_segment_assemble.json](../../pysssss-workflows/wan2.2_segment_assemble.json) checks the frame sequence and writes the final MP4.
- [examples/wan22/anima_to_wan2.2_segment_start.json](examples/wan22/anima_to_wan2.2_segment_start.json) renders segment 0 and stores numbered PNG frames.
- [examples/wan22/wan2.2_segment_extend.json](examples/wan22/wan2.2_segment_extend.json) loads the saved `last_frame.png`, renders one more Wan segment, drops its duplicate first frame, and appends frames to the same run folder.
- [examples/wan22/wan2.2_segment_assemble.json](examples/wan22/wan2.2_segment_assemble.json) checks the frame sequence and writes the final MP4.
## Pipeline
+1
View File
@@ -8,6 +8,7 @@
- Added the separate `anima_to_wan2.2_i2v.json` pipeline with an Anima keyframe, JoyCaption visual bridge, editable Wan motion instruction, five independent seeds, and verified 17-frame GPU smoke coverage.
- Added iterative Wan continuation planning, JSON records, and final manifests plus an Easy-Use loop that extends the Anima-to-Wan video by 1-10 segments without duplicate transition frames.
- Added a robust segmented Wan continuation path with `NukunWan22SegmentStore`, `NukunWan22SegmentLoader`, and `NukunWan22FrameSequenceAssembler`, plus start/extend/assemble workflows that persist PNG frames and assemble the final MP4 without relying on dynamic loop nodes.
- Added the segmented Wan workflows under `examples/wan22/` so the complete setup is versioned with the custom nodes.
- Added `4-Prompt Model Cycler Loader (Nukun)` for synchronized four-prompt-per-UNET folder cycles with `increment`, `fixed`, and frontend-randomized model-synchronous seed modes.
- Added `4-Prompt Checkpoint Cycler Loader (Nukun)` with the same prompt and seed cycles for normal checkpoints with embedded CLIP and VAE outputs.
- Fixed both 4-prompt cyclers so ComfyUI's automatic seed randomizer is locked to `fixed`; `seed_mode` is now the only seed controller.
+2
View File
@@ -77,6 +77,8 @@ The main node set and core examples work with a standard ComfyUI installation. T
- `NukunHiResFixTiled` - display name `HiResFix Tiled (Nukun)`, category `Nukun/Sampling`
- `NukunTiledHiResFixAdvanced` - display name `Tiled HiRes Fix Advanced (Nukun)`, category `Nukun/Sampling`
Wan 2.2 example workflows live in `examples/wan22/`, including the segmented Anima-to-Wan start, extension, and final assembly workflows.
## Checkpoint Cycler Loader
This node replaces the common `PrimitiveNode` plus `Checkpoint Loader w/Name (WLSH)` pattern.
File diff suppressed because it is too large Load Diff
+212
View File
@@ -0,0 +1,212 @@
{
"last_node_id": 3,
"last_link_id": 2,
"nodes": [
{
"id": 1,
"type": "NukunWan22FrameSequenceAssembler",
"pos": [
-240,
-120
],
"size": [
500,
310
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [
{
"localized_name": "run_id",
"name": "run_id",
"type": "STRING",
"widget": {
"name": "run_id"
},
"link": null
},
{
"localized_name": "fps",
"name": "fps",
"type": "FLOAT",
"widget": {
"name": "fps"
},
"link": null
},
{
"localized_name": "filename",
"name": "filename",
"type": "STRING",
"widget": {
"name": "filename"
},
"link": null
},
{
"localized_name": "codec",
"name": "codec",
"type": "COMBO",
"widget": {
"name": "codec"
},
"link": null
},
{
"localized_name": "quality",
"name": "quality",
"type": "INT",
"widget": {
"name": "quality"
},
"link": null
},
{
"localized_name": "overwrite",
"name": "overwrite",
"type": "BOOLEAN",
"widget": {
"name": "overwrite"
},
"link": null
}
],
"outputs": [
{
"localized_name": "video_path",
"name": "video_path",
"type": "STRING",
"links": null
},
{
"localized_name": "total_frames",
"name": "total_frames",
"type": "INT",
"links": null
},
{
"localized_name": "duration",
"name": "duration",
"type": "FLOAT",
"links": null
},
{
"localized_name": "manifest_json",
"name": "manifest_json",
"type": "STRING",
"links": null
},
{
"localized_name": "report",
"name": "report",
"type": "STRING",
"links": [
1
]
}
],
"title": "Frames ? finales MP4",
"properties": {
"aux_id": "OnekoSL/Nukun_ComfyUI_Nodes",
"Node name for S&R": "NukunWan22FrameSequenceAssembler",
"ue_properties": {
"widget_ue_connectable": {},
"version": "7.8",
"input_ue_unconnectable": {}
}
},
"widgets_values": [
"wan_run_001",
16,
"final",
"libx264",
8,
true
]
},
{
"id": 2,
"type": "PreviewAny",
"pos": [
340,
-90
],
"size": [
300,
160
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [
{
"localized_name": "source",
"name": "source",
"type": "*",
"link": 1
}
],
"outputs": [],
"title": "Assemble Bericht",
"properties": {
"Node name for S&R": "PreviewAny",
"aux_id": "rgthree-comfy",
"ue_properties": {
"version": "7.8",
"widget_ue_connectable": {},
"input_ue_unconnectable": {}
}
},
"widgets_values": [
null,
null,
null
]
},
{
"id": 3,
"type": "Note",
"pos": [
-240,
260
],
"size": [
720,
260
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [],
"outputs": [],
"title": "Bedienung ? Assemble",
"properties": {},
"widgets_values": [
"Wenn genug Segmente im Run-Ordner liegen, diesen Workflow queuen.\n\nEr pr?ft frames/frame_000000.png ... ohne L?cken und schreibt output/wan_runs/<run_id>/videos/<filename>.mp4.\n\nKein externer ffmpeg-PATH n?tig: die Node nutzt das lokal installierte imageio_ffmpeg-Bundle."
]
}
],
"links": [
[
1,
1,
4,
2,
0,
"STRING"
]
],
"groups": [],
"config": {},
"extra": {
"ds": {
"scale": 1,
"offset": [
0,
0
]
}
},
"version": 0.4
}
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -4,7 +4,8 @@ from pathlib import Path
COMFY_ROOT = Path(__file__).resolve().parents[3]
WORKFLOW_DIR = COMFY_ROOT / "pysssss-workflows"
PACKAGE_ROOT = Path(__file__).resolve().parents[1]
WORKFLOW_DIR = PACKAGE_ROOT / "examples" / "wan22"
class WorkflowJson: