📎CrewAI Crew
The node that actually runs your agents (and spends your tokens)
- tasks
- agents
- manager_agent
- positive
- negative
Everything else in this pack is setup. This is the payoff. The Crew node takes your assembled agents and tasks, runs them in the right order, and hands you two strings: a positive prompt and a negative prompt. Those wire straight into a CLIPTextEncode → KSampler chain, which is exactly what the pack's Basic_Workflow.json example does - the crew is a prompt-generator sitting in front of a normal ComfyUI sampling graph.
The inputs that matter
tasks(required,CREWAI_TASK) - the jobs to run. A single 📎CrewAI Task connects directly; for several, chain them through a 📎CrewAI Task List first.agents(CREWAI_AGENT) - who does the work. One agent connects directly, or build a cast with 📎CrewAI Agent List.topic(string) - this is the fun one. Any{topic}placeholder inside your task descriptions gets replaced with this value at run time. Type "a sad dog in a dark room" here and every task suddenly knows what it's writing about.isSequential(bool, default true) -trueruns tasks one after another, each to its assigned agent.falseswitches to CrewAI's hierarchical process, where a manager agent coordinates.manager_agent(CREWAI_AGENT) - the coordinator for hierarchical mode. Only used whenisSequentialis false.verbose(bool) - dumps the crew's running commentary to the console. Great for debugging, brutal on log size.
Two outputs, positive and negative, both plain STRING.
Why the output is a prompt pair
Look at the 📎CrewAI Task node and you'll see it's not just a free-text box: it hard-codes a structured JSON output with positive_prompt and negative_prompt fields. The Crew node runs crew.kickoff(inputs={'topic': topic}), reads the final task's JSON, and splits it into those two outputs. So this pack is deliberately built as a prompt-crafting tool for image generation - don't come here expecting general-purpose agent chat. Write your task descriptions as "produce positive and negative prompts about {topic}", and the whole thing clicks.
How to use it, and the traps
The canonical loop: set a topic, run the crew, read the positive/negative outputs, tweak the topic, run again. The example workflows show two endings for those outputs - straight into CLIPTextEncode for a fully automatic "prompt → image" workflow, or into a 📎CrewAI Text node so you can read and edit before they hit the sampler.
Where people get burned:
- Hierarchical mode without a
manager_agent. CrewAI needs someone to delegate. KeepisSequentialon until you have a real multi-agent crew with a manager wired in. - It's synchronous and blocking. The crew executes inside ComfyUI's Python process, so your queue freezes while agents talk to the LLM. A big crew on a local model can hold the UI for minutes.
- If the agents don't produce valid
positive_prompt/negative_promptJSON, the node catches an IndexError and prints it - you'll get an empty output and a confusing console line. That's why the task descriptions need to keep steering the agents toward that exact shape.
Installing
ComfyUI Manager → search "ComfyUI-CrewAI", or git clone https://github.com/luandev/ComfyUI-CrewAI into custom_nodes and pip install -r requirements.txt. The one dependency is CrewAI itself (a chunky install), and there are no model files to fetch - the "model" is whatever LLM your LLM node points at, cloud or local.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| tasks | CREWAI_TASK | — | |
| verboseopt | BOOLEAN | false | — |
| agentsopt | CREWAI_AGENT | — | |
| manager_agentopt | CREWAI_AGENT | — | |
| topicopt | STRING | — | |
| isSequentialopt | BOOLEAN | true | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| positive | STRING | — |
| negative | STRING | — |