Instructions to use saik0s/comfy_backup with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- llama-cpp-python
How to use saik0s/comfy_backup with llama-cpp-python:
# !pip install llama-cpp-python from llama_cpp import Llama llm = Llama.from_pretrained( repo_id="saik0s/comfy_backup", filename="models/text_encoders/Qwen3VL-8B-Uncensored-HauhauCS-Aggressive-Q8_0.gguf", )
llm.create_chat_completion( messages = "No input example has been defined for this model task." )
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use saik0s/comfy_backup with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf saik0s/comfy_backup:Q8_0 # Run inference directly in the terminal: llama cli -hf saik0s/comfy_backup:Q8_0
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf saik0s/comfy_backup:Q8_0 # Run inference directly in the terminal: llama cli -hf saik0s/comfy_backup:Q8_0
Use pre-built binary
# Download pre-built binary from: # https://github.com/ggerganov/llama.cpp/releases # Start a local OpenAI-compatible server with a web UI: ./llama-server -hf saik0s/comfy_backup:Q8_0 # Run inference directly in the terminal: ./llama-cli -hf saik0s/comfy_backup:Q8_0
Build from source code
git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-server llama-cli # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama-server -hf saik0s/comfy_backup:Q8_0 # Run inference directly in the terminal: ./build/bin/llama-cli -hf saik0s/comfy_backup:Q8_0
Use Docker
docker model run hf.co/saik0s/comfy_backup:Q8_0
- LM Studio
- Jan
- Ollama
How to use saik0s/comfy_backup with Ollama:
ollama run hf.co/saik0s/comfy_backup:Q8_0
- Unsloth Studio
How to use saik0s/comfy_backup with Unsloth Studio:
Install Unsloth Studio (macOS, Linux, WSL)
curl -fsSL https://unsloth.ai/install.sh | sh # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for saik0s/comfy_backup to start chatting
Install Unsloth Studio (Windows)
irm https://unsloth.ai/install.ps1 | iex # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for saik0s/comfy_backup to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for saik0s/comfy_backup to start chatting
- Pi
How to use saik0s/comfy_backup with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf saik0s/comfy_backup:Q8_0
Configure the model in Pi
# Install Pi: npm install -g @mariozechner/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "saik0s/comfy_backup:Q8_0" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Hermes Agent new
How to use saik0s/comfy_backup with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf saik0s/comfy_backup:Q8_0
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default saik0s/comfy_backup:Q8_0
Run Hermes
hermes
- Atomic Chat new
- OpenClaw new
How to use saik0s/comfy_backup with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf saik0s/comfy_backup:Q8_0
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "saik0s/comfy_backup:Q8_0" \ --custom-provider-id llama-cpp \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
- Docker Model Runner
How to use saik0s/comfy_backup with Docker Model Runner:
docker model run hf.co/saik0s/comfy_backup:Q8_0
- Lemonade
How to use saik0s/comfy_backup with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull saik0s/comfy_backup:Q8_0
Run and chat with the model
lemonade run user.comfy_backup-Q8_0
List all available models
lemonade list
| import type { | |
| INodeInputSlot, | |
| INodeOutputSlot, | |
| LGraphEventMode, | |
| LGraphGroup, | |
| LGraphNode, | |
| LLink, | |
| } from "@comfyorg/frontend"; | |
| import {app} from "scripts/app.js"; | |
| import {BaseCollectorNode} from "./base_node_collector.js"; | |
| import {NodeTypesString, stripRgthree} from "./constants.js"; | |
| import { | |
| PassThroughFollowing, | |
| addConnectionLayoutSupport, | |
| changeModeOfNodes, | |
| getConnectedInputNodesAndFilterPassThroughs, | |
| getConnectedOutputNodesAndFilterPassThroughs, | |
| getGroupNodes, | |
| } from "./utils.js"; | |
| class NodeModeRepeater extends BaseCollectorNode { | |
| override readonly inputsPassThroughFollowing: PassThroughFollowing = PassThroughFollowing.ALL; | |
| static override type = NodeTypesString.NODE_MODE_REPEATER; | |
| static override title = NodeTypesString.NODE_MODE_REPEATER; | |
| override comfyClass = NodeTypesString.NODE_MODE_REPEATER; | |
| private hasRelayInput = false; | |
| private hasTogglerOutput = false; | |
| constructor(title?: string) { | |
| super(title); | |
| this.onConstructed(); | |
| } | |
| override onConstructed(): boolean { | |
| this.addOutput("OPT_CONNECTION", "*", { | |
| color_on: "#Fc0", | |
| color_off: "#a80", | |
| }); | |
| return super.onConstructed(); | |
| } | |
| override onConnectOutput( | |
| outputIndex: number, | |
| inputType: string | -1, | |
| inputSlot: INodeInputSlot, | |
| inputNode: LGraphNode, | |
| inputIndex: number, | |
| ): boolean { | |
| // We can only connect to a a FAST_MUTER or FAST_BYPASSER if we aren't connectged to a relay, since the relay wins. | |
| let canConnect = !this.hasRelayInput; | |
| canConnect = | |
| canConnect && super.onConnectOutput(outputIndex, inputType, inputSlot, inputNode, inputIndex); | |
| // Output can only connect to a FAST MUTER, FAST BYPASSER, NODE_COLLECTOR OR ACTION BUTTON | |
| let nextNode = getConnectedOutputNodesAndFilterPassThroughs(this, inputNode)[0] || inputNode; | |
| return ( | |
| canConnect && | |
| [ | |
| NodeTypesString.FAST_MUTER, | |
| NodeTypesString.FAST_BYPASSER, | |
| NodeTypesString.NODE_COLLECTOR, | |
| NodeTypesString.FAST_ACTIONS_BUTTON, | |
| NodeTypesString.REROUTE, | |
| NodeTypesString.RANDOM_UNMUTER, | |
| ].includes(nextNode.type || "") | |
| ); | |
| } | |
| override onConnectInput( | |
| inputIndex: number, | |
| outputType: string | -1, | |
| outputSlot: INodeOutputSlot, | |
| outputNode: LGraphNode, | |
| outputIndex: number, | |
| ): boolean { | |
| // We can only connect to a a FAST_MUTER or FAST_BYPASSER if we aren't connectged to a relay, since the relay wins. | |
| let canConnect = super.onConnectInput?.( | |
| inputIndex, | |
| outputType, | |
| outputSlot, | |
| outputNode, | |
| outputIndex, | |
| ); | |
| // Output can only connect to a FAST MUTER or FAST BYPASSER | |
| let nextNode = getConnectedOutputNodesAndFilterPassThroughs(this, outputNode)[0] || outputNode; | |
| const isNextNodeRelay = nextNode.type === NodeTypesString.NODE_MODE_RELAY; | |
| return canConnect && (!isNextNodeRelay || !this.hasTogglerOutput); | |
| } | |
| override onConnectionsChange( | |
| type: number, | |
| slotIndex: number, | |
| isConnected: boolean, | |
| linkInfo: LLink, | |
| ioSlot: INodeOutputSlot | INodeInputSlot, | |
| ): void { | |
| super.onConnectionsChange(type, slotIndex, isConnected, linkInfo, ioSlot); | |
| let hasTogglerOutput = false; | |
| let hasRelayInput = false; | |
| const outputNodes = getConnectedOutputNodesAndFilterPassThroughs(this); | |
| for (const outputNode of outputNodes) { | |
| if ( | |
| outputNode?.type === NodeTypesString.FAST_MUTER || | |
| outputNode?.type === NodeTypesString.FAST_BYPASSER | |
| ) { | |
| hasTogglerOutput = true; | |
| break; | |
| } | |
| } | |
| const inputNodes = getConnectedInputNodesAndFilterPassThroughs(this); | |
| for (const [index, inputNode] of inputNodes.entries()) { | |
| if (inputNode?.type === NodeTypesString.NODE_MODE_RELAY) { | |
| // We can't be connected to a relay if we're connected to a toggler. Something has gone wrong. | |
| if (hasTogglerOutput) { | |
| console.log(`Can't be connected to a Relay if also output to a toggler.`); | |
| this.disconnectInput(index); | |
| } else { | |
| hasRelayInput = true; | |
| if (this.inputs[index]) { | |
| this.inputs[index]!.color_on = "#FC0"; | |
| this.inputs[index]!.color_off = "#a80"; | |
| } | |
| } | |
| } else { | |
| changeModeOfNodes(inputNode, this.mode); | |
| } | |
| } | |
| this.hasTogglerOutput = hasTogglerOutput; | |
| this.hasRelayInput = hasRelayInput; | |
| // If we have a relay input, then we should remove the toggler output, or add it if not. | |
| if (this.hasRelayInput) { | |
| if (this.outputs[0]) { | |
| this.disconnectOutput(0); | |
| this.removeOutput(0); | |
| } | |
| } else if (!this.outputs[0]) { | |
| this.addOutput("OPT_CONNECTION", "*", { | |
| color_on: "#Fc0", | |
| color_off: "#a80", | |
| }); | |
| } | |
| } | |
| /** When a mode change, we want all connected nodes to match except for connected relays. */ | |
| override onModeChange(from: LGraphEventMode | undefined, to: LGraphEventMode) { | |
| super.onModeChange(from, to); | |
| const linkedNodes = getConnectedInputNodesAndFilterPassThroughs(this).filter( | |
| (node) => node.type !== NodeTypesString.NODE_MODE_RELAY, | |
| ); | |
| if (linkedNodes.length) { | |
| for (const node of linkedNodes) { | |
| if (node.type !== NodeTypesString.NODE_MODE_RELAY) { | |
| // Use "to" as there may be other getters in the way to access this.mode directly. | |
| changeModeOfNodes(node, to); | |
| } | |
| } | |
| } else if (this.graph?._groups?.length) { | |
| // No linked nodes.. check if we're in a group. | |
| for (const group of this.graph._groups as LGraphGroup[]) { | |
| group.recomputeInsideNodes(); | |
| const groupNodes = getGroupNodes(group); | |
| if (groupNodes?.includes(this)) { | |
| for (const node of groupNodes) { | |
| if (node !== this) { | |
| // Use "to" as there may be other getters in the way to access this.mode directly. | |
| changeModeOfNodes(node, to); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| override getHelp(): string { | |
| return ` | |
| <p> | |
| When this node's mode (Mute, Bypass, Active) changes, it will "repeat" that mode to all | |
| connected input nodes, or, if there are no connected nodes AND it is overlapping a group, | |
| "repeat" it's mode to all nodes in that group. | |
| </p> | |
| <ul> | |
| <li><p> | |
| Optionally, connect this mode's output to a ${stripRgthree(NodeTypesString.FAST_MUTER)} | |
| or ${stripRgthree(NodeTypesString.FAST_BYPASSER)} for a single toggle to quickly | |
| mute/bypass all its connected nodes. | |
| </p></li> | |
| <li><p> | |
| Optionally, connect a ${stripRgthree(NodeTypesString.NODE_MODE_RELAY)} to this nodes | |
| inputs to have it automatically toggle its mode. If connected, this will always take | |
| precedence (and disconnect any connected fast togglers). | |
| </p></li> | |
| </ul> | |
| `; | |
| } | |
| } | |
| app.registerExtension({ | |
| name: "rgthree.NodeModeRepeater", | |
| registerCustomNodes() { | |
| addConnectionLayoutSupport(NodeModeRepeater, app, [ | |
| ["Left", "Right"], | |
| ["Right", "Left"], | |
| ]); | |
| LiteGraph.registerNodeType(NodeModeRepeater.type, NodeModeRepeater); | |
| NodeModeRepeater.category = NodeModeRepeater._category; | |
| }, | |
| }); | |