feat(publish): independent output type for published setups; fix(pipeline): auto-versioning re-runs each queue (#267)

Publish: Koolook_PublishOutput output_mode/input_switch/switch; setupSurface.app.outputSwitch; routers auto-bound as the output selector; unwired output types hidden; 'Same as input' offered only when every input type has a wired writer; result path follows the output switch. Pipeline: EasyAIPipeline IS_CHANGED keeps version=auto/next perpetually dirty so the vNNN disk scan re-runs every queue; literal versions stay cacheable.
This commit is contained in:
malkuthro
2026-07-19 23:34:30 +02:00
committed by GitHub
parent 950f15e569
commit 7b00a551d9
15 changed files with 1389 additions and 126 deletions
@@ -19,8 +19,9 @@ The nodes are not image processors. They are contract markers:
- `Koolook_PublishInput` declares source inputs such as an EXR sequence folder,
QuickTime file, single image/file, or prompt.
- `Koolook_PublishOutput` declares output folder/name/version controls.
- `Koolook_PublishRouter` connects the selected source mode to matching writer
- `Koolook_PublishOutput` declares output folder/name/version controls, plus an
optional independent **output type** (so an EXR source can write a QT movie).
- `Koolook_PublishRouter` connects the selected mode to matching writer
branches so only the chosen branch runs.
- `Koolook_PublishResult` optionally reports the final resolved path or status
string back to the external app.
@@ -57,16 +58,20 @@ The publisher records nearby nodes for review, but only recognized
| `folder` | Destination folder for generated outputs. |
| `name` | Base output name. |
| `version` | Version token or number. |
| `output_mode` | Output type: `Same as input`, `EXR`, `QT`, or `Img`. `Same as input` (default) follows the input type; a concrete choice writes a different type than the source. `Prompt` is not an output format. |
| `input_switch` (input) | Wire `Koolook_PublishInput.switch` here. Used only when `output_mode` is `Same as input`, so the output type mirrors the chosen input type. |
| `switch` (output) | Resolved output-type index. Wire into `Koolook_PublishRouter.selector` to drive the writer branch. |
### `Koolook_PublishRouter`
Wire `Koolook_PublishInput.switch` into `selector`, and wire the workflow's
main payload into `payload`. Connect each router output to the writer branch
for that source mode:
The router **is** the output selector. Wire the workflow's main payload into
`payload`, wire something into `selector` (typically the input switch — its
value is the "Same as input" default), and connect each output slot to the
writer branch for that type:
```text
Koolook_PublishInput.switch -> Koolook_PublishRouter.selector
workflow payload -> Koolook_PublishRouter.payload
Koolook_PublishInput.switch -> Koolook_PublishRouter.selector # default follows input
Koolook_PublishRouter.EXR -> EXR writer branch
Koolook_PublishRouter.QT -> video writer branch
@@ -74,8 +79,13 @@ Koolook_PublishRouter.Img -> image writer branch
Koolook_PublishRouter.Prompt -> prompt/no-op branch if needed
```
When the setup runs from the external app, Koolook keeps the selected writer
branch and prunes the unselected branches from the queued prompt.
Whichever branches you wire to writers become the **Output type** options the
external app offers — a user can override to any wired type, defaulting to the
input type (or the `Koolook_PublishOutput.output_mode` widget if you set one).
You do **not** need to wire `Koolook_PublishOutput.switch` anywhere; the router
is auto-detected as the output control. Put the writer nodes inside the
`Koolook Output` group so they're recognized. When the setup runs, Koolook keeps
the chosen writer branch and prunes the rest.
### `Koolook_PublishResult`