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="ComfyUI/models/text_encoders/gemma-3-12b-it-q2_k.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:Q4_K_S # Run inference directly in the terminal: llama cli -hf saik0s/comfy_backup:Q4_K_S
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf saik0s/comfy_backup:Q4_K_S # Run inference directly in the terminal: llama cli -hf saik0s/comfy_backup:Q4_K_S
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:Q4_K_S # Run inference directly in the terminal: ./llama-cli -hf saik0s/comfy_backup:Q4_K_S
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:Q4_K_S # Run inference directly in the terminal: ./build/bin/llama-cli -hf saik0s/comfy_backup:Q4_K_S
Use Docker
docker model run hf.co/saik0s/comfy_backup:Q4_K_S
- LM Studio
- Jan
- Ollama
How to use saik0s/comfy_backup with Ollama:
ollama run hf.co/saik0s/comfy_backup:Q4_K_S
- 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:Q4_K_S
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:Q4_K_S" } ] } } }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:Q4_K_S
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:Q4_K_S
Run Hermes
hermes
- Atomic Chat new
- Docker Model Runner
How to use saik0s/comfy_backup with Docker Model Runner:
docker model run hf.co/saik0s/comfy_backup:Q4_K_S
- Lemonade
How to use saik0s/comfy_backup with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull saik0s/comfy_backup:Q4_K_S
Run and chat with the model
lemonade run user.comfy_backup-Q4_K_S
List all available models
lemonade list
| from comfy_execution.graph_utils import GraphBuilder, is_link | |
| from comfy_execution.graph import ExecutionBlocker | |
| from .tools import VariantSupport | |
| NUM_FLOW_SOCKETS = 5 | |
| class TestWhileLoopOpen: | |
| def __init__(self): | |
| pass | |
| def INPUT_TYPES(cls): | |
| inputs = { | |
| "required": { | |
| "condition": ("BOOLEAN", {"default": True}), | |
| }, | |
| "optional": { | |
| }, | |
| } | |
| for i in range(NUM_FLOW_SOCKETS): | |
| inputs["optional"][f"initial_value{i}"] = ("*",) | |
| return inputs | |
| RETURN_TYPES = tuple(["FLOW_CONTROL"] + ["*"] * NUM_FLOW_SOCKETS) | |
| RETURN_NAMES = tuple(["FLOW_CONTROL"] + [f"value{i}" for i in range(NUM_FLOW_SOCKETS)]) | |
| FUNCTION = "while_loop_open" | |
| CATEGORY = "Testing/Flow" | |
| def while_loop_open(self, condition, **kwargs): | |
| values = [] | |
| for i in range(NUM_FLOW_SOCKETS): | |
| values.append(kwargs.get(f"initial_value{i}", None)) | |
| return tuple(["stub"] + values) | |
| class TestWhileLoopClose: | |
| def __init__(self): | |
| pass | |
| def INPUT_TYPES(cls): | |
| inputs = { | |
| "required": { | |
| "flow_control": ("FLOW_CONTROL", {"rawLink": True}), | |
| "condition": ("BOOLEAN", {"forceInput": True}), | |
| }, | |
| "optional": { | |
| }, | |
| "hidden": { | |
| "dynprompt": "DYNPROMPT", | |
| "unique_id": "UNIQUE_ID", | |
| } | |
| } | |
| for i in range(NUM_FLOW_SOCKETS): | |
| inputs["optional"][f"initial_value{i}"] = ("*",) | |
| return inputs | |
| RETURN_TYPES = tuple(["*"] * NUM_FLOW_SOCKETS) | |
| RETURN_NAMES = tuple([f"value{i}" for i in range(NUM_FLOW_SOCKETS)]) | |
| FUNCTION = "while_loop_close" | |
| CATEGORY = "Testing/Flow" | |
| def explore_dependencies(self, node_id, dynprompt, upstream): | |
| node_info = dynprompt.get_node(node_id) | |
| if "inputs" not in node_info: | |
| return | |
| for k, v in node_info["inputs"].items(): | |
| if is_link(v): | |
| parent_id = v[0] | |
| if parent_id not in upstream: | |
| upstream[parent_id] = [] | |
| self.explore_dependencies(parent_id, dynprompt, upstream) | |
| upstream[parent_id].append(node_id) | |
| def collect_contained(self, node_id, upstream, contained): | |
| if node_id not in upstream: | |
| return | |
| for child_id in upstream[node_id]: | |
| if child_id not in contained: | |
| contained[child_id] = True | |
| self.collect_contained(child_id, upstream, contained) | |
| def while_loop_close(self, flow_control, condition, dynprompt=None, unique_id=None, **kwargs): | |
| assert dynprompt is not None | |
| if not condition: | |
| # We're done with the loop | |
| values = [] | |
| for i in range(NUM_FLOW_SOCKETS): | |
| values.append(kwargs.get(f"initial_value{i}", None)) | |
| return tuple(values) | |
| # We want to loop | |
| upstream = {} | |
| # Get the list of all nodes between the open and close nodes | |
| self.explore_dependencies(unique_id, dynprompt, upstream) | |
| contained = {} | |
| open_node = flow_control[0] | |
| self.collect_contained(open_node, upstream, contained) | |
| contained[unique_id] = True | |
| contained[open_node] = True | |
| # We'll use the default prefix, but to avoid having node names grow exponentially in size, | |
| # we'll use "Recurse" for the name of the recursively-generated copy of this node. | |
| graph = GraphBuilder() | |
| for node_id in contained: | |
| original_node = dynprompt.get_node(node_id) | |
| node = graph.node(original_node["class_type"], "Recurse" if node_id == unique_id else node_id) | |
| node.set_override_display_id(node_id) | |
| for node_id in contained: | |
| original_node = dynprompt.get_node(node_id) | |
| node = graph.lookup_node("Recurse" if node_id == unique_id else node_id) | |
| assert node is not None | |
| for k, v in original_node["inputs"].items(): | |
| if is_link(v) and v[0] in contained: | |
| parent = graph.lookup_node(v[0]) | |
| assert parent is not None | |
| node.set_input(k, parent.out(v[1])) | |
| else: | |
| node.set_input(k, v) | |
| new_open = graph.lookup_node(open_node) | |
| assert new_open is not None | |
| for i in range(NUM_FLOW_SOCKETS): | |
| key = f"initial_value{i}" | |
| new_open.set_input(key, kwargs.get(key, None)) | |
| my_clone = graph.lookup_node("Recurse") | |
| assert my_clone is not None | |
| result = map(lambda x: my_clone.out(x), range(NUM_FLOW_SOCKETS)) | |
| return { | |
| "result": tuple(result), | |
| "expand": graph.finalize(), | |
| } | |
| class TestExecutionBlockerNode: | |
| def __init__(self): | |
| pass | |
| def INPUT_TYPES(cls): | |
| inputs = { | |
| "required": { | |
| "input": ("*",), | |
| "block": ("BOOLEAN",), | |
| "verbose": ("BOOLEAN", {"default": False}), | |
| }, | |
| } | |
| return inputs | |
| RETURN_TYPES = ("*",) | |
| RETURN_NAMES = ("output",) | |
| FUNCTION = "execution_blocker" | |
| CATEGORY = "Testing/Flow" | |
| def execution_blocker(self, input, block, verbose): | |
| if block: | |
| return (ExecutionBlocker("Blocked Execution" if verbose else None),) | |
| return (input,) | |
| FLOW_CONTROL_NODE_CLASS_MAPPINGS = { | |
| "TestWhileLoopOpen": TestWhileLoopOpen, | |
| "TestWhileLoopClose": TestWhileLoopClose, | |
| "TestExecutionBlocker": TestExecutionBlockerNode, | |
| } | |
| FLOW_CONTROL_NODE_DISPLAY_NAME_MAPPINGS = { | |
| "TestWhileLoopOpen": "While Loop Open", | |
| "TestWhileLoopClose": "While Loop Close", | |
| "TestExecutionBlocker": "Execution Blocker", | |
| } | |