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
| import hashlib | |
| import json | |
| from aiohttp import web | |
| from server import PromptServer | |
| import folder_paths | |
| import os | |
| def get_metadata(filepath): | |
| with open(filepath, "rb") as file: | |
| # https://github.com/huggingface/safetensors#format | |
| # 8 bytes: N, an unsigned little-endian 64-bit integer, containing the size of the header | |
| header_size = int.from_bytes(file.read(8), "little", signed=False) | |
| if header_size <= 0: | |
| raise BufferError("Invalid header size") | |
| header = file.read(header_size) | |
| if header_size <= 0: | |
| raise BufferError("Invalid header") | |
| header_json = json.loads(header) | |
| return header_json["__metadata__"] if "__metadata__" in header_json else None | |
| async def save_notes(request): | |
| name = request.match_info["name"] | |
| pos = name.index("/") | |
| type = name[0:pos] | |
| name = name[pos+1:] | |
| file_path = None | |
| if type == "embeddings" or type == "loras": | |
| name = name.lower() | |
| files = folder_paths.get_filename_list(type) | |
| for f in files: | |
| lower_f = f.lower() | |
| if lower_f == name: | |
| file_path = folder_paths.get_full_path(type, f) | |
| else: | |
| n = os.path.splitext(f)[0].lower() | |
| if n == name: | |
| file_path = folder_paths.get_full_path(type, f) | |
| if file_path is not None: | |
| break | |
| else: | |
| file_path = folder_paths.get_full_path( | |
| type, name) | |
| if not file_path: | |
| return web.Response(status=404) | |
| file_no_ext = os.path.splitext(file_path)[0] | |
| info_file = file_no_ext + ".txt" | |
| with open(info_file, "w") as f: | |
| f.write(await request.text()) | |
| return web.Response(status=200) | |
| async def load_metadata(request): | |
| name = request.match_info["name"] | |
| pos = name.index("/") | |
| type = name[0:pos] | |
| name = name[pos+1:] | |
| file_path = None | |
| if type == "embeddings" or type == "loras": | |
| name = name.lower() | |
| files = folder_paths.get_filename_list(type) | |
| for f in files: | |
| lower_f = f.lower() | |
| if lower_f == name: | |
| file_path = folder_paths.get_full_path(type, f) | |
| else: | |
| n = os.path.splitext(f)[0].lower() | |
| if n == name: | |
| file_path = folder_paths.get_full_path(type, f) | |
| if file_path is not None: | |
| break | |
| else: | |
| file_path = folder_paths.get_full_path( | |
| type, name) | |
| if not file_path: | |
| return web.Response(status=404) | |
| try: | |
| meta = get_metadata(file_path) | |
| except: | |
| meta = None | |
| if meta is None: | |
| meta = {} | |
| file_no_ext = os.path.splitext(file_path)[0] | |
| info_file = file_no_ext + ".txt" | |
| if os.path.isfile(info_file): | |
| with open(info_file, "r") as f: | |
| meta["pysssss.notes"] = f.read() | |
| hash_file = file_no_ext + ".sha256" | |
| if os.path.isfile(hash_file): | |
| with open(hash_file, "rt") as f: | |
| meta["pysssss.sha256"] = f.read() | |
| else: | |
| with open(file_path, "rb") as f: | |
| meta["pysssss.sha256"] = hashlib.sha256(f.read()).hexdigest() | |
| with open(hash_file, "wt") as f: | |
| f.write(meta["pysssss.sha256"]) | |
| return web.json_response(meta) | |