- api_config
- results
- blocked
- triggered_policies
- workflow_id
- raw_json
The Shieldstral family comes in two flavors: one that inspects a prompt pair, and this one, the plain-text checker. Same hosted moderation model, same outputs, but no positive/negative framing and no context field - just "here's some text, is it blocked?" It's the simplest possible safety gate in the whole Civitai pack, and that simplicity is exactly why it's worth having around.
What it is
Shieldstral Text from civitai/civitai-comfy-nodes, under Civitai/Analysis/Shieldstral Text. It's the shieldstralModeration recipe in text mode. One required input, three meaningful outputs, a cloud call in between. If you need to check arbitrary text - a caption, a chat message, a generated description, user input before it touches anything else - this is the node.
The inputs
text- required, multiline. The document to moderate.policies_json- optional filter. When omitted, every configured policy for the selected mode is evaluated; supply a list to check a subset. Useful both for scoping and for trimming per-call cost.policy_overrides_json- optional. Merges with existing policies by name, and new names create custom policies. The two rules from the tooltip: policies are free-form natural language, and aQuery, when supplied, must be a single yes/no question. That last bit is the trap - a query that's actually two questions will behave unexpectedly.
That's it. Where the Prompt variant adds negative_prompt and context, this one stays lean. It's a difference worth respecting: if you need product context in the evaluation, use the Prompt node; if you just need a verdict on raw text, this is the cheaper, cleaner call.
The outputs
results- the evaluation payload, as JSON.blocked- the boolean-ish verdict your logic branches on.triggered_policies- the list of policies that fired. Wire this to a log, or feed it back to the user so they know why their text didn't pass.workflow_id/raw_json- the pack standard.
Installing it
ComfyUI Manager → Civitai Comfy Nodes → Install → restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/civitai/civitai-comfy-nodes.git
pip install -r civitai-comfy-nodes/requirements.txt
Gotchas
- Metered cloud call. Every check spends Buzz. If you're moderating every caption in a batch pipeline, that's a line item - cache results for repeated text where you can.
- The text leaves your machine. It's processed on Civitai's servers. Fine for a personal gate, a real consideration for anything with sensitive content.
- Policies default to "everything configured." Unexpected blocks are usually a configured policy you didn't know about - check
triggered_policies, then scope withpolicies_json. - Credentials - Civitai Auth node,
CIVITAI_API_TOKEN, or sidebar OAuth. - Remember the sibling node:
Shieldstral Promptexists if your text is a prompt pair that needs context-aware evaluation. Both are the sameshieldstralModerationrecipe in different modes.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | — | |
| policies_jsonopt | STRING | Optional policy filter. When omitted, every configured policy for the selected mode is evaluated. | |
| policy_overrides_jsonopt | STRING | Per-request policy overrides. Existing policies are merged by name and new names create custom policies. Policy is free-form natural language; Query, when supplied, must be a single yes/no question. | |
| api_configopt | CIVITAI_CONFIG | Optional Civitai Auth connection; defaults to CIVITAI_API_TOKEN or stored OAuth login. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| results | STRING | — |
| blocked | STRING | — |
| triggered_policies | STRING | — |
| workflow_id | STRING | — |
| raw_json | STRING | — |