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 folder_paths | |
| import os | |
| import random | |
| class SetImageSize: | |
| def INPUT_TYPES(cls): | |
| return {"required": | |
| { | |
| "width" : ("INT", {"default": 1024, "min": 1, "max": 10000}), | |
| "height": ("INT", {"default": 1024, "min": 1, "max": 10000}), | |
| }, | |
| "optional": | |
| { | |
| } | |
| } | |
| RETURN_TYPES = ("INT", "INT",) | |
| RETURN_NAMES = ("width","height",) | |
| FUNCTION = "main" | |
| CATEGORY = "RES4LYF/images" | |
| DESCRIPTION = "Generate a pair of integers for image sizes." | |
| def main(self, width, height): | |
| return (width, height,) | |
| class SetImageSizeWithScale: | |
| def INPUT_TYPES(cls): | |
| return {"required": | |
| { | |
| "width" : ("INT", {"default": 1024, "min": 1, "max": 10000}), | |
| "height": ("INT", {"default": 1024, "min": 1, "max": 10000}), | |
| "scale_by": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10000, "step":0.01}), | |
| }, | |
| "optional": | |
| { | |
| } | |
| } | |
| RETURN_TYPES = ("INT", "INT", "INT", "INT",) | |
| RETURN_NAMES = ("width","height","width_scaled","height_scaled",) | |
| FUNCTION = "main" | |
| CATEGORY = "RES4LYF/images" | |
| DESCRIPTION = "Generate a pair of integers for image sizes." | |
| def main(self, width, height, scale_by): | |
| return (width, height, int(width*scale_by), int(height*scale_by)) | |
| class TextBox1: | |
| def INPUT_TYPES(cls): | |
| return {"required": | |
| { | |
| "text1": ("STRING", {"default": "", "multiline": True}), | |
| }, | |
| "optional": | |
| { | |
| } | |
| } | |
| RETURN_TYPES = ("STRING",) | |
| RETURN_NAMES = ("text1",) | |
| FUNCTION = "main" | |
| CATEGORY = "RES4LYF/text" | |
| DESCRIPTION = "Multiline textbox." | |
| def main(self, text1): | |
| return (text1,) | |
| class TextBox2: | |
| def INPUT_TYPES(cls): | |
| return {"required": | |
| { | |
| "text1": ("STRING", {"default": "", "multiline": True}), | |
| "text2": ("STRING", {"default": "", "multiline": True}), | |
| }, | |
| "optional": | |
| { | |
| } | |
| } | |
| RETURN_TYPES = ("STRING", "STRING",) | |
| RETURN_NAMES = ("text1", "text2",) | |
| FUNCTION = "main" | |
| CATEGORY = "RES4LYF/text" | |
| DESCRIPTION = "Multiline textbox." | |
| def main(self, text1, text2,): | |
| return (text1, text2,) | |
| class TextBox3: | |
| def INPUT_TYPES(cls): | |
| return {"required": | |
| { | |
| "text1": ("STRING", {"default": "", "multiline": True}), | |
| "text2": ("STRING", {"default": "", "multiline": True}), | |
| "text3": ("STRING", {"default": "", "multiline": True}), | |
| }, | |
| "optional": | |
| { | |
| } | |
| } | |
| RETURN_TYPES = ("STRING", "STRING","STRING",) | |
| RETURN_NAMES = ("text1", "text2", "text3",) | |
| FUNCTION = "main" | |
| CATEGORY = "RES4LYF/text" | |
| DESCRIPTION = "Multiline textbox." | |
| def main(self, text1, text2, text3 ): | |
| return (text1, text2, text3, ) | |
| class TextLoadFile: | |
| def INPUT_TYPES(cls): | |
| input_dir = folder_paths.get_input_directory() | |
| files = [f for f in os.listdir(input_dir) | |
| if os.path.isfile(os.path.join(input_dir, f)) and f.lower().endswith('.txt')] | |
| return { | |
| "required": { | |
| "text_file": (sorted(files), {"text_upload": True}) | |
| } | |
| } | |
| RETURN_TYPES = ("STRING",) | |
| RETURN_NAMES = ("text",) | |
| FUNCTION = "main" | |
| CATEGORY = "RES4LYF/text" | |
| def main(self, text_file): | |
| input_dir = folder_paths.get_input_directory() | |
| text_file_path = os.path.join(input_dir, text_file) | |
| if not os.path.exists(text_file_path): | |
| print(f"Error: The file `{text_file_path}` cannot be found.") | |
| return ("",) | |
| with open(text_file_path, "r", encoding="utf-8") as f: | |
| text = f.read() | |
| return (text,) | |
| class TextShuffle: | |
| def INPUT_TYPES(cls): | |
| return { | |
| "required": { | |
| "text": ("STRING", {"forceInput": True}), | |
| "separator": ("STRING", {"default": " ", "multiline": False}), | |
| "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), | |
| }, | |
| "optional": { | |
| } | |
| } | |
| RETURN_TYPES = ("STRING",) | |
| RETURN_NAMES = ("shuffled_text",) | |
| FUNCTION = "main" | |
| CATEGORY = "RES4LYF/text" | |
| def main(self, text, separator, seed, ): | |
| if seed is not None: | |
| random.seed(seed) | |
| parts = text.split(separator) | |
| random.shuffle(parts) | |
| shuffled_text = separator.join(parts) | |
| return (shuffled_text, ) | |
| def truncate_tokens(text, truncate_to, clip, clip_type, stop_token): | |
| if truncate_to == 0: | |
| return "" | |
| truncate_words_to = truncate_to | |
| total = truncate_to + 1 | |
| tokens = {} | |
| while total > truncate_to: | |
| words = text.split() | |
| truncated_words = words[:truncate_words_to] | |
| truncated_text = " ".join(truncated_words) | |
| try: | |
| tokens[clip_type] = clip.tokenize(truncated_text)[clip_type] | |
| except: | |
| return "" | |
| if clip_type not in tokens: | |
| return truncated_text | |
| clip_end=0 | |
| for b in range(len(tokens[clip_type])): | |
| for i in range(len(tokens[clip_type][b])): | |
| clip_end += 1 | |
| if tokens[clip_type][b][i][0] == stop_token: | |
| break | |
| if clip_type == 'l' or clip_type == 'g': | |
| clip_end -= 2 | |
| elif clip_type == 't5xxl': | |
| clip_end -= 1 | |
| total = clip_end | |
| truncate_words_to -= 1 | |
| return truncated_text | |
| class TextShuffleAndTruncate: | |
| def INPUT_TYPES(cls): | |
| return { | |
| "required": { | |
| "text": ("STRING", {"forceInput": True}), | |
| "separator": ("STRING", {"default": " ", "multiline": False}), | |
| "truncate_words_to": ("INT", {"default": 77, "min": 1, "max": 10000}), | |
| "truncate_tokens_to": ("INT", {"default": 77, "min": 1, "max": 10000}), | |
| "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), | |
| }, | |
| "optional": { | |
| "clip": ("CLIP", ), | |
| } | |
| } | |
| RETURN_TYPES = ("STRING","STRING","STRING","STRING","STRING",) | |
| RETURN_NAMES = ("shuffled_text", "text_words", "text_clip_l", "text_clip_g", "text_t5",) | |
| FUNCTION = "main" | |
| CATEGORY = "RES4LYF/text" | |
| def main(self, text, separator, truncate_words_to, truncate_tokens_to, seed, clip=None): | |
| if seed is not None: | |
| random.seed(seed) | |
| parts = text.split(separator) | |
| random.shuffle(parts) | |
| shuffled_text = separator.join(parts) | |
| words = shuffled_text.split() | |
| truncated_words = words[:truncate_words_to] | |
| truncated_text = " ".join(truncated_words) | |
| #t5_name = "t5xxl" if not hasattr(clip.tokenizer, "pile_t5xl") else "pile_t5xl" | |
| t5_name = "t5xxl" | |
| if hasattr(clip.tokenizer, "clip_name"): | |
| t5_name = "t5xxl" if clip.tokenizer.clip_name != "pile_t5xl" else "pile_t5xl" | |
| text_clip_l = truncate_tokens(truncated_text, truncate_tokens_to, clip, "l", 49407) | |
| text_clip_g = truncate_tokens(truncated_text, truncate_tokens_to, clip, "g", 49407) | |
| text_t5 = truncate_tokens(truncated_text, truncate_tokens_to, clip, t5_name, 1) | |
| return (shuffled_text, truncated_text, text_clip_l, text_clip_g, text_t5,) | |
| class TextTruncateTokens: | |
| def INPUT_TYPES(cls): | |
| return { | |
| "required": { | |
| "text": ("STRING", {"forceInput": True}), | |
| "truncate_words_to": ("INT", {"default": 30, "min": 0, "max": 10000}), | |
| "truncate_clip_l_to": ("INT", {"default": 77, "min": 0, "max": 10000}), | |
| "truncate_clip_g_to": ("INT", {"default": 77, "min": 0, "max": 10000}), | |
| "truncate_t5_to": ("INT", {"default": 77, "min": 0, "max": 10000}), | |
| }, | |
| "optional": { | |
| "clip": ("CLIP", ), | |
| } | |
| } | |
| RETURN_TYPES = ("STRING","STRING","STRING","STRING",) | |
| RETURN_NAMES = ("text_words","text_clip_l","text_clip_g","text_t5",) | |
| FUNCTION = "main" | |
| CATEGORY = "RES4LYF/text" | |
| def main(self, text, truncate_words_to, truncate_clip_l_to, truncate_clip_g_to, truncate_t5_to, clip=None): | |
| words = text.split() | |
| truncated_words = words[:truncate_words_to] | |
| truncated_text = " ".join(truncated_words) | |
| #t5_name = "t5xxl" if not hasattr(clip.tokenizer, "pile_t5xl") else "pile_t5xl" | |
| t5_name = "t5xxl" | |
| if hasattr(clip.tokenizer, "clip_name"): | |
| t5_name = "t5xxl" if clip.tokenizer.clip_name != "pile_t5xl" else "pile_t5xl" | |
| if clip is not None: | |
| text_clip_l = truncate_tokens(text, truncate_clip_l_to, clip, "l", 49407) | |
| text_clip_g = truncate_tokens(text, truncate_clip_g_to, clip, "g", 49407) | |
| text_t5 = truncate_tokens(truncated_text, truncate_t5_to, clip, t5_name, 1) | |
| else: | |
| text_clip_l = None | |
| text_clip_g = None | |
| text_t5 = None | |
| return (truncated_text, text_clip_l, text_clip_g, text_t5,) | |
| class TextConcatenate: | |
| def INPUT_TYPES(cls): | |
| return { | |
| "required": { | |
| }, | |
| "optional": { | |
| "text_1": ("STRING", {"multiline": False, "default": "", "forceInput": True}), | |
| "text_2": ("STRING", {"multiline": False, "default": "", "forceInput": True}), | |
| "separator": ("STRING", {"multiline": False, "default": ""}), | |
| }, | |
| } | |
| RETURN_TYPES = ("STRING",) | |
| RETURN_NAMES = ("text",) | |
| FUNCTION = "main" | |
| CATEGORY = "RES4LYF/text" | |
| def main(self, text_1="", text_2="", separator=""): | |
| return (text_1 + separator + text_2, ) | |
| class TextBoxConcatenate: | |
| def INPUT_TYPES(cls): | |
| return { | |
| "required": { | |
| "text": ("STRING", {"default": "", "multiline": True}), | |
| }, | |
| "optional": { | |
| "text_external": ("STRING", {"multiline": False, "default": "", "forceInput": True}), | |
| "separator": ("STRING", {"multiline": False, "default": ""}), | |
| "mode": (['append_external_input', 'prepend_external_input',],), | |
| }, | |
| } | |
| RETURN_TYPES = ("STRING",) | |
| RETURN_NAMES = ("text",) | |
| FUNCTION = "main" | |
| CATEGORY = "RES4LYF/text" | |
| DESCRIPTION = "Multiline textbox with concatenate functionality." | |
| def main(self, text="", text_external="", separator="", mode="append_external_input"): | |
| if mode == "append_external_input": | |
| text = text + separator + text_external | |
| elif mode == "prepend_external_input": | |
| text = text_external + separator + text | |
| return (text, ) | |
| class SeedGenerator: | |
| def INPUT_TYPES(cls): | |
| return { | |
| "required": { | |
| "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), | |
| }, | |
| "optional": { | |
| } | |
| } | |
| RETURN_TYPES = ("INT", "INT",) | |
| RETURN_NAMES = ("seed", "seed+1",) | |
| FUNCTION = "main" | |
| CATEGORY = "RES4LYF/utilities" | |
| def main(self, seed,): | |
| return (seed, seed+1,) | |