Strata 服务控制 / Control
Load, unload and stop your local Strata server from the queue
- connection
- images
- connection
- status_json
- text
- images
Two things have to be true for a local LLM-in-ComfyUI setup to be pleasant: the model must leave the GPU before your sampler wants it, and you must be able to prove it left. StrataT8Control is the node that does both, and it's the one I'd put in every Strata workflow even when the graph runs fine without it.
What it does
It's a five-position switch over the service's lifecycle. Wire connection in from StrataT8Connection, pick an action, and it calls the engine's HTTP surface for you:
- status - a plain
GET /v1/status, 5-second timeout, read directly with no profile lock. Cheap; safe to spam. - start - bring the managed service up and wait for it to be ready.
- load - actually pull the model in and verify it, rather than assuming "started" means "usable".
- unload - release the model and the engine's processes.
- stop - terminate the service the node pack owns.
What you get out
- status_json - the validated status document: service identity, protocol version, model name,
loaded,vision.enabled,activity.in_flight,concurrency.serving, and aprocessesblock withengineandvisionentries that each reportrunning/loaded/starting. That's the honest answer to "is the language model actually gone before KSampler runs". The pack validates the shape and refuses anything that isn't protocol 1 - a random other server on that port gets you "Incomplete or incompatible Strata-T8 protocol version 1 status" instead of nonsense. - connection - passthrough, so you can chain it in the middle of a graph.
- text and images - optional passthrough inputs and matching outputs. This is how you force ordering: run your upstream work, thread it through Control, and everything downstream is now queued after the lifecycle action. The pack's own examples use a dependency wire exactly like this instead of trusting that async branches behave.
- It's an output node, so the status JSON also prints in the node's UI.
The node overrides IS_CHANGED to return float("NaN") - always dirty, always re-executes. That's the standard "this node must fire every run" idiom from the plumbing layer (the KB's plumbing notes § the always-rerun trick), and it's correct here: a cached status check would be worthless. Unlike most nodes, Control deliberately defeats ComfyUI's caching.
The rules you'll hit
stop is managed-only. With an external profile it refuses outright: "Only a managed profile can stop its owned server." That's the right call - the pack will not kill a service it didn't start and can't prove it owns.
start / load / unload need lifecycle permission. External profiles default to allow_lifecycle:false, and you'll get "Enable lifecycle control explicitly for this external profile" until you flip it. Remote profiles should leave lifecycle off entirely and let you manage the server yourself.
load in same-GPU mode releases again before it returns. It preloads to verify, then cleans up, and status_json comes back with an after_release block telling you whether the service was stopped. If a lower-level release can't be confirmed, the pack stops its own service rather than letting your next node fight for VRAM. Do not read load as "keep it resident" - on a shared card it's a validation pass.
Idle required. Loading while something is in flight fails with "Load requires an idle compatible Strata-T8 service".
The sidebar can't do any of this. The panel's own control endpoint answers 409 for anything but status: "Service lifecycle controls must run through a Strata Control workflow in the ComfyUI queue." By design - the panel writes raw HTTP, and the pack wants resource release to happen inside a real graph run. If you were looking for a start button in the sidebar, this node is the start button.
Install
Manager → search Strata-T8 (publisher t8star), or:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-Strata-T8.git
python -m pip install -r Comfyui-Strata-T8/requirements.txt # jsonschema, that's all
Restart ComfyUI, save a profile in the Strata-T8 sidebar, select it in the Connection node. The pack ships no models; the engine, its Python/CUDA stack and the ~83.6GB IQ3_S data live in the separate portable runtime and data folder. Keep one install directory and delete stale comfyui-strata-t8 copies so you don't get duplicate node IDs.
When it goes wrong
Unloading isn't instantaneous - there's a cleanup_timeout_s (default 90) during which the pack polls for in-flight work, then unloads, then confirms VRAM came back. If it can't confirm, it says so and refuses to continue: "Resource release timed out" or "GPU memory has not returned after Strata unload; downstream work is blocked". Treat those as real. A live tensor from another branch or a third-party background task can hold memory, and no node anywhere can release someone else's allocation.
Also: status is free, the other four actions are not. Don't wire start into a loop that runs per image.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| connection | STRATA_CONNECTION | — | |
| action | COMBO | 5 options: status, start, load, unload, stop | |
| textopt | STRING | — | |
| imagesopt | IMAGE | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| connection | STRATA_CONNECTION | — |
| status_json | STRING | — |
| text | STRING | — |
| images | IMAGE | — |