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
- 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:Q4_K_S
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:Q4_K_S" \ --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: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
| /** | |
| * Progress bar web component. | |
| */ | |
| import { SERVICE as PROMPT_SERVICE, type PromptExecution } from "rgthree/common/prompt_service.js"; | |
| import { createElement } from "./utils_dom.js"; | |
| /** | |
| * The progress bar web component. | |
| */ | |
| export class RgthreeProgressBar extends HTMLElement { | |
| static NAME = "rgthree-progress-bar"; | |
| static create(): RgthreeProgressBar { | |
| return document.createElement(RgthreeProgressBar.NAME) as RgthreeProgressBar; | |
| } | |
| private shadow: ShadowRoot | null = null; | |
| private progressNodesEl!: HTMLDivElement; | |
| private progressStepsEl!: HTMLDivElement; | |
| private progressTextEl!: HTMLSpanElement; | |
| private currentPromptExecution: PromptExecution | null = null; | |
| private readonly onProgressUpdateBound = this.onProgressUpdate.bind(this); | |
| private connected: boolean = false; | |
| /** The currentNodeId so outside callers can see what we're currently executing against. */ | |
| get currentNodeId() { | |
| const prompt = this.currentPromptExecution; | |
| const nodeId = prompt?.errorDetails?.node_id || prompt?.currentlyExecuting?.nodeId; | |
| return nodeId || null; | |
| } | |
| constructor() { | |
| super(); | |
| } | |
| private onProgressUpdate(e: CustomEvent<{ queue: number; prompt: PromptExecution }>) { | |
| if (!this.connected) return; | |
| const prompt = e.detail.prompt; | |
| this.currentPromptExecution = prompt; | |
| if (prompt?.errorDetails) { | |
| let progressText = `${prompt.errorDetails?.exception_type} ${ | |
| prompt.errorDetails?.node_id || "" | |
| } ${prompt.errorDetails?.node_type || ""}`; | |
| this.progressTextEl.innerText = progressText; | |
| this.progressNodesEl.classList.add("-error"); | |
| this.progressStepsEl.classList.add("-error"); | |
| return; | |
| } | |
| if (prompt?.currentlyExecuting) { | |
| this.progressNodesEl.classList.remove("-error"); | |
| this.progressStepsEl.classList.remove("-error"); | |
| const current = prompt?.currentlyExecuting; | |
| let progressText = `(${e.detail.queue}) `; | |
| // Sometimes we may get status updates for a workflow that was already running. In that case | |
| // we don't know totalNodes. | |
| if (!prompt.totalNodes) { | |
| progressText += `??%`; | |
| this.progressNodesEl.style.width = `0%`; | |
| } else { | |
| const percent = (prompt.executedNodeIds.length / prompt.totalNodes) * 100; | |
| this.progressNodesEl.style.width = `${Math.max(2, percent)}%`; | |
| // progressText += `Node ${prompt.executedNodeIds.length + 1} of ${prompt.totalNodes || "?"}`; | |
| progressText += `${Math.round(percent)}%`; | |
| } | |
| let nodeLabel = current.nodeLabel?.trim(); | |
| let stepsLabel = ""; | |
| if (current.step != null && current.maxSteps) { | |
| const percent = (current.step / current.maxSteps) * 100; | |
| this.progressStepsEl.style.width = `${percent}%`; | |
| // stepsLabel += `Step ${current.step} of ${current.maxSteps}`; | |
| if (current.pass > 1 || current.maxPasses != null) { | |
| stepsLabel += `#${current.pass}`; | |
| if (current.maxPasses && current.maxPasses > 0) { | |
| stepsLabel += `/${current.maxPasses}`; | |
| } | |
| stepsLabel += ` - `; | |
| } | |
| stepsLabel += `${Math.round(percent)}%`; | |
| } | |
| if (nodeLabel || stepsLabel) { | |
| progressText += ` - ${nodeLabel || "???"}${stepsLabel ? ` (${stepsLabel})` : ""}`; | |
| } | |
| if (!stepsLabel) { | |
| this.progressStepsEl.style.width = `0%`; | |
| } | |
| this.progressTextEl.innerText = progressText; | |
| } else { | |
| if (e?.detail.queue) { | |
| this.progressTextEl.innerText = `(${e.detail.queue}) Running... in another tab`; | |
| } else { | |
| this.progressTextEl.innerText = "Idle"; | |
| } | |
| this.progressNodesEl.style.width = `0%`; | |
| this.progressStepsEl.style.width = `0%`; | |
| } | |
| } | |
| connectedCallback() { | |
| if (!this.connected) { | |
| PROMPT_SERVICE.addEventListener( | |
| "progress-update", | |
| this.onProgressUpdateBound as EventListener, | |
| ); | |
| this.connected = true; | |
| } | |
| // We were already connected, so we just need to reset. | |
| if (this.shadow) { | |
| this.progressTextEl.innerText = "Idle"; | |
| this.progressNodesEl.style.width = `0%`; | |
| this.progressStepsEl.style.width = `0%`; | |
| return; | |
| } | |
| this.shadow = this.attachShadow({ mode: "open" }); | |
| const sheet = new CSSStyleSheet(); | |
| sheet.replaceSync(` | |
| :host { | |
| position: relative; | |
| overflow: hidden; | |
| box-sizing: border-box; | |
| background: var(--rgthree-progress-bg-color); | |
| --rgthree-progress-bg-color: rgba(23, 23, 23, 0.9); | |
| --rgthree-progress-nodes-bg-color: rgb(0, 128, 0); | |
| --rgthree-progress-steps-bg-color: rgb(0, 128, 0); | |
| --rgthree-progress-error-bg-color: rgb(128, 0, 0); | |
| --rgthree-progress-text-color: #fff; | |
| } | |
| :host * { | |
| box-sizing: inherit; | |
| } | |
| :host > div.bar { | |
| background: var(--rgthree-progress-nodes-bg-color); | |
| position: absolute; | |
| left: 0; | |
| top: 0; | |
| width: 0%; | |
| height: 50%; | |
| z-index: 1; | |
| transition: width 50ms ease-in-out; | |
| } | |
| :host > div.bar + div.bar { | |
| background: var(--rgthree-progress-steps-bg-color); | |
| top: 50%; | |
| height: 50%; | |
| z-index: 2; | |
| } | |
| :host > div.bar.-error { | |
| background: var(--rgthree-progress-error-bg-color); | |
| } | |
| :host > .overlay { | |
| position: absolute; | |
| left: 0; | |
| top: 0; | |
| width: 100%; | |
| height: 100%; | |
| z-index: 5; | |
| background: linear-gradient(to bottom, rgba(255,255,255,0.25), rgba(0,0,0,0.25)); | |
| mix-blend-mode: overlay; | |
| } | |
| :host > span { | |
| position: relative; | |
| z-index: 4; | |
| text-align: left; | |
| font-size: inherit; | |
| height: 100%; | |
| font-family: sans-serif; | |
| text-shadow: 1px 1px 0px #000; | |
| display: flex; | |
| flex-direction: row; | |
| padding: 0 6px; | |
| align-items: center; | |
| justify-content: start; | |
| color: var(--rgthree-progress-text-color); | |
| text-shadow: black 0px 0px 2px; | |
| } | |
| :host > div.bar[style*="width: 0%"]:first-child, | |
| :host > div.bar[style*="width:0%"]:first-child { | |
| height: 0%; | |
| } | |
| :host > div.bar[style*="width: 0%"]:first-child + div, | |
| :host > div.bar[style*="width:0%"]:first-child + div { | |
| bottom: 0%; | |
| } | |
| `); | |
| this.shadow.adoptedStyleSheets = [sheet]; | |
| const overlayEl = createElement(`div.overlay[part="overlay"]`, { parent: this.shadow }); | |
| this.progressNodesEl = createElement(`div.bar[part="progress-nodes"]`, { parent: this.shadow }); | |
| this.progressStepsEl = createElement(`div.bar[part="progress-steps"]`, { parent: this.shadow }); | |
| this.progressTextEl = createElement(`span[part="text"]`, { text: "Idle", parent: this.shadow }); | |
| } | |
| disconnectedCallback() { | |
| this.connected = false; | |
| PROMPT_SERVICE.removeEventListener( | |
| "progress-update", | |
| this.onProgressUpdateBound as EventListener, | |
| ); | |
| } | |
| } | |
| customElements.define(RgthreeProgressBar.NAME, RgthreeProgressBar); | |