Anymatix
The nodes Anymatix runs on: URL-addressed model loaders that download what a workflow asks for, plus CLIPSeg, masking, SAM2 coordinates and the save nodes Anymatix reads its results from.
Nodes (37)
Read an audio clip's length off the file itself — stop guessing the duration in your workflow
Load the audio encoder behind Stable Audio and the new audio-generating models
The adapter that feeds a downloaded voice pack into Chatterbox's dropdown without patching Chatterbox
Loads a checkpoint from a path, not a dropdown — the point is the workflow survives being shared
Load a CLIP text encoder by path — with the built-in recipe list that tells you which one your model actually wants
The exact same CLIP loader as the other one — here's why it exists and which to use
Describe the thing you want masked and get the mask — 'the cat', 'the sky', done
Load the vision encoder your image-prompt and IP-Adapter workflows need — by path instead of dropdown
Load the ControlNet that keeps your pose, edges or depth honest — path-based, fetcher-friendly
The two-encoder loader Flux and SDXL actually need — path-based, with the pairing cheat-sheet built in
DWPose pose estimation that works fully offline — no surprise Hugging Face calls at run time
The heart of the whole Anymatix pack — a node that turns a model URL into a local path
Turn 'however long the clip is' into the exact frame count LTX will accept — 8n+1, no rejections
HED soft edges from a local checkpoint — the ControlNet preprocessor that never phones home
The save node with a format for everything — PNG through OpenEXR, counters, and JSON sidecars
Turn a batch of generated frames into an actual VIDEO object — with optional audio attached
Load the model that doubles your image in latent space before the detail pass
A LoRA loader that takes a path and remembers what it loaded — the fetcher's natural partner
The LoRA loader for when you don't want to touch the text encoder — and it takes a plain filename
The text encoder behind LTX's audio-video sync — when your video needs to talk
LTX won't run your canvas unless it's a multiple of 64 — this node fixes that for you
The audio VAE loader for LTX workflows, with a URL instead of a dropdown
Multiply by a mask
Turn a mask into SAM click-points, so you can re-segment anything
Load a model patch by URL so it's there when the graph finally runs
Four text encoders in one CLIP object — ComfyUI stops at two, this doesn't
Load a SAM2 model from a URL — and you'll still need kijai's pack installed
Save a VIDEO object as a real MP4, with FFmpeg doing the heavy lifting
Write an AUDIO object to a real file — mp3, wav, flac, or aac — without fighting codecs
Dump anything — tensors included — to a JSON file so something downstream can read it
This 'loader' doesn't load anything — it hands config to a SeedVR2 node that lives in the app
The SeedVR2 VAE half of the config pair — and why tiling is the knob you'll actually touch
Load three text encoders into one CLIP — for the models ComfyUI's dual loader can't reach
The UNET/diffusion-model loader that takes a URL instead of a dropdown
The upscale-model loader that actually works with ImageUpscaleWithModel — URL-addressed edition
A VAE loader that takes a path, for workflows whose VAE hasn't downloaded yet
Fully-offline ZoeDepth depth maps — loads its weights from a local path, never the Hub
anymatix-comfy-nodes
The ComfyUI nodes Anymatix runs on.
Anymatix is a desktop application for generative image and video work. It drives a ComfyUI it manages itself, and the workflows it ships are addressed by URL rather than by filename: a card says this checkpoint, this LoRA, this VAE, and the node downloads it, verifies it, deduplicates it and hands the loader a path. This pack is that mechanism, plus the save and utility nodes those workflows need.
It is published so that a workflow exported from Anymatix opens in a stock ComfyUI. You do not need Anymatix to use it.
comfy node install anymatix-comfy-nodes
What it gives you
URL-addressed loaders. AnymatixFetcher takes a URL and a model type and
returns the local path of the file, downloading it if it is not there. It
resumes interrupted transfers, verifies size, computes a SHA-256 and reuses a
model it already holds under another URL. Around it sit thin twins of ComfyUI's
own loaders — checkpoint, LoRA, VAE, CLIP (single/dual/triple/quadruple), UNET,
ControlNet, CLIP-Vision, upscale, model patch, audio encoder, LTX audio VAE and
text encoder, latent upscale, SAM2 — which differ from the originals in one
respect: they take a path instead of a dropdown, because the file may not have
existed when the graph was written.
Save nodes. AnymatixImageSave, AnymatixSaveAnimatedMP4,
AnymatixSaveAudio, AnymatixSaveJson — the results Anymatix reads back.
AnymatixImageToVideo wraps a batch of frames plus optional audio as a VIDEO.
Utilities. AnymatixCLIPSeg (text-prompted segmentation),
AnymatixMaskImage, AnymatixMaskToSAMcoord (a mask becomes SAM point
prompts), AnymatixAudioDuration and AnymatixFrameCount (read a length off
the file instead of asking for it), AnymatixLTXResizeToClosestValidSize.
Offline preprocessors. AnymatixDWPreprocessor, AnymatixHEDPreprocessor
and AnymatixZoeDepthAnythingPreprocessor wrap the comfyui_controlnet_aux
implementations but load their weights from a local path, so they work with
HF_HUB_OFFLINE=1 and never call the Hub at run time.
Optional siblings
Some nodes wrap other packs. Each is checked when it is used, not at import, so a missing one costs you that node and nothing else:
| node | needs |
|---|---|
| AnymatixUNETLoaderGGUF | ComfyUI-GGUF |
| AnymatixSAM2Loader | ComfyUI-segment-anything-2 |
| AnymatixDWPreprocessor, AnymatixHEDPreprocessor | comfyui_controlnet_aux |
| AnymatixChatterboxPackFromFetchedName | ComfyUI-Chatterbox |
HTTP routes this pack adds — read this before exposing ComfyUI
Installing this pack registers routes on your ComfyUI server. If you run
ComfyUI with --listen, they are reachable by anything that can reach it, with
no authentication, exactly like ComfyUI's own routes.
| route | what it does |
|---|---|
| GET /anymatix/log, /anymatix/resources, /anymatix/cache_size, /anymatix/storage_location, /anymatix/host_compute_metrics | read-only: logs, the model listing, cache size, CPU/GPU load |
| GET /anymatix/{output,input,models}/… | serves files from those directories |
| POST /anymatix/uploadAsset | writes a file named <sha256>.<ext> into the input dir or a model root; the hash is verified after the write and the name is validated before it |
| POST /anymatix/expunge, /anymatix/release_results, /anymatix/cache_gc | delete cached results and input assets |
| POST /anymatix/delete_resource | deletes a model file and its sidecar, by URL; restricted to ComfyUI's own model roots |
| GET /anymatix/reboot | clears the queue and unloads models (?deep=true also reloads modules) |
| POST /anymatix/heartbeat | see below |
The heartbeat cannot stop your machine. Anymatix uses it as a dead-man's
switch: if the app stops pinging, the ComfyUI it started exits, and on a rented
cloud GPU the pod is stopped so the billing ends. That only ever arms when
ANYMATIX_HEARTBEAT_PORT is set, which Anymatix's own launcher does and nothing
else does. On your ComfyUI the route answers {"armed": false} and arms
nothing.
Cache expiry
Results under output/anymatix/results and hash-named files in input/ are
swept on a timer, since both are recomputable. Every interval is an environment
variable and 0 disables that half:
| variable | default |
|---|---|
| ANYMATIX_CACHE_GC_INTERVAL | 600 s (0 disables the sweep entirely) |
| ANYMATIX_CACHE_TTL_RESULTS | 86400 s |
| ANYMATIX_CACHE_TTL_INPUTS | 3600 s |
| ANYMATIX_CACHE_MIN_AGE | 900 s |
Nothing referenced by the queue is ever swept, and serving a result renews it.
Downloads
Large files are fetched in parallel byte ranges when the server supports
Range, and fall back to one stream when it does not — which is also the resume
path. Bytes accumulate in <name>.part and the file is given its real name only
when its size matches what the server declared, so a partial download can never
be mistaken for a model. aiohttp and aiofiles make the parallel path
available; without them the single stream is used.
We publish no speed numbers here. An earlier version of this file did, and nothing in the repository measured them.
Requirements
ComfyUI, and the packages in pyproject.toml. Everything else this code
imports — torch, requests, transformers, spandrel — is already a ComfyUI
dependency.
Third-party code
poly_decomp.py— the Bayazit convex decomposition, ported from wsilva32/poly_decomp.py; the mask-to-SAM approach follows Glidias/mask2sam.AnymatixSAM2Loaderis adapted fromDownloadAndLoadSAM2Modelin kijai/ComfyUI-segment-anything-2 (Apache 2.0).AnymatixMaskImagereproduces matplotlib'sGreys_rramp from its own control points rather than importing matplotlib.
Licence
GNU General Public License v3.0 — see LICENSE.