Instructions to use hgjc/ltx-ugc-bundle with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LTX.io
How to use hgjc/ltx-ugc-bundle with LTX.io:
# Install the LTX-2 pipelines git clone https://github.com/Lightricks/LTX-2.git cd LTX-2 uv sync --frozen
# Download the weights from this repo, plus the Gemma text encoder hf download hgjc/ltx-ugc-bundle --local-dir models/ltx-ugc-bundle hf download google/gemma-3-12b-it-qat-q4_0-unquantized --local-dir models/gemma-3-12b
# Fast pipeline (distilled model, no distilled LoRA needed) uv run python -m ltx_pipelines.distilled \ --distilled-checkpoint-path models/ltx-ugc-bundle/<distilled-checkpoint>.safetensors \ --spatial-upsampler-path models/ltx-ugc-bundle/<spatial-upsampler>.safetensors \ --gemma-root models/gemma-3-12b \ --prompt "A beautiful sunset over the ocean" \ --output-path output.mp4 # For image-to-video, add: --image path/to/image.jpg 0 0.8# HQ pipeline (two-stage, higher quality) uv run python -m ltx_pipelines.ti2vid_two_stages_hq \ --checkpoint-path models/ltx-ugc-bundle/<checkpoint>.safetensors \ --distilled-lora models/ltx-ugc-bundle/<distilled-lora>.safetensors 0.8 \ --spatial-upsampler-path models/ltx-ugc-bundle/<spatial-upsampler>.safetensors \ --gemma-root models/gemma-3-12b \ --prompt "A beautiful sunset over the ocean" \ --output-path output.mp4 # For image-to-video, add: --image path/to/image.jpg 0 0.8 - Notebooks
- Google Colab
- Kaggle
| # ComfyUI - mxToolkit - Max Smirnov 2024 | |
| import nodes | |
| class AnyType(str): | |
| def __ne__(self, __value: object) -> bool: | |
| return False | |
| any = AnyType("*") | |
| class mxSeed: | |
| def INPUT_TYPES(s): | |
| return { | |
| "required": { | |
| "X": ("INT", {"default": 0, "min": 0, "max": 4294967296}), | |
| }, | |
| } | |
| RETURN_TYPES = ("INT",) | |
| RETURN_NAMES = ("X",) | |
| FUNCTION = "main" | |
| CATEGORY = 'utils/mxToolkit' | |
| def main(self, X,): | |
| return (X,) | |
| class mxStop: | |
| def INPUT_TYPES(s): | |
| return { | |
| "required": { | |
| "In": (any,), | |
| }, | |
| } | |
| def VALIDATE_INPUTS(s, **kwargs): | |
| return True | |
| RETURN_TYPES = (any,) | |
| FUNCTION = "main" | |
| CATEGORY = 'utils/mxToolkit' | |
| def main(self, In): | |
| out = In; | |
| nodes.interrupt_processing(); | |
| return (out,) | |
| class mxSlider: | |
| def INPUT_TYPES(s): | |
| return { | |
| "required": { | |
| "Xi": ("INT", {"default": 20, "min": -4294967296, "max": 4294967296}), | |
| "Xf": ("FLOAT", {"default": 20, "min": -4294967296, "max": 4294967296}), | |
| "isfloatX": ("INT", {"default": 0, "min": 0, "max": 1}), | |
| }, | |
| } | |
| RETURN_TYPES = (any,) | |
| RETURN_NAMES = ("X",) | |
| FUNCTION = "main" | |
| CATEGORY = 'utils/mxToolkit' | |
| def main(self, Xi, Xf, isfloatX): | |
| if isfloatX > 0: | |
| out = Xf | |
| else: | |
| out = Xi | |
| return (out,) | |
| class mxSlider2D: | |
| def INPUT_TYPES(s): | |
| return { | |
| "required": { | |
| "Xi": ("INT", {"default": 512, "min": -4294967296, "max": 4294967296}), | |
| "Xf": ("FLOAT", {"default": 512, "min": -4294967296, "max": 4294967296}), | |
| "Yi": ("INT", {"default": 512, "min": -4294967296, "max": 4294967296}), | |
| "Yf": ("FLOAT", {"default": 512, "min": -4294967296, "max": 4294967296}), | |
| "isfloatX": ("INT", {"default": 0, "min": 0, "max": 1}), | |
| "isfloatY": ("INT", {"default": 0, "min": 0, "max": 1}), | |
| }, | |
| } | |
| RETURN_TYPES = (any, any,) | |
| RETURN_NAMES = ("X","Y",) | |
| FUNCTION = "main" | |
| CATEGORY = 'utils/mxToolkit' | |
| def main(self, Xi, Xf, isfloatX, Yi, Yf, isfloatY): | |
| if isfloatX > 0: | |
| outX = Xf | |
| else: | |
| outX = Xi | |
| if isfloatY > 0: | |
| outY = Yf | |
| else: | |
| outY = Yi | |
| return (outX, outY,) | |
| NODE_CLASS_MAPPINGS = { | |
| "mxSeed": mxSeed, | |
| "mxStop": mxStop, | |
| "mxSlider": mxSlider, | |
| "mxSlider2D": mxSlider2D, | |
| } | |
| NODE_DISPLAY_NAME_MAPPINGS = { | |
| "mxSeed": "Seed", | |
| "mxStop": "Stop", | |
| "mxSlider": "Slider", | |
| "mxSlider2D": "Slider 2D", | |
| } |