Instructions to use vidfom/Ltx-3 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- llama-cpp-python
How to use vidfom/Ltx-3 with llama-cpp-python:
# !pip install llama-cpp-python from llama_cpp import Llama llm = Llama.from_pretrained( repo_id="vidfom/Ltx-3", filename="ComfyUI/models/text_encoders/gemma-3-12b-it-qat-UD-Q4_K_XL.gguf", )
llm.create_chat_completion( messages = "No input example has been defined for this model task." )
- Notebooks
- Google Colab
- Kaggle
- Local Apps
- llama.cpp
How to use vidfom/Ltx-3 with llama.cpp:
Install from brew
brew install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama-server -hf vidfom/Ltx-3:UD-Q4_K_XL # Run inference directly in the terminal: llama-cli -hf vidfom/Ltx-3:UD-Q4_K_XL
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama-server -hf vidfom/Ltx-3:UD-Q4_K_XL # Run inference directly in the terminal: llama-cli -hf vidfom/Ltx-3:UD-Q4_K_XL
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 vidfom/Ltx-3:UD-Q4_K_XL # Run inference directly in the terminal: ./llama-cli -hf vidfom/Ltx-3:UD-Q4_K_XL
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 vidfom/Ltx-3:UD-Q4_K_XL # Run inference directly in the terminal: ./build/bin/llama-cli -hf vidfom/Ltx-3:UD-Q4_K_XL
Use Docker
docker model run hf.co/vidfom/Ltx-3:UD-Q4_K_XL
- LM Studio
- Jan
- Ollama
How to use vidfom/Ltx-3 with Ollama:
ollama run hf.co/vidfom/Ltx-3:UD-Q4_K_XL
- Unsloth Studio new
How to use vidfom/Ltx-3 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 vidfom/Ltx-3 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 vidfom/Ltx-3 to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for vidfom/Ltx-3 to start chatting
- Docker Model Runner
How to use vidfom/Ltx-3 with Docker Model Runner:
docker model run hf.co/vidfom/Ltx-3:UD-Q4_K_XL
- Lemonade
How to use vidfom/Ltx-3 with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull vidfom/Ltx-3:UD-Q4_K_XL
Run and chat with the model
lemonade run user.Ltx-3-UD-Q4_K_XL
List all available models
lemonade list
| import hashlib | |
| import torch | |
| import logging | |
| from comfy.cli_args import args | |
| from PIL import ImageFile, UnidentifiedImageError | |
| def conditioning_set_values(conditioning, values={}, append=False): | |
| c = [] | |
| for t in conditioning: | |
| n = [t[0], t[1].copy()] | |
| for k in values: | |
| val = values[k] | |
| if append: | |
| old_val = n[1].get(k, None) | |
| if old_val is not None: | |
| val = old_val + val | |
| n[1][k] = val | |
| c.append(n) | |
| return c | |
| def conditioning_set_values_with_timestep_range(conditioning, values={}, start_percent=0.0, end_percent=1.0): | |
| """ | |
| Apply values to conditioning only during [start_percent, end_percent], keeping the | |
| original conditioning active outside that range. Respects existing per-entry ranges. | |
| """ | |
| if start_percent > end_percent: | |
| logging.warning(f"start_percent ({start_percent}) must be <= end_percent ({end_percent})") | |
| return conditioning | |
| EPS = 1e-5 # the sampler gates entries with strict > / <, shift boundaries slightly to ensure only one conditioning is active per timestep | |
| c = [] | |
| for t in conditioning: | |
| cond_start = t[1].get("start_percent", 0.0) | |
| cond_end = t[1].get("end_percent", 1.0) | |
| intersect_start = max(start_percent, cond_start) | |
| intersect_end = min(end_percent, cond_end) | |
| if intersect_start >= intersect_end: # no overlap: emit unchanged | |
| c.append(t) | |
| continue | |
| if intersect_start > cond_start: # part before the requested range | |
| c.extend(conditioning_set_values([t], {"start_percent": cond_start, "end_percent": intersect_start - EPS})) | |
| c.extend(conditioning_set_values([t], {**values, "start_percent": intersect_start, "end_percent": intersect_end})) | |
| if intersect_end < cond_end: # part after the requested range | |
| c.extend(conditioning_set_values([t], {"start_percent": intersect_end + EPS, "end_percent": cond_end})) | |
| return c | |
| def pillow(fn, arg): | |
| prev_value = None | |
| try: | |
| x = fn(arg) | |
| except (OSError, UnidentifiedImageError, ValueError): #PIL issues #4472 and #2445, also fixes ComfyUI issue #3416 | |
| prev_value = ImageFile.LOAD_TRUNCATED_IMAGES | |
| ImageFile.LOAD_TRUNCATED_IMAGES = True | |
| x = fn(arg) | |
| finally: | |
| if prev_value is not None: | |
| ImageFile.LOAD_TRUNCATED_IMAGES = prev_value | |
| return x | |
| def hasher(): | |
| hashfuncs = { | |
| "md5": hashlib.md5, | |
| "sha1": hashlib.sha1, | |
| "sha256": hashlib.sha256, | |
| "sha512": hashlib.sha512 | |
| } | |
| return hashfuncs[args.default_hashing_function] | |
| def string_to_torch_dtype(string): | |
| if string == "fp32": | |
| return torch.float32 | |
| if string == "fp16": | |
| return torch.float16 | |
| if string == "bf16": | |
| return torch.bfloat16 | |
| def image_alpha_fix(destination, source): | |
| if destination.shape[-1] < source.shape[-1]: | |
| source = source[...,:destination.shape[-1]] | |
| elif destination.shape[-1] > source.shape[-1]: | |
| destination = torch.nn.functional.pad(destination, (0, 1)) | |
| destination[..., -1] = 1.0 | |
| return destination, source | |