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.
Files changed (516) hide show
  1. {inline_core-1.2.67 → inline_core-1.2.69}/PKG-INFO +11 -5
  2. {inline_core-1.2.67 → inline_core-1.2.69}/README.md +1 -1
  3. {inline_core-1.2.67 → inline_core-1.2.69}/pyproject.toml +22 -5
  4. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/config.py +23 -2
  5. inline_core-1.2.69/src/inline_core/models/catalog.py +212 -0
  6. inline_core-1.2.69/src/inline_core/models/ltx25/__init__.py +18 -0
  7. inline_core-1.2.69/src/inline_core/models/ltx25/lora_keys.py +73 -0
  8. inline_core-1.2.69/src/inline_core/models/ltx25/memory.py +201 -0
  9. inline_core-1.2.69/src/inline_core/models/ltx25/pipeline.py +351 -0
  10. inline_core-1.2.69/src/inline_core/models/ltx25/provider.py +113 -0
  11. inline_core-1.2.69/src/inline_core/models/ltx25/requirements.py +462 -0
  12. inline_core-1.2.69/src/inline_core/models/ltx25/runner.py +384 -0
  13. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/__init__.py +38 -0
  14. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/__init__.py +0 -0
  15. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/allocator_trim_strategy.py +8 -0
  16. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/batch_split.py +105 -0
  17. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/__init__.py +20 -0
  18. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/block_fetcher.py +83 -0
  19. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/builder.py +500 -0
  20. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/disk.py +167 -0
  21. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/pool.py +71 -0
  22. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/provider.py +165 -0
  23. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/source.py +175 -0
  24. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/stream_sync.py +174 -0
  25. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/utils.py +169 -0
  26. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/wrapper.py +101 -0
  27. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/color/__init__.py +59 -0
  28. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/color/audio_mux.py +82 -0
  29. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/color/hlg.py +306 -0
  30. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/color/primaries.py +125 -0
  31. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/color/yuv.py +228 -0
  32. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/components/__init__.py +10 -0
  33. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/components/diffusion_steps.py +252 -0
  34. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/components/guiders.py +369 -0
  35. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/components/noisers.py +37 -0
  36. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/components/patchifiers.py +353 -0
  37. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/components/protocols.py +101 -0
  38. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/components/schedulers.py +130 -0
  39. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/__init__.py +25 -0
  40. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/exceptions.py +4 -0
  41. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/item.py +20 -0
  42. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/mask_utils.py +244 -0
  43. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/__init__.py +19 -0
  44. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/attention_strength_wrapper.py +71 -0
  45. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/keyframe_cond.py +90 -0
  46. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/keyframe_slots.py +174 -0
  47. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/latent_cond.py +43 -0
  48. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/mask_cond.py +49 -0
  49. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/noise_mask_cond.py +45 -0
  50. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/reference_audio_cond.py +65 -0
  51. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/reference_video_cond.py +108 -0
  52. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/devices.py +112 -0
  53. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/duration_head/__init__.py +11 -0
  54. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/duration_head/duration_head.py +118 -0
  55. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/duration_head/model_configurator.py +35 -0
  56. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/guidance/__init__.py +15 -0
  57. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/guidance/perturbations.py +143 -0
  58. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/hdr.py +172 -0
  59. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/__init__.py +66 -0
  60. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/attention_ops.py +42 -0
  61. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/fuse_loras.py +204 -0
  62. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/helpers.py +95 -0
  63. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/kernels.py +79 -0
  64. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/module_ops.py +14 -0
  65. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/primitives.py +176 -0
  66. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/registry.py +147 -0
  67. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/sd_ops.py +145 -0
  68. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/sft_loader.py +77 -0
  69. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/loader/single_gpu_model_builder.py +294 -0
  70. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/modality_tiling.py +243 -0
  71. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/__init__.py +11 -0
  72. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/__init__.py +29 -0
  73. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/attention.py +71 -0
  74. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/audio_vae.py +509 -0
  75. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/causal_conv_2d.py +110 -0
  76. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/causality_axis.py +10 -0
  77. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/downsample.py +110 -0
  78. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/model_configurator.py +200 -0
  79. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/ops.py +75 -0
  80. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/resnet.py +176 -0
  81. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/upsample.py +106 -0
  82. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/vocoder.py +630 -0
  83. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/common/__init__.py +9 -0
  84. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/common/normalization.py +59 -0
  85. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/disposable.py +42 -0
  86. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/model_protocol.py +44 -0
  87. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/__init__.py +22 -0
  88. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/adaln.py +45 -0
  89. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/attention.py +579 -0
  90. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/compiling.py +239 -0
  91. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/cudagraph_capture.py +167 -0
  92. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/feed_forward.py +15 -0
  93. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/gelu_approx.py +10 -0
  94. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/modality.py +77 -0
  95. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/model.py +604 -0
  96. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/model_configurator.py +239 -0
  97. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/ops.py +106 -0
  98. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/rope.py +224 -0
  99. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/text_projection.py +38 -0
  100. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/timestep_embedding.py +143 -0
  101. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/transformer.py +447 -0
  102. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/transformer_args.py +411 -0
  103. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/__init__.py +10 -0
  104. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/blur_downsample.py +53 -0
  105. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/model.py +143 -0
  106. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/model_configurator.py +31 -0
  107. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/pixel_shuffle.py +54 -0
  108. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/res_block.py +37 -0
  109. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/spatial_rational_resampler.py +47 -0
  110. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/__init__.py +54 -0
  111. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/attention.py +69 -0
  112. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/conv_video_decoder.py +557 -0
  113. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/convolution.py +317 -0
  114. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/diffusion_tiling.py +759 -0
  115. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/diffusion_video_decoder.py +748 -0
  116. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/enums.py +20 -0
  117. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/memory_efficient_decode.py +683 -0
  118. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/model_configurator.py +565 -0
  119. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/normalization.py +3 -0
  120. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/ops.py +84 -0
  121. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/resnet.py +277 -0
  122. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/sampling.py +123 -0
  123. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/__init__.py +107 -0
  124. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/apply.py +206 -0
  125. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/attention.py +174 -0
  126. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/blocks.py +83 -0
  127. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/__init__.py +1 -0
  128. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/attn.py +420 -0
  129. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/block.py +70 -0
  130. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/context.py +88 -0
  131. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/mlp.py +178 -0
  132. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/__init__.py +1 -0
  133. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/attn.py +123 -0
  134. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/block.py +32 -0
  135. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/context.py +21 -0
  136. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/mlp.py +24 -0
  137. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/compiling.py +95 -0
  138. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/config.py +110 -0
  139. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/det_attn_rope.py +175 -0
  140. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/__init__.py +39 -0
  141. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/apply_dsl.py +111 -0
  142. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/attn.py +88 -0
  143. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/block.py +151 -0
  144. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/chain.py +79 -0
  145. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/fallback_na/__init__.py +154 -0
  146. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/fallback_na/eager.py +166 -0
  147. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/fallback_na/triton_na.py +181 -0
  148. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/layers.py +86 -0
  149. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/qkv.py +34 -0
  150. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/rope.py +109 -0
  151. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/rope_math.py +61 -0
  152. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/swiglu.py +479 -0
  153. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/video_vae.py +637 -0
  154. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/__init__.py +11 -0
  155. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/__init__.py +6 -0
  156. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/accelerate_wrapper.py +23 -0
  157. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/batch_parallel_wrapper.py +71 -0
  158. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/broadcast_wrapper.py +120 -0
  159. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/loader.py +120 -0
  160. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/sharded_sd.py +191 -0
  161. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/transformer/__init__.py +13 -0
  162. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/transformer/attention.py +270 -0
  163. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/transformer/sequence_parallel.py +318 -0
  164. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/transformer/tiled_data_parallel.py +99 -0
  165. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/vae/__init__.py +5 -0
  166. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/vae/distributed_decoder.py +318 -0
  167. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/__init__.py +17 -0
  168. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/blockwise/__init__.py +47 -0
  169. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/blockwise/_impl.py +433 -0
  170. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/fp8_cast.py +337 -0
  171. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/fp8_scaled_mm.py +203 -0
  172. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/__init__.py +64 -0
  173. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/convert.py +126 -0
  174. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/fuse.py +50 -0
  175. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/linear.py +139 -0
  176. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/prequant.py +207 -0
  177. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/types.py +13 -0
  178. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/quantization/policy.py +24 -0
  179. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/__init__.py +1 -0
  180. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/__init__.py +49 -0
  181. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/embeddings_connector.py +256 -0
  182. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/embeddings_processor.py +117 -0
  183. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/base_encoder.py +262 -0
  184. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/encoder_configurator.py +481 -0
  185. 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
  186. 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
  187. 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
  188. 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
  189. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/feature_extractor.py +129 -0
  190. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/gemma_assets.py +396 -0
  191. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/tokenizer.py +63 -0
  192. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/tiling.py +945 -0
  193. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/tools.py +280 -0
  194. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/types.py +300 -0
  195. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_core/utils.py +62 -0
  196. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/__init__.py +74 -0
  197. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/a2vid_two_stage.py +387 -0
  198. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/dfr_layout.py +213 -0
  199. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/dfr_pipeline.py +630 -0
  200. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/distilled.py +367 -0
  201. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/distilled_mgpu.py +233 -0
  202. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/dubit.py +401 -0
  203. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/hdr_ic_lora.py +987 -0
  204. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/ic_lora.py +540 -0
  205. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/iclora_utils.py +170 -0
  206. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/keyframe_interpolation.py +362 -0
  207. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/__init__.py +31 -0
  208. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/_broadcast.py +68 -0
  209. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/bp_gemma_builder.py +90 -0
  210. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/controller.py +382 -0
  211. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/delegating_builder.py +91 -0
  212. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/fleet.py +375 -0
  213. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/gemma_builders.py +199 -0
  214. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/nccl_groups.py +31 -0
  215. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/runner.py +62 -0
  216. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/sp_builder.py +62 -0
  217. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/tdp_builder.py +75 -0
  218. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/vae_builders.py +87 -0
  219. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/weight_tracker.py +181 -0
  220. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/retake.py +397 -0
  221. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/t2a_one_stage.py +215 -0
  222. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_one_stage.py +311 -0
  223. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_two_stages.py +380 -0
  224. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_two_stages_hq.py +409 -0
  225. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_two_stages_hq_mgpu.py +278 -0
  226. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_two_stages_mgpu.py +279 -0
  227. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/__init__.py +57 -0
  228. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/args.py +1214 -0
  229. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/blocks.py +1236 -0
  230. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/constants.py +199 -0
  231. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/denoisers.py +361 -0
  232. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/gpu_model.py +34 -0
  233. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/helpers.py +585 -0
  234. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/__init__.py +76 -0
  235. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/color_config.py +103 -0
  236. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/decode.py +435 -0
  237. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/encode.py +302 -0
  238. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/exr.py +255 -0
  239. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/range_map.py +25 -0
  240. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/resize.py +143 -0
  241. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/model_paths.py +189 -0
  242. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/quantization_factory.py +50 -0
  243. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/res2s.py +62 -0
  244. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/samplers.py +707 -0
  245. inline_core-1.2.69/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/types.py +144 -0
  246. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/pipeline.py +24 -8
  247. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/runner.py +6 -1
  248. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/pipeline_runtime.py +51 -4
  249. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/video_params.py +7 -4
  250. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/runtime/progress.py +11 -1
  251. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/runtime/run.py +3 -0
  252. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/runtime/video_encode.py +10 -3
  253. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/app.py +74 -7
  254. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/bootstrap.py +11 -0
  255. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/manager.py +85 -8
  256. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/serialize.py +14 -0
  257. inline_core-1.2.69/src/inline_core/studio/activity.py +396 -0
  258. inline_core-1.2.69/src/inline_core/studio/dataset_import.py +191 -0
  259. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/fal.py +75 -17
  260. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/generation.py +99 -45
  261. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/handlers.py +54 -4
  262. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/schema.py +34 -7
  263. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/store.py +58 -3
  264. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/training.py +354 -23
  265. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/training_store.py +56 -0
  266. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/training/arch.py +151 -15
  267. inline_core-1.2.69/src/inline_core/training/cache.py +116 -0
  268. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/training/dataset.py +88 -0
  269. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/training/h3.py +1 -1
  270. inline_core-1.2.69/src/inline_core/training/ltx25.py +364 -0
  271. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/training/models.py +83 -0
  272. inline_core-1.2.69/src/inline_core/training/precache_store.py +138 -0
  273. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/training/protocol.py +5 -0
  274. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/training/trainer.py +58 -7
  275. inline_core-1.2.69/tests/test_catalog.py +146 -0
  276. inline_core-1.2.69/tests/test_clip_grid_parity.py +68 -0
  277. inline_core-1.2.69/tests/test_dataset_import.py +86 -0
  278. inline_core-1.2.69/tests/test_encoder_parking.py +77 -0
  279. inline_core-1.2.69/tests/test_ltx25_lora_keys.py +117 -0
  280. inline_core-1.2.69/tests/test_ltx25_nodes.py +201 -0
  281. inline_core-1.2.69/tests/test_ltx25_requirements.py +438 -0
  282. inline_core-1.2.69/tests/test_ltx25_training.py +220 -0
  283. inline_core-1.2.69/tests/test_manager_queue.py +152 -0
  284. inline_core-1.2.69/tests/test_precache_store.py +113 -0
  285. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_staged_residency.py +92 -0
  286. inline_core-1.2.69/tests/test_studio_activity.py +270 -0
  287. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_rpc.py +3 -0
  288. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_schema.py +66 -0
  289. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_training.py +79 -0
  290. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_training_dataset.py +38 -0
  291. inline_core-1.2.69/tests/test_training_snapshots.py +68 -0
  292. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_video_encode.py +23 -0
  293. inline_core-1.2.67/src/inline_core/models/catalog.py +0 -119
  294. inline_core-1.2.67/src/inline_core/training/cache.py +0 -56
  295. inline_core-1.2.67/tests/test_catalog.py +0 -64
  296. {inline_core-1.2.67 → inline_core-1.2.69}/.gitignore +0 -0
  297. {inline_core-1.2.67 → inline_core-1.2.69}/.python-version +0 -0
  298. {inline_core-1.2.67 → inline_core-1.2.69}/CLAUDE.md +0 -0
  299. {inline_core-1.2.67 → inline_core-1.2.69}/main.py +0 -0
  300. {inline_core-1.2.67 → inline_core-1.2.69}/scripts/flux2_train_matrix.py +0 -0
  301. {inline_core-1.2.67 → inline_core-1.2.69}/scripts/minimax_h3_lora_check.py +0 -0
  302. {inline_core-1.2.67 → inline_core-1.2.69}/scripts/minimax_h3_train_matrix.py +0 -0
  303. {inline_core-1.2.67 → inline_core-1.2.69}/scripts/reference.py +0 -0
  304. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/__init__.py +0 -0
  305. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/components/__init__.py +0 -0
  306. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/components/conditioning.py +0 -0
  307. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/components/interfaces.py +0 -0
  308. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/device/__init__.py +0 -0
  309. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/device/auto.py +0 -0
  310. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/device/detect.py +0 -0
  311. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/device/memory.py +0 -0
  312. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/device/policy.py +0 -0
  313. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/device/probe.py +0 -0
  314. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/device/types.py +0 -0
  315. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/errors.py +0 -0
  316. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/__init__.py +0 -0
  317. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/api.py +0 -0
  318. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/constraints.py +0 -0
  319. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/fetch.py +0 -0
  320. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/handlers.py +0 -0
  321. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/importer.py +0 -0
  322. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/install.py +0 -0
  323. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/loader.py +0 -0
  324. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/manifest.py +0 -0
  325. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/models.py +0 -0
  326. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/paths.py +0 -0
  327. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/resolve.py +0 -0
  328. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/scanner.py +0 -0
  329. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/state.py +0 -0
  330. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/extensions/tools.py +0 -0
  331. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/ffmpeg.py +0 -0
  332. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/__init__.py +0 -0
  333. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/cache.py +0 -0
  334. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/descriptor.py +0 -0
  335. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/executor.py +0 -0
  336. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/loader_runners.py +0 -0
  337. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/primitives.py +0 -0
  338. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/registry.py +0 -0
  339. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/runners.py +0 -0
  340. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/schema.py +0 -0
  341. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/topo.py +0 -0
  342. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/graph/validate.py +0 -0
  343. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/media.py +0 -0
  344. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/__init__.py +0 -0
  345. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/checkpoint.py +0 -0
  346. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/controlspace.py +0 -0
  347. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/flux2/__init__.py +0 -0
  348. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/flux2/controlnet.py +0 -0
  349. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/flux2/embeds.py +0 -0
  350. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/flux2/provider.py +0 -0
  351. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/flux2/requirements.py +0 -0
  352. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/flux2/runner.py +0 -0
  353. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/flux2/variants.py +0 -0
  354. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/keymap.py +0 -0
  355. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/krea2/__init__.py +0 -0
  356. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/krea2/convert.py +0 -0
  357. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/krea2/depth_control.py +0 -0
  358. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/krea2/img2img.py +0 -0
  359. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/krea2/provider.py +0 -0
  360. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/krea2/requirements.py +0 -0
  361. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/krea2/runner.py +0 -0
  362. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/loaders.py +0 -0
  363. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/lora.py +0 -0
  364. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/__init__.py +0 -0
  365. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/adaln.py +0 -0
  366. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/keys.py +0 -0
  367. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/load.py +0 -0
  368. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/lora_keys.py +0 -0
  369. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/provider.py +0 -0
  370. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/requirements.py +0 -0
  371. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vae_keys.py +0 -0
  372. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/__init__.py +0 -0
  373. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/autoencoder_kl_minimax_h3.py +0 -0
  374. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/autoencoder_kl_minimax_h3_audio.py +0 -0
  375. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/before_denoise.py +0 -0
  376. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/before_encoder.py +0 -0
  377. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/decoders.py +0 -0
  378. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/denoise.py +0 -0
  379. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/encoders.py +0 -0
  380. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/modular_blocks_minimax_h3.py +0 -0
  381. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/modular_pipeline.py +0 -0
  382. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/packing.py +0 -0
  383. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/packing_ref2va.py +0 -0
  384. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/scheduling_minimax_h3.py +0 -0
  385. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/minimaxh3/vendor/transformer_minimax_h3.py +0 -0
  386. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/offload.py +0 -0
  387. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/prepared.py +0 -0
  388. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/preprocess/__init__.py +0 -0
  389. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/preprocess/requirements.py +0 -0
  390. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/preprocess/runner.py +0 -0
  391. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/references.py +0 -0
  392. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/requirements.py +3 -3
  393. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/sampling.py +0 -0
  394. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/zimage/__init__.py +0 -0
  395. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/zimage/primitives.py +0 -0
  396. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/zimage/provider.py +0 -0
  397. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/zimage/requirements.py +0 -0
  398. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/models/zimage/runner.py +0 -0
  399. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/parallel/__init__.py +0 -0
  400. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/parallel/config.py +0 -0
  401. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/parallel/group.py +0 -0
  402. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/parallel/launch.py +0 -0
  403. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/parallel/protocol.py +0 -0
  404. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/parallel/registry.py +0 -0
  405. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/parallel/worker.py +0 -0
  406. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/runtime/__init__.py +0 -0
  407. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/runtime/context.py +0 -0
  408. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/runtime/file_store.py +0 -0
  409. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/runtime/store.py +0 -0
  410. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/sampling/__init__.py +0 -0
  411. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/sampling/batch.py +0 -0
  412. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/__init__.py +0 -0
  413. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/__main__.py +0 -0
  414. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/assets.py +0 -0
  415. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/frontend.py +0 -0
  416. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/rpc.py +0 -0
  417. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/server/run_store.py +0 -0
  418. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/__init__.py +0 -0
  419. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/assets.py +0 -0
  420. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/config.py +0 -0
  421. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/frames.py +0 -0
  422. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/graph_build.py +0 -0
  423. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/image_meta.py +0 -0
  424. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/models.py +0 -0
  425. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/moodboard.py +0 -0
  426. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/peaks.py +0 -0
  427. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/recipe.py +0 -0
  428. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/system_stats.py +0 -0
  429. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/timeline/__init__.py +0 -0
  430. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/timeline/compose.py +0 -0
  431. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/timeline/ffmpeg.py +0 -0
  432. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/timeline/render.py +0 -0
  433. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/studio/timeline/resolve.py +0 -0
  434. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/takes.py +0 -0
  435. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/training/__init__.py +0 -0
  436. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/training/__main__.py +0 -0
  437. {inline_core-1.2.67 → inline_core-1.2.69}/src/inline_core/training/caption.py +0 -0
  438. {inline_core-1.2.67 → inline_core-1.2.69}/tests/conftest.py +0 -0
  439. {inline_core-1.2.67 → inline_core-1.2.69}/tests/helpers.py +0 -0
  440. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_cache.py +0 -0
  441. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_checkpoint.py +0 -0
  442. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_config.py +0 -0
  443. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_device_detect.py +0 -0
  444. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_executor.py +0 -0
  445. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_extension_api.py +0 -0
  446. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_extension_install.py +0 -0
  447. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_extension_manifest.py +0 -0
  448. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_extension_resolve.py +0 -0
  449. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_extension_scanner.py +0 -0
  450. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_extension_spine.py +0 -0
  451. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_extension_state.py +0 -0
  452. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_file_store.py +0 -0
  453. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_flux2_controlnet.py +0 -0
  454. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_flux2_folder.py +0 -0
  455. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_flux2_resolve.py +0 -0
  456. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_flux2_runner.py +0 -0
  457. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_flux2_training.py +0 -0
  458. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_flux2_variants.py +0 -0
  459. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_frontend_serving.py +0 -0
  460. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_hidden_nodes.py +0 -0
  461. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_keymap.py +0 -0
  462. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_krea2_convert.py +0 -0
  463. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_krea2_depth_control.py +0 -0
  464. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_krea2_requirements.py +0 -0
  465. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_krea2_runner.py +0 -0
  466. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_loader_runners.py +0 -0
  467. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_loaders.py +0 -0
  468. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_lora.py +0 -0
  469. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_lora_download.py +0 -0
  470. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_memory_policy.py +0 -0
  471. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_minimaxh3_adaln.py +0 -0
  472. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_minimaxh3_keys.py +0 -0
  473. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_minimaxh3_load.py +0 -0
  474. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_minimaxh3_lora_keys.py +0 -0
  475. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_minimaxh3_nodes.py +0 -0
  476. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_minimaxh3_training.py +0 -0
  477. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_model_requirements.py +0 -0
  478. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_offload_prepared.py +0 -0
  479. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_output_kind_contract.py +0 -0
  480. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_parallel_group.py +0 -0
  481. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_pipeline_cache.py +0 -0
  482. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_primitives.py +0 -0
  483. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_recipe.py +0 -0
  484. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_references.py +0 -0
  485. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_rpc_bridge.py +0 -0
  486. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_run_store.py +0 -0
  487. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_sampling.py +0 -0
  488. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_schema.py +0 -0
  489. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_server.py +0 -0
  490. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_assets.py +0 -0
  491. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_fal.py +0 -0
  492. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_frames.py +0 -0
  493. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_generation.py +0 -0
  494. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_graph_build.py +0 -0
  495. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_models.py +0 -0
  496. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_moodboard.py +0 -0
  497. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_multi_reference.py +0 -0
  498. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_node_size.py +0 -0
  499. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_peaks.py +0 -0
  500. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_store.py +0 -0
  501. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_studio_timeline.py +0 -0
  502. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_take_bytes.py +0 -0
  503. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_topo.py +0 -0
  504. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_training_arch.py +0 -0
  505. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_training_models.py +0 -0
  506. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_training_resolve.py +0 -0
  507. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_validate.py +0 -0
  508. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_video_params.py +0 -0
  509. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_webui_install.py +0 -0
  510. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_xfuser_sampler.py +0 -0
  511. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_zimage_primitives.py +0 -0
  512. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_zimage_resolve.py +0 -0
  513. {inline_core-1.2.67 → inline_core-1.2.69}/tests/test_zimage_runner.py +0 -0
  514. {inline_core-1.2.67 → inline_core-1.2.69}/uv.lock +0 -0
  515. {inline_core-1.2.67 → inline_core-1.2.69}/webui.bat +0 -0
  516. {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.67
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: transformers>=4.44; extra == 'all'
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: transformers>=4.44; extra == 'runtime'
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 and MiniMax H3 on your own images without a cloud
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 and MiniMax H3 on your own images without a cloud
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.67"
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
- "transformers>=4.44",
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
- "transformers>=4.44",
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 scanned on start (category subfolders inside). `INLINE_MODELS_DIR`, else
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)