Add Wan segment example workflows
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
@@ -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
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user