Reference to video generation on my own machine, automated end to end through MCP. This is the full write-up promised in the LinkedIn post: what the model does differently, how the automation works, how to set it up yourself, and where the trade-offs sit. The skill that runs it all is free on GitHub: minimax-h3-comfyui-desktop-mcp
The experiment
I was not looking for a new model. I was looking for a workstream that is stable, usable and repeatable, because in video generation the real cost is rarely the render time, it is the hours spent refining prompts to drag a model towards what you actually wanted. The more direction and control a workflow accepts, the more trustworthy the process becomes, and the fewer times you generate to get the shot.
MiniMax H3 caught my attention for exactly that reason. It is what MiniMax call an omni-modal model, meaning one model that reads text, images, video and audio together as a single context rather than treating each as a separate task with its own pipeline. In practice, that changes how references behave. In the Wan 2.2 reference workflows I had used before, a reference image ends up applied over the source clip, so you stay close to what was filmed. H3 instead reinterprets the motion in the reference video through the images you give it. Feed it a stock clip of 3 women running up stadium steps and an image of 3 gladiators in a similar perspective, and you get gladiators on the steps, not a costume swap. That means complex motion, multiple characters, and consistency held across all of them.
There is also a sourcing angle that matters for commercial work. Because the reference video only carries movement and never appears in the output, the whole pipeline can be assembled from cleared material: motion from a licensed library such as Adobe Stock, or from your own 3D animation and motion capture (I have run tests with Houdini setups as the motion source, and it worked remarkably well), with the look coming from an image generator that has commercial terms behind it.
The approach
The model is only half the story. Driving ComfyUI by hand for every test means loading the workflow, swapping file paths, writing the prompt in the exact structure the model expects, queueing, waiting, then repeating the whole dance for the upscale. So I connected my local ComfyUI to Claude through MCP and moved all of that into a skill.
The MCP connection itself reached the server easily and then could not read any of my workflows, which is where most people would stop. The fix was writing a skill that carries the whole setup: which workflow to load, which node controls what, the prompt structure MiniMax H3 expects, how to prepare the reference video before it touches the graph, and the quirks of the machine that quietly break things if ignored. With that in place, my part of the job is putting 2 references in a folder and describing the action in a line or two. Claude writes the prompt, prepares the references, queues the generation, polls it, and passes the result through a Wan 2.2 upscale.
The skill is the part I am sharing, and it is free: minimax-h3-comfyui-desktop-mcp
The result
On an RTX 5090 laptop, a 5 second clip at 1 megapixel, roughly 1344 x 752 in 16:9, takes around 20 minutes to generate, plus about 8 minutes for the Wan 2.2 upscale. Resolution is the whole cost curve, and it is not linear: the model set is already larger than the available VRAM, so every step up in resolution pays twice, once in pixels and again in memory offloading. I settled on lower resolutions for look tests and only commit to higher ones once a shot is decided. Downscaling the reference video to around 960 wide before it enters the workflow is the single biggest saving available, since that clip only carries movement and any detail in it is thrown away regardless.
Twenty-eight minutes for one clip sounds like a lot until you count the alternative. I have spent entire afternoons on similar shots in LTX 2.3 and other fast models, each generation finishing in about 2 minutes on the same settings, refining prompts for results that stayed random. Fewer, more directed generations beat many fast ones. Less like a round of Russian roulette.
The 3 gladiator test held faces and footfalls consistent, which is where these things usually come apart. It has also worked on busier scenes with crowds, and on 3D animation as the motion source.
Setting it up yourself
A note before you start. This guide is shared as is, for information only, and describes what worked on my own machine. Running the commands, scripts and prompts in this article is entirely at your own risk, and I accept no responsibility or liability for any loss, damage, data issues or system problems that may result from following it. Modifying system settings, execution policies and configuration files can affect how your machine behaves, so only proceed if you are comfortable working with tools like PowerShell, and back up anything you care about first. The third-party software mentioned here belongs to its respective owners, and their own licences and terms apply.
What follows is the full setup for connecting Claude Desktop to a local ComfyUI on Windows. It takes about 15 minutes, and it works for any install type (ComfyUI Desktop, portable or manual, on any drive). Fair warning that the desktop setup takes a bit more work than the ComfyUI Cloud MCP, but every failure point below was diagnosed with Claude's help, so keep a chat open while you follow along and paste any error straight in.
You need Windows 10 or 11, Claude Desktop, and a ComfyUI install that launches.
Step 1. Check prerequisites
Open PowerShell and run:
powershell
git --version python --version
git --version python --version
Both should print a version. If not:
powershell
winget install Git.Git winget install Python.Python.3.12
winget install Git.Git winget install Python.Python.3.12
Close and reopen PowerShell afterwards so the PATH updates.
Step 2. Find your ComfyUI port
Launch ComfyUI, then verify the API responds:
powershell
Invoke-WebRequest http://127.0.0.1:8188/system_stats -UseBasicParsing | Select-Object StatusCode
Invoke-WebRequest http://127.0.0.1:8188/system_stats -UseBasicParsing | Select-Object StatusCode
A 200 means your URL is http://127.0.0.1:8188. If it fails, your install uses a different port: ComfyUI Desktop shows it under Settings, Server Config, and portable installs print it in the console at startup. Note the working URL, you need it in step 4.
Step 3. Install the MCP server
powershell
cd $env:USERPROFILE git clone https://github.com/MatthewSnow2/comfyui-mcp.git cd comfyui-mcp python -m venv .venv .\.venv\Scripts\Activate.ps1
cd $env:USERPROFILE git clone https://github.com/MatthewSnow2/comfyui-mcp.git cd comfyui-mcp python -m venv .venv .\.venv\Scripts\Activate.ps1
If the last line throws a red PSSecurityException, PowerShell is blocking scripts. Fix it once and retry:
powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
You should now see (.venv) at the start of your prompt. Only then install (without the editable flag, which has a packaging issue in this repo), and pin the MCP SDK, since the repo was written against an older version:
powershell
pip install ".[dev]" pip install "mcp<2"
pip install ".[dev]" pip install "mcp<2"
Now test the server manually, before Claude is even involved:
powershell
$env:COMFYUI_URL="http://127.0.0.1:8188" $env:PYTHONPATH="$env:USERPROFILE\comfyui-mcp" & "$env:USERPROFILE\comfyui-mcp\.venv\Scripts\comfyui-mcp.exe"
$env:COMFYUI_URL="http://127.0.0.1:8188" $env:PYTHONPATH="$env:USERPROFILE\comfyui-mcp" & "$env:USERPROFILE\comfyui-mcp\.venv\Scripts\comfyui-mcp.exe"
If it sits there silently doing nothing, that is correct. MCP servers wait quietly for input. Press Ctrl+C to exit. A No module named 'src' error means the PYTHONPATH line was skipped, and No module named 'mcp.server.fastmcp' means the mcp<2 pin was skipped.
Step 4. Configure Claude Desktop
This is where most setups go wrong, because Claude may read its config from a different file than the one you edited. Always open the real one: Claude Desktop, settings gear, Developer, then Edit Config under Local MCP servers. That opens claude_desktop_config.json, the file Claude actually reads.
Add this block, replacing YOURUSER with your Windows username and the URL with yours from step 2:
json
{ "mcpServers": { "comfyui": { "command": "C:\\Users\\YOURUSER\\comfyui-mcp\\.venv\\Scripts\\comfyui-mcp.exe", "env": { "COMFYUI_URL": "http://127.0.0.1:8188", "PYTHONPATH": "C:\\Users\\YOURUSER\\comfyui-mcp" } } } }
{ "mcpServers": { "comfyui": { "command": "C:\\Users\\YOURUSER\\comfyui-mcp\\.venv\\Scripts\\comfyui-mcp.exe", "env": { "COMFYUI_URL": "http://127.0.0.1:8188", "PYTHONPATH": "C:\\Users\\YOURUSER\\comfyui-mcp" } } } }
If the file already has content, insert the mcpServers block inside the existing outermost braces rather than stacking a second object. The JSON rules that trip everyone up: double backslashes in Windows paths, exactly one opening and one closing brace at the root, and no trailing comma after the last item. Validate before restarting:
powershell
Get-Content "PATH\TO\claude_desktop_config.json" -Raw | ConvertFrom-Json
Get-Content "PATH\TO\claude_desktop_config.json" -Raw | ConvertFrom-Json
An object printed back means valid. A red error names the broken line.
Step 5. Restart and verify
Order matters. Start ComfyUI first and confirm the API responds. Then fully quit Claude Desktop from the system tray icon, since closing the window is not enough and the config is only read at startup. Relaunch, go back to Settings, Developer, and the comfyui entry should show a running badge.
If it shows failed but the manual test from step 3 works, compare the env vars in your config against the ones you set manually. Nine times out of ten one is missing from the config.
Step 6. Test it and add the skill
Open a new chat and ask:
What ComfyUI tools do you have available?
Claude should list the server's tools. From there, add the skill from the GitHub repo and it handles the rest: workflow selection, prompt structure, reference preparation, and the machine-specific fixes. If anything in the setup fails, screenshot the error and ask Claude. Every failure documented above was diagnosed exactly that way.
What's next
These are still early tests, and 20 minutes a clip is not a production pipeline. Where it earns its place today is look development, character consistency and proving a shot before anyone commits to a shoot. The next round of tests is on longer motion sources and mixed 3D and live-action references, and the skill will keep absorbing what those runs teach it. The models will keep changing. The layer underneath them, the part that makes any of them usable day to day, is what I am really building.
The experiment
I was not looking for a new model. I was looking for a workstream that is stable, usable and repeatable, because in video generation the real cost is rarely the render time, it is the hours spent refining prompts to drag a model towards what you actually wanted. The more direction and control a workflow accepts, the more trustworthy the process becomes, and the fewer times you generate to get the shot.
MiniMax H3 caught my attention for exactly that reason. It is what MiniMax call an omni-modal model, meaning one model that reads text, images, video and audio together as a single context rather than treating each as a separate task with its own pipeline. In practice, that changes how references behave. In the Wan 2.2 reference workflows I had used before, a reference image ends up applied over the source clip, so you stay close to what was filmed. H3 instead reinterprets the motion in the reference video through the images you give it. Feed it a stock clip of 3 women running up stadium steps and an image of 3 gladiators in a similar perspective, and you get gladiators on the steps, not a costume swap. That means complex motion, multiple characters, and consistency held across all of them.
There is also a sourcing angle that matters for commercial work. Because the reference video only carries movement and never appears in the output, the whole pipeline can be assembled from cleared material: motion from a licensed library such as Adobe Stock, or from your own 3D animation and motion capture (I have run tests with Houdini setups as the motion source, and it worked remarkably well), with the look coming from an image generator that has commercial terms behind it.
The approach
The model is only half the story. Driving ComfyUI by hand for every test means loading the workflow, swapping file paths, writing the prompt in the exact structure the model expects, queueing, waiting, then repeating the whole dance for the upscale. So I connected my local ComfyUI to Claude through MCP and moved all of that into a skill.
The MCP connection itself reached the server easily and then could not read any of my workflows, which is where most people would stop. The fix was writing a skill that carries the whole setup: which workflow to load, which node controls what, the prompt structure MiniMax H3 expects, how to prepare the reference video before it touches the graph, and the quirks of the machine that quietly break things if ignored. With that in place, my part of the job is putting 2 references in a folder and describing the action in a line or two. Claude writes the prompt, prepares the references, queues the generation, polls it, and passes the result through a Wan 2.2 upscale.
The skill is the part I am sharing, and it is free: minimax-h3-comfyui-desktop-mcp
The result
On an RTX 5090 laptop, a 5 second clip at 1 megapixel, roughly 1344 x 752 in 16:9, takes around 20 minutes to generate, plus about 8 minutes for the Wan 2.2 upscale. Resolution is the whole cost curve, and it is not linear: the model set is already larger than the available VRAM, so every step up in resolution pays twice, once in pixels and again in memory offloading. I settled on lower resolutions for look tests and only commit to higher ones once a shot is decided. Downscaling the reference video to around 960 wide before it enters the workflow is the single biggest saving available, since that clip only carries movement and any detail in it is thrown away regardless.
Twenty-eight minutes for one clip sounds like a lot until you count the alternative. I have spent entire afternoons on similar shots in LTX 2.3 and other fast models, each generation finishing in about 2 minutes on the same settings, refining prompts for results that stayed random. Fewer, more directed generations beat many fast ones. Less like a round of Russian roulette.
The 3 gladiator test held faces and footfalls consistent, which is where these things usually come apart. It has also worked on busier scenes with crowds, and on 3D animation as the motion source.
Setting it up yourself
A note before you start. This guide is shared as is, for information only, and describes what worked on my own machine. Running the commands, scripts and prompts in this article is entirely at your own risk, and I accept no responsibility or liability for any loss, damage, data issues or system problems that may result from following it. Modifying system settings, execution policies and configuration files can affect how your machine behaves, so only proceed if you are comfortable working with tools like PowerShell, and back up anything you care about first. The third-party software mentioned here belongs to its respective owners, and their own licences and terms apply.
What follows is the full setup for connecting Claude Desktop to a local ComfyUI on Windows. It takes about 15 minutes, and it works for any install type (ComfyUI Desktop, portable or manual, on any drive). Fair warning that the desktop setup takes a bit more work than the ComfyUI Cloud MCP, but every failure point below was diagnosed with Claude's help, so keep a chat open while you follow along and paste any error straight in.
You need Windows 10 or 11, Claude Desktop, and a ComfyUI install that launches.
Step 1. Check prerequisites
Open PowerShell and run:
powershell
git --version python --version
Both should print a version. If not:
powershell
winget install Git.Git winget install Python.Python.3.12
Close and reopen PowerShell afterwards so the PATH updates.
Step 2. Find your ComfyUI port
Launch ComfyUI, then verify the API responds:
powershell
Invoke-WebRequest http://127.0.0.1:8188/system_stats -UseBasicParsing | Select-Object StatusCode
A 200 means your URL is http://127.0.0.1:8188. If it fails, your install uses a different port: ComfyUI Desktop shows it under Settings, Server Config, and portable installs print it in the console at startup. Note the working URL, you need it in step 4.
Step 3. Install the MCP server
powershell
cd $env:USERPROFILE git clone https://github.com/MatthewSnow2/comfyui-mcp.git cd comfyui-mcp python -m venv .venv .\.venv\Scripts\Activate.ps1
If the last line throws a red PSSecurityException, PowerShell is blocking scripts. Fix it once and retry:
powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
You should now see (.venv) at the start of your prompt. Only then install (without the editable flag, which has a packaging issue in this repo), and pin the MCP SDK, since the repo was written against an older version:
powershell
pip install ".[dev]" pip install "mcp<2"
Now test the server manually, before Claude is even involved:
powershell
$env:COMFYUI_URL="http://127.0.0.1:8188" $env:PYTHONPATH="$env:USERPROFILE\comfyui-mcp" & "$env:USERPROFILE\comfyui-mcp\.venv\Scripts\comfyui-mcp.exe"
If it sits there silently doing nothing, that is correct. MCP servers wait quietly for input. Press Ctrl+C to exit. A No module named 'src' error means the PYTHONPATH line was skipped, and No module named 'mcp.server.fastmcp' means the mcp<2 pin was skipped.
Step 4. Configure Claude Desktop
This is where most setups go wrong, because Claude may read its config from a different file than the one you edited. Always open the real one: Claude Desktop, settings gear, Developer, then Edit Config under Local MCP servers. That opens claude_desktop_config.json, the file Claude actually reads.
Add this block, replacing YOURUSER with your Windows username and the URL with yours from step 2:
json
{ "mcpServers": { "comfyui": { "command": "C:\\Users\\YOURUSER\\comfyui-mcp\\.venv\\Scripts\\comfyui-mcp.exe", "env": { "COMFYUI_URL": "http://127.0.0.1:8188", "PYTHONPATH": "C:\\Users\\YOURUSER\\comfyui-mcp" } } } }
If the file already has content, insert the mcpServers block inside the existing outermost braces rather than stacking a second object. The JSON rules that trip everyone up: double backslashes in Windows paths, exactly one opening and one closing brace at the root, and no trailing comma after the last item. Validate before restarting:
powershell
Get-Content "PATH\TO\claude_desktop_config.json" -Raw | ConvertFrom-Json
An object printed back means valid. A red error names the broken line.
Step 5. Restart and verify
Order matters. Start ComfyUI first and confirm the API responds. Then fully quit Claude Desktop from the system tray icon, since closing the window is not enough and the config is only read at startup. Relaunch, go back to Settings, Developer, and the comfyui entry should show a running badge.
If it shows failed but the manual test from step 3 works, compare the env vars in your config against the ones you set manually. Nine times out of ten one is missing from the config.
Step 6. Test it and add the skill
Open a new chat and ask:
What ComfyUI tools do you have available?
Claude should list the server's tools. From there, add the skill from the GitHub repo and it handles the rest: workflow selection, prompt structure, reference preparation, and the machine-specific fixes. If anything in the setup fails, screenshot the error and ask Claude. Every failure documented above was diagnosed exactly that way.
What's next
These are still early tests, and 20 minutes a clip is not a production pipeline. Where it earns its place today is look development, character consistency and proving a shot before anyone commits to a shoot. The next round of tests is on longer motion sources and mixed 3D and live-action references, and the skill will keep absorbing what those runs teach it. The models will keep changing. The layer underneath them, the part that makes any of them usable day to day, is what I am really building.



