inline-core 1.2.67__tar.gz → 1.2.69__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {inline_core-1.2.67 → inline_core-1.2.69}/PKG-INFO +11 -5
- {inline_core-1.2.67 → inline_core-1.2.69}/README.md +1 -1
- {inline_core-1.2.67 → inline_core-1.2.69}/pyproject.toml +22 -5
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/config.py +23 -2
- inline_core-1.2.69/src/inline_core/models/catalog.py +212 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/__init__.py +18 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/lora_keys.py +73 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/memory.py +201 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/pipeline.py +351 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/provider.py +113 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/requirements.py +462 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/runner.py +384 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/__init__.py +38 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/__init__.py +0 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/allocator_trim_strategy.py +8 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/batch_split.py +105 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/__init__.py +20 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/block_fetcher.py +83 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/builder.py +500 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/disk.py +167 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/pool.py +71 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/provider.py +165 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/source.py +175 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/stream_sync.py +174 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/utils.py +169 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/wrapper.py +101 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/color/__init__.py +59 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/color/audio_mux.py +82 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/color/hlg.py +306 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/color/primaries.py +125 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/color/yuv.py +228 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/components/__init__.py +10 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/components/diffusion_steps.py +252 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/components/guiders.py +369 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/components/noisers.py +37 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/components/patchifiers.py +353 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/components/protocols.py +101 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/components/schedulers.py +130 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/__init__.py +25 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/exceptions.py +4 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/item.py +20 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/mask_utils.py +244 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/__init__.py +19 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/attention_strength_wrapper.py +71 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/keyframe_cond.py +90 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/keyframe_slots.py +174 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/latent_cond.py +43 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/mask_cond.py +49 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/noise_mask_cond.py +45 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/reference_audio_cond.py +65 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/reference_video_cond.py +108 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/devices.py +112 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/duration_head/__init__.py +11 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/duration_head/duration_head.py +118 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/duration_head/model_configurator.py +35 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/guidance/__init__.py +15 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/guidance/perturbations.py +143 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/hdr.py +172 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/__init__.py +66 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/attention_ops.py +42 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/fuse_loras.py +204 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/helpers.py +95 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/kernels.py +79 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/module_ops.py +14 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/primitives.py +176 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/registry.py +147 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/sd_ops.py +145 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/sft_loader.py +77 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/single_gpu_model_builder.py +294 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/modality_tiling.py +243 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/__init__.py +11 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/__init__.py +29 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/attention.py +71 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/audio_vae.py +509 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/causal_conv_2d.py +110 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/causality_axis.py +10 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/downsample.py +110 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/model_configurator.py +200 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/ops.py +75 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/resnet.py +176 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/upsample.py +106 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/vocoder.py +630 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/common/__init__.py +9 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/common/normalization.py +59 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/disposable.py +42 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/model_protocol.py +44 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/__init__.py +22 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/adaln.py +45 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/attention.py +579 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/compiling.py +239 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/cudagraph_capture.py +167 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/feed_forward.py +15 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/gelu_approx.py +10 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/modality.py +77 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/model.py +604 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/model_configurator.py +239 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/ops.py +106 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/rope.py +224 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/text_projection.py +38 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/timestep_embedding.py +143 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/transformer.py +447 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/transformer_args.py +411 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/__init__.py +10 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/blur_downsample.py +53 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/model.py +143 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/model_configurator.py +31 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/pixel_shuffle.py +54 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/res_block.py +37 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/spatial_rational_resampler.py +47 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/__init__.py +54 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/attention.py +69 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/conv_video_decoder.py +557 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/convolution.py +317 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/diffusion_tiling.py +759 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/diffusion_video_decoder.py +748 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/enums.py +20 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/memory_efficient_decode.py +683 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/model_configurator.py +565 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/normalization.py +3 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/ops.py +84 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/resnet.py +277 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/sampling.py +123 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/__init__.py +107 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/apply.py +206 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/attention.py +174 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/blocks.py +83 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/__init__.py +1 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/attn.py +420 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/block.py +70 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/context.py +88 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/mlp.py +178 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/__init__.py +1 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/attn.py +123 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/block.py +32 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/context.py +21 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/mlp.py +24 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/compiling.py +95 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/config.py +110 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/det_attn_rope.py +175 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/__init__.py +39 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/apply_dsl.py +111 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/attn.py +88 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/block.py +151 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/chain.py +79 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/fallback_na/__init__.py +154 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/fallback_na/eager.py +166 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/fallback_na/triton_na.py +181 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/layers.py +86 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/qkv.py +34 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/rope.py +109 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/rope_math.py +61 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/swiglu.py +479 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/video_vae.py +637 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/__init__.py +11 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/__init__.py +6 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/accelerate_wrapper.py +23 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/batch_parallel_wrapper.py +71 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/broadcast_wrapper.py +120 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/loader.py +120 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/sharded_sd.py +191 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/transformer/__init__.py +13 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/transformer/attention.py +270 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/transformer/sequence_parallel.py +318 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/transformer/tiled_data_parallel.py +99 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/vae/__init__.py +5 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/vae/distributed_decoder.py +318 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/__init__.py +17 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/blockwise/__init__.py +47 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/blockwise/_impl.py +433 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/fp8_cast.py +337 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/fp8_scaled_mm.py +203 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/__init__.py +64 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/convert.py +126 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/fuse.py +50 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/linear.py +139 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/prequant.py +207 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/types.py +13 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/policy.py +24 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/__init__.py +1 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/__init__.py +49 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/embeddings_connector.py +256 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/embeddings_processor.py +117 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/base_encoder.py +262 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/encoder_configurator.py +481 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/prompts/gemma3_i2v_system_prompt.txt +30 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/prompts/gemma3_t2v_system_prompt.txt +40 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/prompts/gemma4_i2v_system_prompt.txt +27 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/prompts/gemma4_t2v_system_prompt.txt +25 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/feature_extractor.py +129 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/gemma_assets.py +396 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/tokenizer.py +63 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/tiling.py +945 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/tools.py +280 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/types.py +300 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/utils.py +62 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/__init__.py +74 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/a2vid_two_stage.py +387 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/dfr_layout.py +213 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/dfr_pipeline.py +630 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/distilled.py +367 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/distilled_mgpu.py +233 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/dubit.py +401 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/hdr_ic_lora.py +987 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/ic_lora.py +540 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/iclora_utils.py +170 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/keyframe_interpolation.py +362 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/__init__.py +31 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/_broadcast.py +68 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/bp_gemma_builder.py +90 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/controller.py +382 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/delegating_builder.py +91 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/fleet.py +375 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/gemma_builders.py +199 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/nccl_groups.py +31 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/runner.py +62 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/sp_builder.py +62 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/tdp_builder.py +75 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/vae_builders.py +87 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/weight_tracker.py +181 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/retake.py +397 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/t2a_one_stage.py +215 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_one_stage.py +311 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_two_stages.py +380 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_two_stages_hq.py +409 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_two_stages_hq_mgpu.py +278 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_two_stages_mgpu.py +279 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/__init__.py +57 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/args.py +1214 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/blocks.py +1236 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/constants.py +199 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/denoisers.py +361 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/gpu_model.py +34 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/helpers.py +585 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/__init__.py +76 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/color_config.py +103 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/decode.py +435 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/encode.py +302 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/exr.py +255 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/range_map.py +25 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/resize.py +143 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/model_paths.py +189 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/quantization_factory.py +50 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/res2s.py +62 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/samplers.py +707 -0
- inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/types.py +144 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/pipeline.py +24 -8
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/runner.py +6 -1
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/pipeline_runtime.py +51 -4
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/video_params.py +7 -4
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/runtime/progress.py +11 -1
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/runtime/run.py +3 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/runtime/video_encode.py +10 -3
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/app.py +74 -7
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/bootstrap.py +11 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/manager.py +85 -8
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/serialize.py +14 -0
- inline_core-1.2.69/src/inline_core/studio/activity.py +396 -0
- inline_core-1.2.69/src/inline_core/studio/dataset_import.py +191 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/fal.py +75 -17
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/generation.py +99 -45
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/handlers.py +54 -4
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/schema.py +34 -7
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/store.py +58 -3
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/training.py +354 -23
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/training_store.py +56 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/training/arch.py +151 -15
- inline_core-1.2.69/src/inline_core/training/cache.py +116 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/training/dataset.py +88 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/training/h3.py +1 -1
- inline_core-1.2.69/src/inline_core/training/ltx25.py +364 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/training/models.py +83 -0
- inline_core-1.2.69/src/inline_core/training/precache_store.py +138 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/training/protocol.py +5 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/training/trainer.py +58 -7
- inline_core-1.2.69/tests/test_catalog.py +146 -0
- inline_core-1.2.69/tests/test_clip_grid_parity.py +68 -0
- inline_core-1.2.69/tests/test_dataset_import.py +86 -0
- inline_core-1.2.69/tests/test_encoder_parking.py +77 -0
- inline_core-1.2.69/tests/test_ltx25_lora_keys.py +117 -0
- inline_core-1.2.69/tests/test_ltx25_nodes.py +201 -0
- inline_core-1.2.69/tests/test_ltx25_requirements.py +438 -0
- inline_core-1.2.69/tests/test_ltx25_training.py +220 -0
- inline_core-1.2.69/tests/test_manager_queue.py +152 -0
- inline_core-1.2.69/tests/test_precache_store.py +113 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_staged_residency.py +92 -0
- inline_core-1.2.69/tests/test_studio_activity.py +270 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_rpc.py +3 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_schema.py +66 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_training.py +79 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_training_dataset.py +38 -0
- inline_core-1.2.69/tests/test_training_snapshots.py +68 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_video_encode.py +23 -0
- inline_core-1.2.67/src/inline_core/models/catalog.py +0 -119
- inline_core-1.2.67/src/inline_core/training/cache.py +0 -56
- inline_core-1.2.67/tests/test_catalog.py +0 -64
- {inline_core-1.2.67 → inline_core-1.2.69}/.gitignore +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/.python-version +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/CLAUDE.md +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/main.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/scripts/flux2_train_matrix.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/scripts/minimax_h3_lora_check.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/scripts/minimax_h3_train_matrix.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/scripts/reference.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/components/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/components/conditioning.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/components/interfaces.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/device/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/device/auto.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/device/detect.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/device/memory.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/device/policy.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/device/probe.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/device/types.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/errors.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/api.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/constraints.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/fetch.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/handlers.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/importer.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/install.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/loader.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/manifest.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/models.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/paths.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/resolve.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/scanner.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/state.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/tools.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/ffmpeg.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/cache.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/descriptor.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/executor.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/loader_runners.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/primitives.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/registry.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/runners.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/schema.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/topo.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/validate.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/media.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/checkpoint.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/controlspace.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/flux2/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/flux2/controlnet.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/flux2/embeds.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/flux2/provider.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/flux2/requirements.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/flux2/runner.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/flux2/variants.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/keymap.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/krea2/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/krea2/convert.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/krea2/depth_control.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/krea2/img2img.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/krea2/provider.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/krea2/requirements.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/krea2/runner.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/loaders.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/lora.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/adaln.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/keys.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/load.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/lora_keys.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/provider.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/requirements.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vae_keys.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/autoencoder_kl_minimax_h3.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/autoencoder_kl_minimax_h3_audio.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/before_denoise.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/before_encoder.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/decoders.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/denoise.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/encoders.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/modular_blocks_minimax_h3.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/modular_pipeline.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/packing.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/packing_ref2va.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/scheduling_minimax_h3.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/transformer_minimax_h3.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/offload.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/prepared.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/preprocess/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/preprocess/requirements.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/preprocess/runner.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/references.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/requirements.py +3 -3
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/sampling.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/zimage/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/zimage/primitives.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/zimage/provider.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/zimage/requirements.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/zimage/runner.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/parallel/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/parallel/config.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/parallel/group.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/parallel/launch.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/parallel/protocol.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/parallel/registry.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/parallel/worker.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/runtime/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/runtime/context.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/runtime/file_store.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/runtime/store.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/sampling/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/sampling/batch.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/__main__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/assets.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/frontend.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/rpc.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/run_store.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/assets.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/config.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/frames.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/graph_build.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/image_meta.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/models.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/moodboard.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/peaks.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/recipe.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/system_stats.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/timeline/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/timeline/compose.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/timeline/ffmpeg.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/timeline/render.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/timeline/resolve.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/takes.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/training/__init__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/training/__main__.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/training/caption.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/conftest.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/helpers.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_cache.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_checkpoint.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_config.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_device_detect.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_executor.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_extension_api.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_extension_install.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_extension_manifest.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_extension_resolve.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_extension_scanner.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_extension_spine.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_extension_state.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_file_store.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_flux2_controlnet.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_flux2_folder.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_flux2_resolve.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_flux2_runner.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_flux2_training.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_flux2_variants.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_frontend_serving.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_hidden_nodes.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_keymap.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_krea2_convert.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_krea2_depth_control.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_krea2_requirements.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_krea2_runner.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_loader_runners.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_loaders.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_lora.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_lora_download.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_memory_policy.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_minimaxh3_adaln.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_minimaxh3_keys.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_minimaxh3_load.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_minimaxh3_lora_keys.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_minimaxh3_nodes.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_minimaxh3_training.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_model_requirements.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_offload_prepared.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_output_kind_contract.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_parallel_group.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_pipeline_cache.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_primitives.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_recipe.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_references.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_rpc_bridge.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_run_store.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_sampling.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_schema.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_server.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_assets.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_fal.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_frames.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_generation.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_graph_build.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_models.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_moodboard.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_multi_reference.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_node_size.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_peaks.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_store.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_timeline.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_take_bytes.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_topo.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_training_arch.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_training_models.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_training_resolve.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_validate.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_video_params.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_webui_install.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_xfuser_sampler.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_zimage_primitives.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_zimage_resolve.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_zimage_runner.py +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/uv.lock +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/webui.bat +0 -0
- {inline_core-1.2.67 → inline_core-1.2.69}/webui.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: inline-core
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.69
|
|
4
4
|
Summary: The generation engine behind Inline Studio.
|
|
5
5
|
License-Expression: GPL-3.0-or-later
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -10,6 +10,7 @@ Provides-Extra: all
|
|
|
10
10
|
Requires-Dist: accelerate>=0.30; extra == 'all'
|
|
11
11
|
Requires-Dist: av>=12; extra == 'all'
|
|
12
12
|
Requires-Dist: bitsandbytes>=0.43; (platform_system != 'Darwin') and extra == 'all'
|
|
13
|
+
Requires-Dist: cloudpickle>=3.1; extra == 'all'
|
|
13
14
|
Requires-Dist: controlnet-aux>=0.0.7; extra == 'all'
|
|
14
15
|
Requires-Dist: diffusers==0.39.0; extra == 'all'
|
|
15
16
|
Requires-Dist: einops>=0.7; extra == 'all'
|
|
@@ -18,6 +19,7 @@ Requires-Dist: huggingface-hub>=0.32; extra == 'all'
|
|
|
18
19
|
Requires-Dist: imageio-ffmpeg>=0.4; extra == 'all'
|
|
19
20
|
Requires-Dist: nvidia-ml-py>=12; extra == 'all'
|
|
20
21
|
Requires-Dist: onnxruntime>=1.17; extra == 'all'
|
|
22
|
+
Requires-Dist: openimageio>=3.0; extra == 'all'
|
|
21
23
|
Requires-Dist: peft>=0.11; extra == 'all'
|
|
22
24
|
Requires-Dist: pillow>=10; extra == 'all'
|
|
23
25
|
Requires-Dist: psutil>=5.9; extra == 'all'
|
|
@@ -26,7 +28,8 @@ Requires-Dist: scipy>=1.11; extra == 'all'
|
|
|
26
28
|
Requires-Dist: timm>=1.0; extra == 'all'
|
|
27
29
|
Requires-Dist: torch>=2.2; extra == 'all'
|
|
28
30
|
Requires-Dist: torchao>=0.14; extra == 'all'
|
|
29
|
-
Requires-Dist:
|
|
31
|
+
Requires-Dist: torchaudio; extra == 'all'
|
|
32
|
+
Requires-Dist: transformers<5.15,>=5.8; extra == 'all'
|
|
30
33
|
Requires-Dist: uvicorn[standard]>=0.29; extra == 'all'
|
|
31
34
|
Provides-Extra: dev
|
|
32
35
|
Requires-Dist: httpx>=0.27; extra == 'dev'
|
|
@@ -39,22 +42,25 @@ Requires-Dist: xfuser>=0.4; extra == 'parallel'
|
|
|
39
42
|
Provides-Extra: runtime
|
|
40
43
|
Requires-Dist: accelerate>=0.30; extra == 'runtime'
|
|
41
44
|
Requires-Dist: av>=12; extra == 'runtime'
|
|
45
|
+
Requires-Dist: cloudpickle>=3.1; extra == 'runtime'
|
|
42
46
|
Requires-Dist: controlnet-aux>=0.0.7; extra == 'runtime'
|
|
43
47
|
Requires-Dist: diffusers==0.39.0; extra == 'runtime'
|
|
48
|
+
Requires-Dist: einops>=0.7; extra == 'runtime'
|
|
44
49
|
Requires-Dist: huggingface-hub>=0.32; extra == 'runtime'
|
|
45
50
|
Requires-Dist: onnxruntime>=1.17; extra == 'runtime'
|
|
51
|
+
Requires-Dist: openimageio>=3.0; extra == 'runtime'
|
|
46
52
|
Requires-Dist: safetensors>=0.4; extra == 'runtime'
|
|
47
53
|
Requires-Dist: scipy>=1.11; extra == 'runtime'
|
|
48
54
|
Requires-Dist: torch>=2.2; extra == 'runtime'
|
|
49
55
|
Requires-Dist: torchao>=0.14; extra == 'runtime'
|
|
50
|
-
Requires-Dist:
|
|
56
|
+
Requires-Dist: torchaudio; extra == 'runtime'
|
|
57
|
+
Requires-Dist: transformers<5.15,>=5.8; extra == 'runtime'
|
|
51
58
|
Provides-Extra: server
|
|
52
59
|
Requires-Dist: fastapi>=0.110; extra == 'server'
|
|
53
60
|
Requires-Dist: imageio-ffmpeg>=0.4; extra == 'server'
|
|
54
61
|
Requires-Dist: uvicorn[standard]>=0.29; extra == 'server'
|
|
55
62
|
Provides-Extra: training
|
|
56
63
|
Requires-Dist: bitsandbytes>=0.43; (platform_system != 'Darwin') and extra == 'training'
|
|
57
|
-
Requires-Dist: einops>=0.7; extra == 'training'
|
|
58
64
|
Requires-Dist: nvidia-ml-py>=12; extra == 'training'
|
|
59
65
|
Requires-Dist: peft>=0.11; extra == 'training'
|
|
60
66
|
Requires-Dist: pillow>=10; extra == 'training'
|
|
@@ -76,7 +82,7 @@ start; **Krea 2** (Krea AI), a 12.9B single-stream MMDiT released as an undistil
|
|
|
76
82
|
its soundtrack in a single pass.
|
|
77
83
|
|
|
78
84
|
Core also runs the **LoRA trainer** behind Inline Studio's Trainer canvas, so the same engine that
|
|
79
|
-
generates can fine-tune Z-Image, Krea 2, FLUX.2
|
|
85
|
+
generates can fine-tune Z-Image, Krea 2, FLUX.2, MiniMax H3 and LTX-2.5 on your own images without a cloud
|
|
80
86
|
step. Training is cheaper than generating: Krea 2 fits a 16GB card at 512px with a 4-bit base. Its
|
|
81
87
|
dependencies sit behind the `training` extra. See the
|
|
82
88
|
[LoRA training guide](https://inlinestudio.art/lora-training) for the measured VRAM table.
|
|
@@ -12,7 +12,7 @@ start; **Krea 2** (Krea AI), a 12.9B single-stream MMDiT released as an undistil
|
|
|
12
12
|
its soundtrack in a single pass.
|
|
13
13
|
|
|
14
14
|
Core also runs the **LoRA trainer** behind Inline Studio's Trainer canvas, so the same engine that
|
|
15
|
-
generates can fine-tune Z-Image, Krea 2, FLUX.2
|
|
15
|
+
generates can fine-tune Z-Image, Krea 2, FLUX.2, MiniMax H3 and LTX-2.5 on your own images without a cloud
|
|
16
16
|
step. Training is cheaper than generating: Krea 2 fits a 16GB card at 512px with a 4-bit base. Its
|
|
17
17
|
dependencies sit behind the `training` extra. See the
|
|
18
18
|
[LoRA training guide](https://inlinestudio.art/lora-training) for the measured VRAM table.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
# PyPI name; the import package is `inline_core` (src/inline_core).
|
|
3
3
|
name = "inline-core"
|
|
4
|
-
version = "1.2.
|
|
4
|
+
version = "1.2.69"
|
|
5
5
|
description = "The generation engine behind Inline Studio."
|
|
6
6
|
readme = "README.md"
|
|
7
7
|
license = "GPL-3.0-or-later"
|
|
@@ -21,9 +21,16 @@ runtime = [
|
|
|
21
21
|
# Pinned, not floored: MiniMax H3 is vendored from an unmerged PR and imports six symbols
|
|
22
22
|
# from the experimental Modular Diffusers surface, which a minor release may rename.
|
|
23
23
|
"diffusers==0.39.0",
|
|
24
|
-
|
|
24
|
+
# Floored at 5.8 because LTX-2.5's text encoder is Gemma 4, which does not exist below it.
|
|
25
|
+
# Capped below 5.15 because 5.15 routes config attribute access through the heterogeneity layer
|
|
26
|
+
# and raises on the global `config.head_dim` that transformers' own Gemma 4 code still reads, so
|
|
27
|
+
# the encoder cannot be built at all. Lightricks verify against 5.14.1; so do we.
|
|
28
|
+
"transformers>=5.8,<5.15",
|
|
25
29
|
"accelerate>=0.30",
|
|
26
30
|
"safetensors>=0.4",
|
|
31
|
+
# LTX-2.5's audio VAE and vocoder; the audio branch raises a bare ImportError without it, which
|
|
32
|
+
# would leave every LTX node advertising an audio port it cannot fill.
|
|
33
|
+
"torchaudio",
|
|
27
34
|
# int8 weight-only quant for smart memory; best-effort at load, falls back if absent.
|
|
28
35
|
"torchao>=0.14",
|
|
29
36
|
# Backs the Beta sigma schedule (diffusers gates use_beta_sigmas on scipy).
|
|
@@ -41,6 +48,13 @@ runtime = [
|
|
|
41
48
|
# The blocks raise a plain ImportError without it, so the node would advertise two ports it
|
|
42
49
|
# cannot read. Video output goes out through ffmpeg, not this.
|
|
43
50
|
"av>=12",
|
|
51
|
+
# Reached only by paths we do not call (LTX's EXR/HDR export and its multi-GPU fleet), but both
|
|
52
|
+
# are imported at module level by the vendored package roots. Two small wheels are a cheaper
|
|
53
|
+
# price than deleting files out of `models/ltx25/vendor/` and making every re-sync a merge.
|
|
54
|
+
"openimageio>=3.0",
|
|
55
|
+
"cloudpickle>=3.1",
|
|
56
|
+
# Tensor reshaping throughout LTX-2.5's vendored transformer and VAEs.
|
|
57
|
+
"einops>=0.7",
|
|
44
58
|
]
|
|
45
59
|
server = [
|
|
46
60
|
"fastapi>=0.110",
|
|
@@ -65,7 +79,6 @@ training = [
|
|
|
65
79
|
"nvidia-ml-py>=12",
|
|
66
80
|
# Florence-2 auto-captioner is loaded via trust_remote_code and needs these.
|
|
67
81
|
"timm>=1.0",
|
|
68
|
-
"einops>=0.7",
|
|
69
82
|
]
|
|
70
83
|
dev = [
|
|
71
84
|
"pytest>=8",
|
|
@@ -81,12 +94,16 @@ all = [
|
|
|
81
94
|
# runtime
|
|
82
95
|
"torch>=2.2",
|
|
83
96
|
"diffusers==0.39.0",
|
|
84
|
-
|
|
97
|
+
# See the `runtime` extra: floored by LTX-2.5's Gemma 4 encoder, capped by transformers 5.15.
|
|
98
|
+
"transformers>=5.8,<5.15",
|
|
85
99
|
"accelerate>=0.30",
|
|
86
100
|
"safetensors>=0.4",
|
|
101
|
+
"torchaudio",
|
|
87
102
|
"torchao>=0.14",
|
|
88
|
-
# Clip decode for MiniMax H3 LoRA training, and H3's reference node.
|
|
103
|
+
# Clip decode for MiniMax H3 and LTX-2.5 LoRA training, and H3's reference node.
|
|
89
104
|
"av>=12",
|
|
105
|
+
"openimageio>=3.0",
|
|
106
|
+
"cloudpickle>=3.1",
|
|
90
107
|
"scipy>=1.11",
|
|
91
108
|
# 0.32 is where hf_xet became a hard dependency rather than an extra. Below it, Hugging Face
|
|
92
109
|
# refuses the largest files outright ("too large to be downloaded using the regular download
|
|
@@ -7,12 +7,33 @@ from pathlib import Path
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
def models_dir() -> Path:
|
|
10
|
-
"""The models root
|
|
11
|
-
`./models`. Users drop their own weight files here; nothing is downloaded."""
|
|
10
|
+
"""The **writable** models root: where downloads and trained LoRAs land. `INLINE_MODELS_DIR`,
|
|
11
|
+
else `./models`. Users drop their own weight files here; nothing is downloaded."""
|
|
12
12
|
env = os.environ.get("INLINE_MODELS_DIR")
|
|
13
13
|
return Path(env).expanduser() if env else Path("models")
|
|
14
14
|
|
|
15
15
|
|
|
16
|
+
def models_dirs() -> list[Path]:
|
|
17
|
+
"""Every root scanned for installed weights, writable one first.
|
|
18
|
+
|
|
19
|
+
Pointing `INLINE_MODELS_DIR` (or `--models-dir`) somewhere else used to hide `./models`
|
|
20
|
+
entirely, so a user with weights in both places could only ever see one set. The extra roots
|
|
21
|
+
are read-only: only `models_dir()` is ever written to.
|
|
22
|
+
"""
|
|
23
|
+
roots = [models_dir()]
|
|
24
|
+
default = Path("models")
|
|
25
|
+
for extra in (default, *_extra_models_dirs()):
|
|
26
|
+
if extra not in roots and extra.is_dir():
|
|
27
|
+
roots.append(extra)
|
|
28
|
+
return roots
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _extra_models_dirs() -> list[Path]:
|
|
32
|
+
"""Additional read-only roots from `INLINE_EXTRA_MODELS_DIRS` (os.pathsep-separated)."""
|
|
33
|
+
raw = os.environ.get("INLINE_EXTRA_MODELS_DIRS", "")
|
|
34
|
+
return [Path(p).expanduser() for p in raw.split(os.pathsep) if p.strip()]
|
|
35
|
+
|
|
36
|
+
|
|
16
37
|
def data_dir() -> Path:
|
|
17
38
|
"""Engine-owned working data (the run DB, takes). `INLINE_DATA_DIR`, else `./.inline`."""
|
|
18
39
|
env = os.environ.get("INLINE_DATA_DIR")
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"""The installed-model catalog: what the user has dropped under the models root.
|
|
2
|
+
|
|
3
|
+
The root holds one subfolder per category (``diffusion_models``, ``vae``, ``loras``, ...). A scan
|
|
4
|
+
lists, per category, the weight files present (by filename) plus any subfolder that itself contains
|
|
5
|
+
weights (by folder name, e.g. a sharded ``qwen3-4b/`` text encoder). Non-weight files are ignored.
|
|
6
|
+
|
|
7
|
+
Two consumers: ``serialize.param_json`` fills a param's ``options_from`` select from ``list()``, and
|
|
8
|
+
the server folds ``fingerprint()`` into the registry version so dropping a weight in bumps it and
|
|
9
|
+
clients refetch ``/v1/models``. Nothing is downloaded; users place their own files.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
import hashlib
|
|
15
|
+
import json
|
|
16
|
+
from collections.abc import Sequence
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
from typing import Any
|
|
19
|
+
|
|
20
|
+
from ..config import models_dirs
|
|
21
|
+
|
|
22
|
+
# Category subfolders scanned under the models root. These are the keys a param's `options_from`
|
|
23
|
+
# may reference (see graph/primitives.py); ensure_dirs() creates them so drop-in is obvious.
|
|
24
|
+
CATEGORIES: tuple[str, ...] = (
|
|
25
|
+
"diffusion_models",
|
|
26
|
+
"checkpoints",
|
|
27
|
+
"vae",
|
|
28
|
+
"text_encoders",
|
|
29
|
+
"loras",
|
|
30
|
+
"clip_vision",
|
|
31
|
+
"controlnet",
|
|
32
|
+
"upscale_models",
|
|
33
|
+
# Latent-space upsamplers, kept apart from `upscale_models` (which is pixel-space) because they
|
|
34
|
+
# are not interchangeable: LTX-2.5's two-stage pipeline upsamples between denoise stages.
|
|
35
|
+
"latent_upscale_models",
|
|
36
|
+
# Small weight patches applied to a loaded model rather than loaded as one, e.g. LTX-2.5's
|
|
37
|
+
# duration head. Mirrors the folder the split packs publish them under.
|
|
38
|
+
"model_patches",
|
|
39
|
+
"embeddings",
|
|
40
|
+
# Written by the preprocess runner rather than the user, but it holds real weights and the
|
|
41
|
+
# panel is meant to show everything on disk.
|
|
42
|
+
"annotators",
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
# Extensions we treat as model weights. A folder counts as a model if it contains one of these.
|
|
46
|
+
_WEIGHT_SUFFIXES: frozenset[str] = frozenset(
|
|
47
|
+
{".safetensors", ".ckpt", ".pt", ".pth", ".bin", ".gguf", ".onnx"}
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _is_weight(path: Path) -> bool:
|
|
52
|
+
return path.is_file() and path.suffix.lower() in _WEIGHT_SUFFIXES
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _folder_has_weight(path: Path) -> bool:
|
|
56
|
+
return any(_is_weight(child) for child in path.rglob("*"))
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _file_node(path: Path) -> dict[str, Any]:
|
|
60
|
+
stat = path.stat()
|
|
61
|
+
return {
|
|
62
|
+
"name": path.name,
|
|
63
|
+
"path": str(path),
|
|
64
|
+
"kind": "file",
|
|
65
|
+
"sizeBytes": stat.st_size,
|
|
66
|
+
"mtime": int(stat.st_mtime * 1000),
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def _dir_node(path: Path, name: str) -> dict[str, Any] | None:
|
|
71
|
+
"""A directory as a tree node, or None when it holds nothing worth showing."""
|
|
72
|
+
if not path.is_dir():
|
|
73
|
+
return None
|
|
74
|
+
children: list[dict[str, Any]] = []
|
|
75
|
+
try:
|
|
76
|
+
entries = sorted(path.iterdir(), key=lambda p: p.name.lower())
|
|
77
|
+
except OSError:
|
|
78
|
+
return None
|
|
79
|
+
for entry in entries:
|
|
80
|
+
# Caches like loras/.cache and text_encoders/.snap are noise in a panel about weights.
|
|
81
|
+
if entry.name.startswith("."):
|
|
82
|
+
continue
|
|
83
|
+
if _is_weight(entry):
|
|
84
|
+
children.append(_file_node(entry))
|
|
85
|
+
elif entry.is_dir():
|
|
86
|
+
child = _dir_node(entry, entry.name)
|
|
87
|
+
if child is not None:
|
|
88
|
+
children.append(child)
|
|
89
|
+
if not children:
|
|
90
|
+
return None
|
|
91
|
+
return {
|
|
92
|
+
"name": name,
|
|
93
|
+
"path": str(path),
|
|
94
|
+
"kind": "dir",
|
|
95
|
+
"children": children,
|
|
96
|
+
"fileCount": sum(1 for c in children if c["kind"] == "file"),
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class ModelCatalog:
|
|
101
|
+
"""Scans the models roots and answers "what's installed" per category.
|
|
102
|
+
|
|
103
|
+
Cheap to construct; nothing touches disk until ``ensure_dirs`` or ``rescan``/``scan``. Results
|
|
104
|
+
are cached so ``list`` and ``fingerprint`` are hits between scans. Several roots may be scanned
|
|
105
|
+
(see ``config.models_dirs``); only the first is ever written to.
|
|
106
|
+
"""
|
|
107
|
+
|
|
108
|
+
def __init__(self, root: Path | Sequence[Path]) -> None:
|
|
109
|
+
roots = [Path(root)] if isinstance(root, str | Path) else [Path(r) for r in root]
|
|
110
|
+
self._roots = roots or [Path("models")]
|
|
111
|
+
self._entries: dict[str, list[str]] = {category: [] for category in CATEGORIES}
|
|
112
|
+
|
|
113
|
+
@property
|
|
114
|
+
def root(self) -> Path:
|
|
115
|
+
"""The writable root. Downloads and trained LoRAs land here."""
|
|
116
|
+
return self._roots[0]
|
|
117
|
+
|
|
118
|
+
@property
|
|
119
|
+
def roots(self) -> list[Path]:
|
|
120
|
+
return list(self._roots)
|
|
121
|
+
|
|
122
|
+
def ensure_dirs(self) -> None:
|
|
123
|
+
"""Create the writable root and its category subfolders, so drop-in has somewhere to go."""
|
|
124
|
+
for category in CATEGORIES:
|
|
125
|
+
(self.root / category).mkdir(parents=True, exist_ok=True)
|
|
126
|
+
|
|
127
|
+
def rescan(self) -> dict[str, list[str]]:
|
|
128
|
+
"""Re-read every category from every root, cache the result, and return it."""
|
|
129
|
+
entries: dict[str, list[str]] = {}
|
|
130
|
+
for category in CATEGORIES:
|
|
131
|
+
names: list[str] = []
|
|
132
|
+
for root in self._roots:
|
|
133
|
+
for name in self._scan_category(root / category):
|
|
134
|
+
if name not in names:
|
|
135
|
+
names.append(name)
|
|
136
|
+
entries[category] = sorted(names)
|
|
137
|
+
self._entries = entries
|
|
138
|
+
return entries
|
|
139
|
+
|
|
140
|
+
def tree(self) -> list[dict[str, Any]]:
|
|
141
|
+
"""Every root as a nested, read-only listing for the Models panel.
|
|
142
|
+
|
|
143
|
+
Separate from ``rescan`` because the select only needs flat names, while the panel wants
|
|
144
|
+
nesting, sizes and mtimes; keeping them apart stops the hot path paying for the detail.
|
|
145
|
+
"""
|
|
146
|
+
out: list[dict[str, Any]] = []
|
|
147
|
+
for index, root in enumerate(self._roots):
|
|
148
|
+
categories = [
|
|
149
|
+
node
|
|
150
|
+
for category in CATEGORIES
|
|
151
|
+
if (node := _dir_node(root / category, category)) is not None
|
|
152
|
+
]
|
|
153
|
+
out.append(
|
|
154
|
+
{
|
|
155
|
+
"path": str(root),
|
|
156
|
+
"label": root.name or str(root),
|
|
157
|
+
"writable": index == 0,
|
|
158
|
+
"exists": root.is_dir(),
|
|
159
|
+
"categories": categories,
|
|
160
|
+
}
|
|
161
|
+
)
|
|
162
|
+
return out
|
|
163
|
+
|
|
164
|
+
# app.py calls scan() in the lifespan; rescan() is the same work exposed for tests/callers that
|
|
165
|
+
# want the mapping back. Keep both so neither call site has to know about the other.
|
|
166
|
+
def scan(self) -> dict[str, list[str]]:
|
|
167
|
+
return self.rescan()
|
|
168
|
+
|
|
169
|
+
def list(self, category: str) -> list[str]:
|
|
170
|
+
"""The installed entries for a category (empty for an unknown or empty one)."""
|
|
171
|
+
return list(self._entries.get(category, []))
|
|
172
|
+
|
|
173
|
+
def fingerprint(self) -> str:
|
|
174
|
+
"""A short, stable digest of the cached scan; changes iff the installed set changes."""
|
|
175
|
+
payload = json.dumps(self._entries, sort_keys=True)
|
|
176
|
+
return hashlib.sha256(payload.encode()).hexdigest()[:16]
|
|
177
|
+
|
|
178
|
+
def _scan_category(self, directory: Path) -> list[str]:
|
|
179
|
+
if not directory.is_dir():
|
|
180
|
+
return []
|
|
181
|
+
names: list[str] = []
|
|
182
|
+
for entry in directory.iterdir():
|
|
183
|
+
if entry.name.startswith("."):
|
|
184
|
+
continue
|
|
185
|
+
if _is_weight(entry):
|
|
186
|
+
names.append(entry.name)
|
|
187
|
+
elif entry.is_dir() and _folder_has_weight(entry):
|
|
188
|
+
# A sharded model (config + shards) is one entry, named for its folder.
|
|
189
|
+
names.append(entry.name)
|
|
190
|
+
return sorted(names)
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def resolve_picked(category: str, chosen: object) -> Path | None:
|
|
194
|
+
"""A model dropdown's stored value, resolved to a file under ``category``.
|
|
195
|
+
|
|
196
|
+
The select serves bare filenames, but projects written before it did store the full relative
|
|
197
|
+
path, and joining one of those under the category doubles the prefix into a path that cannot
|
|
198
|
+
exist. So: try the value as given under the category, then its bare name there, then the value
|
|
199
|
+
as a path in its own right. Returns None when nothing matches, which callers must not stringify
|
|
200
|
+
(``str(None)`` reaching a loader reads as a corrupt file rather than a stale pick).
|
|
201
|
+
"""
|
|
202
|
+
name = str(chosen or "").strip()
|
|
203
|
+
if not name:
|
|
204
|
+
return None
|
|
205
|
+
# Every root, writable one first, so a pick resolves wherever the user actually keeps it.
|
|
206
|
+
for models_root in models_dirs():
|
|
207
|
+
root = models_root / category
|
|
208
|
+
for candidate in (root / name, root / Path(name).name):
|
|
209
|
+
if candidate.exists():
|
|
210
|
+
return candidate
|
|
211
|
+
bare = Path(name)
|
|
212
|
+
return bare if bare.exists() else None
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""LTX-2.5: text, image and keyframe pairs to video with a synchronised soundtrack.
|
|
2
|
+
|
|
3
|
+
The runner and its descriptors are re-exported here; `pipeline` and `vendor` are imported lazily so
|
|
4
|
+
this package stays importable for the model popup on an install with no ML stack.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from .runner import DESCRIPTORS, GRID, VARIANTS, Ltx25Runner, Variant, register_ltx25
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"DESCRIPTORS",
|
|
13
|
+
"GRID",
|
|
14
|
+
"VARIANTS",
|
|
15
|
+
"Ltx25Runner",
|
|
16
|
+
"Variant",
|
|
17
|
+
"register_ltx25",
|
|
18
|
+
]
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"""Write an LTX-2.5 adapter in the names and the scaling other LTX tools actually read.
|
|
2
|
+
|
|
3
|
+
Two things separate what PEFT produces from what the ecosystem expects, and only one of them is a
|
|
4
|
+
rename.
|
|
5
|
+
|
|
6
|
+
**The prefix.** Published LTX LoRAs key every tensor as ``diffusion_model.<module>.lora_A.weight``.
|
|
7
|
+
Module paths below it already match ours exactly - the published distilled LoRA targets 1660
|
|
8
|
+
modules and the transformer has exactly 1660 Linears, with no mismatch - so the rename is the
|
|
9
|
+
prefix and nothing else.
|
|
10
|
+
|
|
11
|
+
**The scale, which is the part that bites.** PEFT trains with a scale of ``alpha / rank`` and saves
|
|
12
|
+
the factors raw, expecting the loader to reapply it. Inline's loader does, from the ``.alpha``
|
|
13
|
+
written beside each pair. `ltx_core`'s does **not**: ``_products_for_sd_key`` pairs ``lora_A`` with
|
|
14
|
+
``lora_B`` by exact key and applies only the user's strength, ignoring alpha. Upstream never notices
|
|
15
|
+
because their published adapters ship ``rank == alpha``, so the scale is 1.0.
|
|
16
|
+
|
|
17
|
+
So an adapter trained at ``alpha != rank`` would load correctly here and at the wrong strength
|
|
18
|
+
everywhere else - silently, because a LoRA at the wrong scale is not an error, just a worse result.
|
|
19
|
+
Folding the scale into ``lora_B`` and dropping ``.alpha`` makes the file mean the same thing to
|
|
20
|
+
every loader, which is what portability has to mean.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
from __future__ import annotations
|
|
24
|
+
|
|
25
|
+
from typing import Any
|
|
26
|
+
|
|
27
|
+
#: Every published LTX LoRA carries it; our loader already strips it on the way back in.
|
|
28
|
+
PREFIX = "diffusion_model."
|
|
29
|
+
|
|
30
|
+
_DOWN = ".lora_A.weight"
|
|
31
|
+
_UP = ".lora_B.weight"
|
|
32
|
+
_ALPHA = ".alpha"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def export_reference(state: dict[str, Any]) -> dict[str, Any]:
|
|
36
|
+
"""PEFT's state dict as a published-convention LTX LoRA.
|
|
37
|
+
|
|
38
|
+
Takes the ``.alpha`` scalars ``trainer._save_lora`` has already written, folds ``alpha / rank``
|
|
39
|
+
into the up-projection, drops them, and prefixes what remains.
|
|
40
|
+
"""
|
|
41
|
+
scales = _scales(state)
|
|
42
|
+
out: dict[str, Any] = {}
|
|
43
|
+
for key, value in state.items():
|
|
44
|
+
if key.endswith(_ALPHA):
|
|
45
|
+
continue # folded into lora_B below; keeping it would double-apply in our own loader
|
|
46
|
+
if key.endswith(_UP):
|
|
47
|
+
scale = scales.get(key[: -len(_UP)], 1.0)
|
|
48
|
+
value = value * scale if scale != 1.0 else value
|
|
49
|
+
out[f"{PREFIX}{key}"] = value
|
|
50
|
+
return out
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _scales(state: dict[str, Any]) -> dict[str, float]:
|
|
54
|
+
"""``module -> alpha / rank``, from the alpha scalars and the rank of each down-projection.
|
|
55
|
+
|
|
56
|
+
Rank is read off ``lora_A``'s own first dimension rather than taken from the run's config, so a
|
|
57
|
+
resumed or hand-edited adapter is described by what it contains.
|
|
58
|
+
"""
|
|
59
|
+
scales: dict[str, float] = {}
|
|
60
|
+
for key, alpha in state.items():
|
|
61
|
+
if not key.endswith(_ALPHA):
|
|
62
|
+
continue
|
|
63
|
+
module = key[: -len(_ALPHA)]
|
|
64
|
+
down = state.get(f"{module}{_DOWN}")
|
|
65
|
+
rank = int(getattr(down, "shape", (0,))[0]) if down is not None else 0
|
|
66
|
+
if rank:
|
|
67
|
+
scales[module] = float(alpha) / rank
|
|
68
|
+
return scales
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def is_reference(state: dict[str, Any]) -> bool:
|
|
72
|
+
"""Whether a state dict is already in the published convention."""
|
|
73
|
+
return any(key.startswith(PREFIX) for key in state)
|