inline-core 1.2.69__tar.gz → 1.2.70__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 (514) hide show
  1. {inline_core-1.2.69 → inline_core-1.2.70}/PKG-INFO +1 -1
  2. {inline_core-1.2.69 → inline_core-1.2.70}/pyproject.toml +1 -1
  3. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/graph/registry.py +10 -1
  4. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/graph/runners.py +18 -0
  5. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/pipeline.py +30 -8
  6. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/runner.py +17 -1
  7. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/pipeline_runtime.py +14 -0
  8. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/graph_build.py +60 -10
  9. inline_core-1.2.70/tests/test_ltx25_wired_refs.py +55 -0
  10. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_studio_graph_build.py +50 -0
  11. {inline_core-1.2.69 → inline_core-1.2.70}/.gitignore +0 -0
  12. {inline_core-1.2.69 → inline_core-1.2.70}/.python-version +0 -0
  13. {inline_core-1.2.69 → inline_core-1.2.70}/CLAUDE.md +0 -0
  14. {inline_core-1.2.69 → inline_core-1.2.70}/README.md +0 -0
  15. {inline_core-1.2.69 → inline_core-1.2.70}/main.py +0 -0
  16. {inline_core-1.2.69 → inline_core-1.2.70}/scripts/flux2_train_matrix.py +0 -0
  17. {inline_core-1.2.69 → inline_core-1.2.70}/scripts/minimax_h3_lora_check.py +0 -0
  18. {inline_core-1.2.69 → inline_core-1.2.70}/scripts/minimax_h3_train_matrix.py +0 -0
  19. {inline_core-1.2.69 → inline_core-1.2.70}/scripts/reference.py +0 -0
  20. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/__init__.py +0 -0
  21. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/components/__init__.py +0 -0
  22. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/components/conditioning.py +0 -0
  23. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/components/interfaces.py +0 -0
  24. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/config.py +0 -0
  25. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/device/__init__.py +0 -0
  26. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/device/auto.py +0 -0
  27. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/device/detect.py +0 -0
  28. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/device/memory.py +0 -0
  29. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/device/policy.py +0 -0
  30. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/device/probe.py +0 -0
  31. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/device/types.py +0 -0
  32. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/errors.py +0 -0
  33. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/extensions/__init__.py +0 -0
  34. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/extensions/api.py +0 -0
  35. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/extensions/constraints.py +0 -0
  36. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/extensions/fetch.py +0 -0
  37. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/extensions/handlers.py +0 -0
  38. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/extensions/importer.py +0 -0
  39. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/extensions/install.py +0 -0
  40. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/extensions/loader.py +0 -0
  41. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/extensions/manifest.py +0 -0
  42. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/extensions/models.py +0 -0
  43. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/extensions/paths.py +0 -0
  44. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/extensions/resolve.py +0 -0
  45. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/extensions/scanner.py +0 -0
  46. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/extensions/state.py +0 -0
  47. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/extensions/tools.py +0 -0
  48. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/ffmpeg.py +0 -0
  49. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/graph/__init__.py +0 -0
  50. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/graph/cache.py +0 -0
  51. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/graph/descriptor.py +0 -0
  52. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/graph/executor.py +0 -0
  53. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/graph/loader_runners.py +0 -0
  54. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/graph/primitives.py +0 -0
  55. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/graph/schema.py +0 -0
  56. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/graph/topo.py +0 -0
  57. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/graph/validate.py +0 -0
  58. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/media.py +0 -0
  59. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/__init__.py +0 -0
  60. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/catalog.py +0 -0
  61. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/checkpoint.py +0 -0
  62. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/controlspace.py +0 -0
  63. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/flux2/__init__.py +0 -0
  64. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/flux2/controlnet.py +0 -0
  65. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/flux2/embeds.py +0 -0
  66. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/flux2/provider.py +0 -0
  67. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/flux2/requirements.py +0 -0
  68. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/flux2/runner.py +0 -0
  69. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/flux2/variants.py +0 -0
  70. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/keymap.py +0 -0
  71. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/krea2/__init__.py +0 -0
  72. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/krea2/convert.py +0 -0
  73. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/krea2/depth_control.py +0 -0
  74. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/krea2/img2img.py +0 -0
  75. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/krea2/provider.py +0 -0
  76. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/krea2/requirements.py +0 -0
  77. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/krea2/runner.py +0 -0
  78. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/loaders.py +0 -0
  79. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/lora.py +0 -0
  80. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/__init__.py +0 -0
  81. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/lora_keys.py +0 -0
  82. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/memory.py +0 -0
  83. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/provider.py +0 -0
  84. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/requirements.py +0 -0
  85. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/__init__.py +0 -0
  86. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/__init__.py +0 -0
  87. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/allocator_trim_strategy.py +0 -0
  88. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/batch_split.py +0 -0
  89. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/__init__.py +0 -0
  90. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/block_fetcher.py +0 -0
  91. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/builder.py +0 -0
  92. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/disk.py +0 -0
  93. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/pool.py +0 -0
  94. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/provider.py +0 -0
  95. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/source.py +0 -0
  96. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/stream_sync.py +0 -0
  97. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/utils.py +0 -0
  98. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/wrapper.py +0 -0
  99. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/color/__init__.py +0 -0
  100. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/color/audio_mux.py +0 -0
  101. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/color/hlg.py +0 -0
  102. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/color/primaries.py +0 -0
  103. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/color/yuv.py +0 -0
  104. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/components/__init__.py +0 -0
  105. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/components/diffusion_steps.py +0 -0
  106. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/components/guiders.py +0 -0
  107. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/components/noisers.py +0 -0
  108. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/components/patchifiers.py +0 -0
  109. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/components/protocols.py +0 -0
  110. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/components/schedulers.py +0 -0
  111. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/__init__.py +0 -0
  112. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/exceptions.py +0 -0
  113. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/item.py +0 -0
  114. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/mask_utils.py +0 -0
  115. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/__init__.py +0 -0
  116. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/attention_strength_wrapper.py +0 -0
  117. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/keyframe_cond.py +0 -0
  118. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/keyframe_slots.py +0 -0
  119. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/latent_cond.py +0 -0
  120. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/mask_cond.py +0 -0
  121. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/noise_mask_cond.py +0 -0
  122. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/reference_audio_cond.py +0 -0
  123. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/reference_video_cond.py +0 -0
  124. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/devices.py +0 -0
  125. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/duration_head/__init__.py +0 -0
  126. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/duration_head/duration_head.py +0 -0
  127. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/duration_head/model_configurator.py +0 -0
  128. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/guidance/__init__.py +0 -0
  129. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/guidance/perturbations.py +0 -0
  130. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/hdr.py +0 -0
  131. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/loader/__init__.py +0 -0
  132. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/loader/attention_ops.py +0 -0
  133. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/loader/fuse_loras.py +0 -0
  134. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/loader/helpers.py +0 -0
  135. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/loader/kernels.py +0 -0
  136. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/loader/module_ops.py +0 -0
  137. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/loader/primitives.py +0 -0
  138. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/loader/registry.py +0 -0
  139. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/loader/sd_ops.py +0 -0
  140. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/loader/sft_loader.py +0 -0
  141. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/loader/single_gpu_model_builder.py +0 -0
  142. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/modality_tiling.py +0 -0
  143. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/__init__.py +0 -0
  144. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/__init__.py +0 -0
  145. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/attention.py +0 -0
  146. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/audio_vae.py +0 -0
  147. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/causal_conv_2d.py +0 -0
  148. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/causality_axis.py +0 -0
  149. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/downsample.py +0 -0
  150. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/model_configurator.py +0 -0
  151. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/ops.py +0 -0
  152. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/resnet.py +0 -0
  153. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/upsample.py +0 -0
  154. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/vocoder.py +0 -0
  155. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/common/__init__.py +0 -0
  156. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/common/normalization.py +0 -0
  157. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/disposable.py +0 -0
  158. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/model_protocol.py +0 -0
  159. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/__init__.py +0 -0
  160. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/adaln.py +0 -0
  161. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/attention.py +0 -0
  162. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/compiling.py +0 -0
  163. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/cudagraph_capture.py +0 -0
  164. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/feed_forward.py +0 -0
  165. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/gelu_approx.py +0 -0
  166. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/modality.py +0 -0
  167. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/model.py +0 -0
  168. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/model_configurator.py +0 -0
  169. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/ops.py +0 -0
  170. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/rope.py +0 -0
  171. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/text_projection.py +0 -0
  172. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/timestep_embedding.py +0 -0
  173. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/transformer.py +0 -0
  174. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/transformer_args.py +0 -0
  175. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/__init__.py +0 -0
  176. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/blur_downsample.py +0 -0
  177. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/model.py +0 -0
  178. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/model_configurator.py +0 -0
  179. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/pixel_shuffle.py +0 -0
  180. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/res_block.py +0 -0
  181. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/spatial_rational_resampler.py +0 -0
  182. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/__init__.py +0 -0
  183. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/attention.py +0 -0
  184. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/conv_video_decoder.py +0 -0
  185. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/convolution.py +0 -0
  186. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/diffusion_tiling.py +0 -0
  187. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/diffusion_video_decoder.py +0 -0
  188. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/enums.py +0 -0
  189. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/memory_efficient_decode.py +0 -0
  190. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/model_configurator.py +0 -0
  191. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/normalization.py +0 -0
  192. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/ops.py +0 -0
  193. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/resnet.py +0 -0
  194. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/sampling.py +0 -0
  195. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/__init__.py +0 -0
  196. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/apply.py +0 -0
  197. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/attention.py +0 -0
  198. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/blocks.py +0 -0
  199. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/__init__.py +0 -0
  200. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/attn.py +0 -0
  201. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/block.py +0 -0
  202. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/context.py +0 -0
  203. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/mlp.py +0 -0
  204. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/__init__.py +0 -0
  205. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/attn.py +0 -0
  206. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/block.py +0 -0
  207. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/context.py +0 -0
  208. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/mlp.py +0 -0
  209. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/compiling.py +0 -0
  210. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/config.py +0 -0
  211. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/det_attn_rope.py +0 -0
  212. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/__init__.py +0 -0
  213. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/apply_dsl.py +0 -0
  214. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/attn.py +0 -0
  215. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/block.py +0 -0
  216. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/chain.py +0 -0
  217. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/fallback_na/__init__.py +0 -0
  218. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/fallback_na/eager.py +0 -0
  219. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/fallback_na/triton_na.py +0 -0
  220. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/layers.py +0 -0
  221. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/qkv.py +0 -0
  222. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/rope.py +0 -0
  223. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/rope_math.py +0 -0
  224. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/swiglu.py +0 -0
  225. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/video_vae.py +0 -0
  226. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/__init__.py +0 -0
  227. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/__init__.py +0 -0
  228. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/accelerate_wrapper.py +0 -0
  229. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/batch_parallel_wrapper.py +0 -0
  230. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/broadcast_wrapper.py +0 -0
  231. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/loader.py +0 -0
  232. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/sharded_sd.py +0 -0
  233. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/transformer/__init__.py +0 -0
  234. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/transformer/attention.py +0 -0
  235. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/transformer/sequence_parallel.py +0 -0
  236. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/transformer/tiled_data_parallel.py +0 -0
  237. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/vae/__init__.py +0 -0
  238. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/vae/distributed_decoder.py +0 -0
  239. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/__init__.py +0 -0
  240. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/blockwise/__init__.py +0 -0
  241. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/blockwise/_impl.py +0 -0
  242. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/fp8_cast.py +0 -0
  243. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/fp8_scaled_mm.py +0 -0
  244. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/__init__.py +0 -0
  245. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/convert.py +0 -0
  246. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/fuse.py +0 -0
  247. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/linear.py +0 -0
  248. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/prequant.py +0 -0
  249. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/types.py +0 -0
  250. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/policy.py +0 -0
  251. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/__init__.py +0 -0
  252. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/__init__.py +0 -0
  253. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/embeddings_connector.py +0 -0
  254. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/embeddings_processor.py +0 -0
  255. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/base_encoder.py +0 -0
  256. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/encoder_configurator.py +0 -0
  257. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/prompts/gemma3_i2v_system_prompt.txt +0 -0
  258. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/prompts/gemma3_t2v_system_prompt.txt +0 -0
  259. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/prompts/gemma4_i2v_system_prompt.txt +0 -0
  260. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/prompts/gemma4_t2v_system_prompt.txt +0 -0
  261. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/feature_extractor.py +0 -0
  262. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/gemma_assets.py +0 -0
  263. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/tokenizer.py +0 -0
  264. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/tiling.py +0 -0
  265. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/tools.py +0 -0
  266. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/types.py +0 -0
  267. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_core/utils.py +0 -0
  268. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/__init__.py +0 -0
  269. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/a2vid_two_stage.py +0 -0
  270. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/dfr_layout.py +0 -0
  271. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/dfr_pipeline.py +0 -0
  272. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/distilled.py +0 -0
  273. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/distilled_mgpu.py +0 -0
  274. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/dubit.py +0 -0
  275. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/hdr_ic_lora.py +0 -0
  276. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/ic_lora.py +0 -0
  277. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/iclora_utils.py +0 -0
  278. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/keyframe_interpolation.py +0 -0
  279. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/__init__.py +0 -0
  280. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/_broadcast.py +0 -0
  281. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/bp_gemma_builder.py +0 -0
  282. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/controller.py +0 -0
  283. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/delegating_builder.py +0 -0
  284. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/fleet.py +0 -0
  285. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/gemma_builders.py +0 -0
  286. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/nccl_groups.py +0 -0
  287. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/runner.py +0 -0
  288. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/sp_builder.py +0 -0
  289. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/tdp_builder.py +0 -0
  290. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/vae_builders.py +0 -0
  291. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/weight_tracker.py +0 -0
  292. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/retake.py +0 -0
  293. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/t2a_one_stage.py +0 -0
  294. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_one_stage.py +0 -0
  295. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_two_stages.py +0 -0
  296. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_two_stages_hq.py +0 -0
  297. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_two_stages_hq_mgpu.py +0 -0
  298. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_two_stages_mgpu.py +0 -0
  299. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/__init__.py +0 -0
  300. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/args.py +0 -0
  301. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/blocks.py +0 -0
  302. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/constants.py +0 -0
  303. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/denoisers.py +0 -0
  304. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/gpu_model.py +0 -0
  305. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/helpers.py +0 -0
  306. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/__init__.py +0 -0
  307. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/color_config.py +0 -0
  308. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/decode.py +0 -0
  309. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/encode.py +0 -0
  310. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/exr.py +0 -0
  311. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/range_map.py +0 -0
  312. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/resize.py +0 -0
  313. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/model_paths.py +0 -0
  314. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/quantization_factory.py +0 -0
  315. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/res2s.py +0 -0
  316. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/samplers.py +0 -0
  317. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/types.py +0 -0
  318. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/__init__.py +0 -0
  319. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/adaln.py +0 -0
  320. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/keys.py +0 -0
  321. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/load.py +0 -0
  322. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/lora_keys.py +0 -0
  323. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/pipeline.py +0 -0
  324. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/provider.py +0 -0
  325. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/requirements.py +0 -0
  326. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/runner.py +0 -0
  327. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/vae_keys.py +0 -0
  328. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/vendor/__init__.py +0 -0
  329. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/vendor/autoencoder_kl_minimax_h3.py +0 -0
  330. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/vendor/autoencoder_kl_minimax_h3_audio.py +0 -0
  331. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/vendor/before_denoise.py +0 -0
  332. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/vendor/before_encoder.py +0 -0
  333. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/vendor/decoders.py +0 -0
  334. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/vendor/denoise.py +0 -0
  335. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/vendor/encoders.py +0 -0
  336. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/vendor/modular_blocks_minimax_h3.py +0 -0
  337. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/vendor/modular_pipeline.py +0 -0
  338. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/vendor/packing.py +0 -0
  339. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/vendor/packing_ref2va.py +0 -0
  340. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/vendor/scheduling_minimax_h3.py +0 -0
  341. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/minimaxh3/vendor/transformer_minimax_h3.py +0 -0
  342. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/offload.py +0 -0
  343. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/prepared.py +0 -0
  344. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/preprocess/__init__.py +0 -0
  345. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/preprocess/requirements.py +0 -0
  346. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/preprocess/runner.py +0 -0
  347. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/references.py +0 -0
  348. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/requirements.py +0 -0
  349. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/sampling.py +0 -0
  350. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/video_params.py +0 -0
  351. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/zimage/__init__.py +0 -0
  352. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/zimage/primitives.py +0 -0
  353. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/zimage/provider.py +0 -0
  354. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/zimage/requirements.py +0 -0
  355. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/models/zimage/runner.py +0 -0
  356. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/parallel/__init__.py +0 -0
  357. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/parallel/config.py +0 -0
  358. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/parallel/group.py +0 -0
  359. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/parallel/launch.py +0 -0
  360. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/parallel/protocol.py +0 -0
  361. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/parallel/registry.py +0 -0
  362. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/parallel/worker.py +0 -0
  363. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/runtime/__init__.py +0 -0
  364. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/runtime/context.py +0 -0
  365. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/runtime/file_store.py +0 -0
  366. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/runtime/progress.py +0 -0
  367. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/runtime/run.py +0 -0
  368. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/runtime/store.py +0 -0
  369. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/runtime/video_encode.py +0 -0
  370. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/sampling/__init__.py +0 -0
  371. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/sampling/batch.py +0 -0
  372. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/server/__init__.py +0 -0
  373. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/server/__main__.py +0 -0
  374. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/server/app.py +0 -0
  375. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/server/assets.py +0 -0
  376. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/server/bootstrap.py +0 -0
  377. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/server/frontend.py +0 -0
  378. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/server/manager.py +0 -0
  379. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/server/rpc.py +0 -0
  380. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/server/run_store.py +0 -0
  381. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/server/serialize.py +0 -0
  382. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/__init__.py +0 -0
  383. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/activity.py +0 -0
  384. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/assets.py +0 -0
  385. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/config.py +0 -0
  386. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/dataset_import.py +0 -0
  387. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/fal.py +0 -0
  388. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/frames.py +0 -0
  389. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/generation.py +0 -0
  390. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/handlers.py +0 -0
  391. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/image_meta.py +0 -0
  392. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/models.py +0 -0
  393. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/moodboard.py +0 -0
  394. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/peaks.py +0 -0
  395. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/recipe.py +0 -0
  396. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/schema.py +0 -0
  397. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/store.py +0 -0
  398. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/system_stats.py +0 -0
  399. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/timeline/__init__.py +0 -0
  400. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/timeline/compose.py +0 -0
  401. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/timeline/ffmpeg.py +0 -0
  402. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/timeline/render.py +0 -0
  403. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/timeline/resolve.py +0 -0
  404. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/training.py +0 -0
  405. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/studio/training_store.py +0 -0
  406. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/takes.py +0 -0
  407. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/training/__init__.py +0 -0
  408. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/training/__main__.py +0 -0
  409. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/training/arch.py +0 -0
  410. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/training/cache.py +0 -0
  411. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/training/caption.py +0 -0
  412. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/training/dataset.py +0 -0
  413. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/training/h3.py +0 -0
  414. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/training/ltx25.py +0 -0
  415. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/training/models.py +0 -0
  416. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/training/precache_store.py +0 -0
  417. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/training/protocol.py +0 -0
  418. {inline_core-1.2.69 → inline_core-1.2.70}/src/inline_core/training/trainer.py +0 -0
  419. {inline_core-1.2.69 → inline_core-1.2.70}/tests/conftest.py +0 -0
  420. {inline_core-1.2.69 → inline_core-1.2.70}/tests/helpers.py +0 -0
  421. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_cache.py +0 -0
  422. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_catalog.py +0 -0
  423. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_checkpoint.py +0 -0
  424. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_clip_grid_parity.py +0 -0
  425. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_config.py +0 -0
  426. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_dataset_import.py +0 -0
  427. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_device_detect.py +0 -0
  428. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_encoder_parking.py +0 -0
  429. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_executor.py +0 -0
  430. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_extension_api.py +0 -0
  431. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_extension_install.py +0 -0
  432. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_extension_manifest.py +0 -0
  433. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_extension_resolve.py +0 -0
  434. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_extension_scanner.py +0 -0
  435. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_extension_spine.py +0 -0
  436. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_extension_state.py +0 -0
  437. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_file_store.py +0 -0
  438. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_flux2_controlnet.py +0 -0
  439. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_flux2_folder.py +0 -0
  440. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_flux2_resolve.py +0 -0
  441. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_flux2_runner.py +0 -0
  442. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_flux2_training.py +0 -0
  443. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_flux2_variants.py +0 -0
  444. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_frontend_serving.py +0 -0
  445. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_hidden_nodes.py +0 -0
  446. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_keymap.py +0 -0
  447. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_krea2_convert.py +0 -0
  448. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_krea2_depth_control.py +0 -0
  449. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_krea2_requirements.py +0 -0
  450. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_krea2_runner.py +0 -0
  451. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_loader_runners.py +0 -0
  452. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_loaders.py +0 -0
  453. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_lora.py +0 -0
  454. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_lora_download.py +0 -0
  455. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_ltx25_lora_keys.py +0 -0
  456. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_ltx25_nodes.py +0 -0
  457. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_ltx25_requirements.py +0 -0
  458. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_ltx25_training.py +0 -0
  459. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_manager_queue.py +0 -0
  460. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_memory_policy.py +0 -0
  461. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_minimaxh3_adaln.py +0 -0
  462. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_minimaxh3_keys.py +0 -0
  463. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_minimaxh3_load.py +0 -0
  464. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_minimaxh3_lora_keys.py +0 -0
  465. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_minimaxh3_nodes.py +0 -0
  466. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_minimaxh3_training.py +0 -0
  467. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_model_requirements.py +0 -0
  468. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_offload_prepared.py +0 -0
  469. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_output_kind_contract.py +0 -0
  470. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_parallel_group.py +0 -0
  471. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_pipeline_cache.py +0 -0
  472. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_precache_store.py +0 -0
  473. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_primitives.py +0 -0
  474. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_recipe.py +0 -0
  475. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_references.py +0 -0
  476. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_rpc_bridge.py +0 -0
  477. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_run_store.py +0 -0
  478. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_sampling.py +0 -0
  479. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_schema.py +0 -0
  480. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_server.py +0 -0
  481. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_staged_residency.py +0 -0
  482. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_studio_activity.py +0 -0
  483. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_studio_assets.py +0 -0
  484. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_studio_fal.py +0 -0
  485. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_studio_frames.py +0 -0
  486. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_studio_generation.py +0 -0
  487. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_studio_models.py +0 -0
  488. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_studio_moodboard.py +0 -0
  489. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_studio_multi_reference.py +0 -0
  490. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_studio_node_size.py +0 -0
  491. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_studio_peaks.py +0 -0
  492. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_studio_rpc.py +0 -0
  493. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_studio_schema.py +0 -0
  494. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_studio_store.py +0 -0
  495. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_studio_timeline.py +0 -0
  496. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_studio_training.py +0 -0
  497. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_take_bytes.py +0 -0
  498. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_topo.py +0 -0
  499. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_training_arch.py +0 -0
  500. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_training_dataset.py +0 -0
  501. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_training_models.py +0 -0
  502. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_training_resolve.py +0 -0
  503. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_training_snapshots.py +0 -0
  504. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_validate.py +0 -0
  505. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_video_encode.py +0 -0
  506. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_video_params.py +0 -0
  507. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_webui_install.py +0 -0
  508. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_xfuser_sampler.py +0 -0
  509. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_zimage_primitives.py +0 -0
  510. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_zimage_resolve.py +0 -0
  511. {inline_core-1.2.69 → inline_core-1.2.70}/tests/test_zimage_runner.py +0 -0
  512. {inline_core-1.2.69 → inline_core-1.2.70}/uv.lock +0 -0
  513. {inline_core-1.2.69 → inline_core-1.2.70}/webui.bat +0 -0
  514. {inline_core-1.2.69 → inline_core-1.2.70}/webui.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: inline-core
3
- Version: 1.2.69
3
+ Version: 1.2.70
4
4
  Summary: The generation engine behind Inline Studio.
5
5
  License-Expression: GPL-3.0-or-later
6
6
  Requires-Python: >=3.11
@@ -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.69"
4
+ version = "1.2.70"
5
5
  description = "The generation engine behind Inline Studio."
6
6
  readme = "README.md"
7
7
  license = "GPL-3.0-or-later"
@@ -10,7 +10,15 @@ from ..errors import UnknownNodeType
10
10
  from .descriptor import NodeDescriptor
11
11
  from .loader_runners import register_loaders
12
12
  from .primitives import register_primitives
13
- from .runners import IMAGE_INPUT, TEXT_INPUT, ImageInputRunner, NodeRunner, TextInputRunner
13
+ from .runners import (
14
+ IMAGE_INPUT,
15
+ TEXT_INPUT,
16
+ VIDEO_INPUT,
17
+ ImageInputRunner,
18
+ NodeRunner,
19
+ TextInputRunner,
20
+ VideoInputRunner,
21
+ )
14
22
 
15
23
 
16
24
  class Registry:
@@ -83,6 +91,7 @@ def build_default_registry() -> Registry:
83
91
  registry = Registry()
84
92
  registry.register(replace(TEXT_INPUT, hidden=True), TextInputRunner())
85
93
  registry.register(replace(IMAGE_INPUT, hidden=True), ImageInputRunner())
94
+ registry.register(replace(VIDEO_INPUT, hidden=True), VideoInputRunner())
86
95
  register_primitives(registry)
87
96
  register_loaders(registry)
88
97
  return registry
@@ -44,6 +44,13 @@ class ImageInputRunner(NodeRunner):
44
44
  return NodeResult(outputs={"image": _asset_ref(node.params.get("asset"))})
45
45
 
46
46
 
47
+ class VideoInputRunner(NodeRunner):
48
+ produces_takes = False
49
+
50
+ def run(self, node: Node, inputs: dict[str, list[Any]], ctx: ExecutionContext) -> NodeResult:
51
+ return NodeResult(outputs={"video": _asset_ref(node.params.get("asset"))})
52
+
53
+
47
54
  def _asset_ref(raw: Any) -> AssetRef:
48
55
  if isinstance(raw, dict):
49
56
  ref = raw.get("ref")
@@ -70,3 +77,14 @@ IMAGE_INPUT = NodeDescriptor(
70
77
  outputs=(Port("image", "Image", PortKind.IMAGE),),
71
78
  icon="image",
72
79
  )
80
+
81
+ #: The same frozen asset, typed as a clip. Needed because a wired video used to arrive as
82
+ #: `input/image` whatever it actually held, so a video port refused it at validation: the reader saw
83
+ #: "Cannot wire image into video" about a file that was already a video.
84
+ VIDEO_INPUT = NodeDescriptor(
85
+ type="input/video",
86
+ title="Video",
87
+ category="Input",
88
+ outputs=(Port("video", "Video", PortKind.VIDEO),),
89
+ icon="film",
90
+ )
@@ -69,8 +69,11 @@ def _require(path: Path | None, what: str) -> Path:
69
69
 
70
70
 
71
71
  def _wired(ref: Any) -> Path | None:
72
- """A path handed in over a wired model port, if one was."""
73
- value = getattr(ref, "path", None) if ref is not None else None
72
+ """The file a wired ``load/*`` node already resolved, if one is wired.
73
+
74
+ Its refs carry ``file``. Reading ``path`` matched nothing, so every wired model, VAE and text
75
+ encoder was silently ignored and the node fell back to the dropdown."""
76
+ value = getattr(ref, "file", None) if ref is not None else None
74
77
  return Path(str(value)) if value else None
75
78
 
76
79
 
@@ -168,7 +171,11 @@ def load_pipeline(
168
171
  plan = _plan(policy, paths, request.build)
169
172
 
170
173
  key = rt.PipelineKey(
171
- arch="ltx-2-5",
174
+ # A reference render builds a different pipeline class with its own weight registry, so it
175
+ # cannot share a cached distilled one. That has to go in `arch` rather than `variant`:
176
+ # `evict_stale` keeps entries whose only difference is the variant, so putting it there left
177
+ # the old pipeline resident while the new one loaded on top and the card ran out at 44 GiB.
178
+ arch="ltx-2-5-ic" if request.reference else "ltx-2-5",
172
179
  diffusion=str(paths["transformer"]),
173
180
  vae=str(paths["video_vae"]),
174
181
  text_encoder=str(paths["text_encoder"]),
@@ -203,7 +210,14 @@ def load_pipeline(
203
210
  "quantization": memory.quantization_policy(plan, str(paths["transformer"])),
204
211
  "offload_mode": memory.offload_mode(plan),
205
212
  }
206
- if request.mode == "quality":
213
+ if request.reference:
214
+ # A Control LoRA conditions on a reference clip, which the distilled pipeline cannot take.
215
+ # Upstream ships a separate one for it, built from the same arguments, that appends the
216
+ # reference as clean tokens the way the adapter was trained.
217
+ from .vendor.ltx_pipelines.ic_lora import ICLoraPipeline
218
+
219
+ pipe = ICLoraPipeline(**common)
220
+ elif request.mode == "quality":
207
221
  pipe = _quality_pipeline(common)
208
222
  else:
209
223
  from .vendor.ltx_pipelines.distilled import DistilledPipeline
@@ -265,12 +279,17 @@ def _quality_pipeline(common: dict[str, Any]) -> Any:
265
279
 
266
280
  def _lora(ref: Any) -> Any:
267
281
  """One of our `LoraRef`s as the vendored path, strength and key-rename triple."""
282
+ # The loader node hands over a path it already resolved under the models root, not a bare name.
283
+ # Re-resolving it as a name only looked right while that root was absolute, because an absolute
284
+ # right-hand side wins a join; under the default relative `./models` the prefix doubled.
285
+ # Checked before the vendored import so a missing file is reported without loading torch.
286
+ path = _wired(ref)
287
+ if path is None or not path.is_file():
288
+ raise ComponentError(f"{_LABEL} could not find the LoRA {getattr(ref, 'file', '')!r}.")
289
+
268
290
  from .vendor.ltx_core.loader import LoraPathStrengthAndSDOps
269
291
  from .vendor.ltx_core.loader.sd_ops import LTXV_LORA_COMFY_RENAMING_MAP
270
292
 
271
- path = reqs.resolve("loras", str(getattr(ref, "file", "")))
272
- if path is None:
273
- raise ComponentError(f"{_LABEL} could not find the LoRA {getattr(ref, 'file', '')!r}.")
274
293
  # The rename map is not optional: published LTX adapters (and the ones the Trainer exports) key
275
294
  # on `diffusion_model.`, which this strips to reach the module names. Every upstream caller
276
295
  # passes it, including for the distilled LoRA.
@@ -319,7 +338,10 @@ def render(
319
338
  # The third element is the **frame count**, not a sample rate. The rate lives on the Audio
320
339
  # container as ``sampling_rate``, and taking the positional one wrote a WAV headed 49 Hz -
321
340
  # the video's frame count - which plays back forty minutes long and raises nothing.
322
- frames_iter, audio, _num_frames, _tiling = pipe(**call)
341
+ # The IC-LoRA pipeline returns three values where the others return four: it takes an
342
+ # explicit `num_frames` and so has none to report back.
343
+ result = pipe(**call)
344
+ frames_iter, audio = result[0], result[1]
323
345
  for chunk in frames_iter:
324
346
  if cancel_check is not None:
325
347
  cancel_check()
@@ -132,6 +132,11 @@ def _inputs(variant: Variant) -> tuple[Port, ...]:
132
132
  ports.append(Port("image", "First frame", PortKind.IMAGE, required=False))
133
133
  if variant.last_frame:
134
134
  ports.append(Port("last_image", "Last frame", PortKind.IMAGE, required=False))
135
+ # An IC-LoRA (Control LoRA) learns a transform from a reference clip, so it needs one at
136
+ # generation time too. Present on every variant: the reference is orthogonal to keyframes.
137
+ ports.append(
138
+ Port("reference", "Reference clip (Control LoRA)", PortKind.VIDEO, required=False)
139
+ )
135
140
  return tuple(ports)
136
141
 
137
142
 
@@ -183,6 +188,9 @@ class Request:
183
188
  generate_audio: bool
184
189
  enhance_prompt: bool
185
190
  conditionings: tuple[Conditioning, ...] = ()
191
+ #: A reference clip for a Control LoRA, as a local path. Upstream reads the file itself rather
192
+ #: than taking pixels, so this stays a path all the way down.
193
+ reference: str | None = None
186
194
 
187
195
  @property
188
196
  def seconds(self) -> float:
@@ -223,6 +231,7 @@ def build_request(
223
231
  if variant.first_frame and not conditionings:
224
232
  raise ComponentError(f"{variant.title} needs an image wired to its First frame input.")
225
233
 
234
+ reference = rt.first(inputs.get("reference"))
226
235
  return Request(
227
236
  prompt=prompt,
228
237
  num_frames=frames,
@@ -238,6 +247,7 @@ def build_request(
238
247
  mode=mode,
239
248
  generate_audio=bool(params.get("generate_audio", True)),
240
249
  enhance_prompt=bool(params.get("enhance_prompt", False)),
250
+ reference=rt.media_path(reference, "Reference clip") if reference else None,
241
251
  conditionings=tuple(conditionings),
242
252
  )
243
253
 
@@ -268,7 +278,7 @@ def call_kwargs(request: Request, scratch: Path, label: str = _LABEL) -> dict[st
268
278
  """
269
279
  from .vendor.ltx_pipelines.utils.args import ImageConditioningInput
270
280
 
271
- return {
281
+ args: dict[str, Any] = {
272
282
  "prompt": request.prompt,
273
283
  "seed": request.seed,
274
284
  "height": request.height,
@@ -285,6 +295,12 @@ def call_kwargs(request: Request, scratch: Path, label: str = _LABEL) -> dict[st
285
295
  for c in request.conditionings
286
296
  ],
287
297
  }
298
+ if request.reference:
299
+ # Only the IC-LoRA pipeline takes this, and it is the pipeline `load_pipeline` picks when a
300
+ # reference is wired. Strength 1.0 keeps the reference tokens clean, which is how the
301
+ # adapter saw them in training.
302
+ args["video_conditioning"] = [(request.reference, 1.0)]
303
+ return args
288
304
 
289
305
 
290
306
  # --- the runner ----------------------------------------------------------------------------------
@@ -624,6 +624,20 @@ def load_image(ref: Any, label: str) -> Any:
624
624
  raise ComponentError(f"{label} needs a readable image input.")
625
625
 
626
626
 
627
+ def media_path(ref: Any, label: str) -> str:
628
+ """A wired clip as a local path, for a pipeline that opens the file itself.
629
+
630
+ Deliberately not `load_image`'s shape: upstream's IC-LoRA conditioning takes `(path, strength)`
631
+ and does its own decode and resize, so handing it decoded pixels would mean decoding twice and
632
+ guessing at the resize it wants.
633
+ """
634
+ if isinstance(ref, AssetRef) and ref.ref == "path" and ref.path:
635
+ return str(ref.path)
636
+ if isinstance(ref, Take) and ref.uri:
637
+ return ref.uri.removeprefix("file://")
638
+ raise ComponentError(f"{label} needs a readable video input.")
639
+
640
+
627
641
  def first(values: list[Any] | None) -> Any:
628
642
  return values[0] if values else None
629
643
 
@@ -23,16 +23,36 @@ from . import frames as fr
23
23
  from . import moodboard as mb
24
24
 
25
25
 
26
- def _source_output_port(source: dict[str, Any] | None, source_handle: str | None) -> str:
26
+ def _source_output_port(
27
+ source: dict[str, Any] | None,
28
+ source_handle: str | None,
29
+ source_path: Callable[[dict[str, Any]], str | None] | None = None,
30
+ ) -> str:
27
31
  if source and source["type"] == "prompt":
28
32
  return "text"
29
- # An asset, a rendered frame, a Load Assets loader, or a Control Space render all become an
30
- # ``input/image`` source node.
33
+ # An asset, a rendered frame, a Load Assets loader, or a Control Space render all become a
34
+ # frozen source node, image or video according to what the file actually is. The port id has to
35
+ # match the node `_item_to_node` emits, or the edge names an output that does not exist.
31
36
  if source and source["type"] in ("asset", "frame", "loader", "controlSpace"):
32
- return "image"
37
+ path = source_path(source) if source_path else None
38
+ return "video" if path and _source_type(path) == "input/video" else "image"
33
39
  return source_handle or "out" # a 'core' item's handles already are Core port ids
34
40
 
35
41
 
42
+ #: Suffixes the video source node claims. Everything else stays an image, which is what the image
43
+ #: ports and the list ports expect.
44
+ _VIDEO_SUFFIXES = (".mp4", ".mov", ".webm", ".mkv", ".avi")
45
+
46
+
47
+ def _source_type(path: str) -> str:
48
+ """`input/video` for a clip, `input/image` otherwise.
49
+
50
+ Every asset used to arrive as `input/image` whatever it held, so wiring a clip into a video port
51
+ failed validation with "Cannot wire image into video" about a file that was already a video.
52
+ """
53
+ return "input/video" if Path(path).suffix.lower() in _VIDEO_SUFFIXES else "input/image"
54
+
55
+
36
56
  def _loader_assets(item: dict[str, Any] | None) -> list[str]:
37
57
  """The asset ids a Load Assets node holds, in the order the user arranged them."""
38
58
  if item is None or item.get("type") != "loader":
@@ -51,6 +71,7 @@ def _edges_for(
51
71
  by_id: dict[str, dict[str, Any]],
52
72
  is_list_port: Callable[[str, str], bool],
53
73
  fanned_out: dict[str, int],
74
+ source_path: Callable[[dict[str, Any]], str | None] | None = None,
54
75
  ) -> dict[str, list[dict[str, str]]]:
55
76
  """This node's input edges, keyed by target port.
56
77
 
@@ -73,7 +94,7 @@ def _edges_for(
73
94
  handle = data.get("targetHandle") or "in"
74
95
  source_id = c["fromItemId"]
75
96
  source = by_id.get(source_id)
76
- output = _source_output_port(source, data.get("sourceHandle"))
97
+ output = _source_output_port(source, data.get("sourceHandle"), source_path)
77
98
  listed = bool(target_type) and is_list_port(target_type, handle)
78
99
 
79
100
  assets = _loader_assets(source) if listed else []
@@ -119,7 +140,7 @@ def _item_to_node(
119
140
  return None
120
141
  return {
121
142
  "id": item["id"],
122
- "type": "input/image",
143
+ "type": _source_type(path),
123
144
  "params": {"asset": {"ref": "path", "path": path}},
124
145
  }
125
146
  # A Load Assets loader feeds its hero (first) asset as a frozen image source. Wired into a list
@@ -133,7 +154,7 @@ def _item_to_node(
133
154
  return None
134
155
  return {
135
156
  "id": item["id"],
136
- "type": "input/image",
157
+ "type": _source_type(path),
137
158
  "params": {"asset": {"ref": "path", "path": path}},
138
159
  }
139
160
  # A Control Space node feeds its rendered OpenPose control map (a library asset) as a frozen
@@ -145,7 +166,7 @@ def _item_to_node(
145
166
  return None
146
167
  return {
147
168
  "id": item["id"],
148
- "type": "input/image",
169
+ "type": _source_type(path),
149
170
  "params": {"asset": {"ref": "path", "path": path}},
150
171
  }
151
172
  # A rendered frame wired into a Core node feeds its output image as a frozen source (its hero
@@ -156,7 +177,7 @@ def _item_to_node(
156
177
  return None
157
178
  return {
158
179
  "id": item["id"],
159
- "type": "input/image",
180
+ "type": _source_type(path),
160
181
  "params": {"asset": {"ref": "path", "path": path}},
161
182
  }
162
183
  return None
@@ -272,13 +293,27 @@ def build_workflow_graph(
272
293
  out = fr.resolve_frame_file(conn, frame_id)
273
294
  return str(folder / out["filePath"]) if out else None
274
295
 
296
+ def source_path(source: dict[str, Any]) -> str | None:
297
+ """The file behind a source item, so its node and its edge type themselves the same way."""
298
+ data = source.get("data") or {}
299
+ if source["type"] == "asset" and source.get("assetId"):
300
+ return resolve_asset_path(source["assetId"])
301
+ if source["type"] == "frame" and source.get("frameId"):
302
+ return resolve_frame_path(source["frameId"])
303
+ if source["type"] == "loader":
304
+ ids = data.get("assetIds") or []
305
+ return resolve_asset_path(ids[0]) if ids else None
306
+ if source["type"] == "controlSpace" and data.get("controlAssetId"):
307
+ return resolve_asset_path(data["controlAssetId"])
308
+ return None
309
+
275
310
  listed = is_list_port or (lambda _type, _port: False)
276
311
  closure = sorted(_upstream_closure(target_item_id, connectors))
277
312
  # Two passes: the edges decide which loaders fan out, so they must be resolved before the node
278
313
  # pass can know whether to emit one source per loader or one per asset.
279
314
  fanned_out: dict[str, int] = {}
280
315
  edges_by_node = {
281
- node_id: _edges_for(node_id, connectors, by_id, listed, fanned_out)
316
+ node_id: _edges_for(node_id, connectors, by_id, listed, fanned_out, source_path)
282
317
  for node_id in closure
283
318
  if (by_id.get(node_id) or {}).get("type") == "core"
284
319
  }
@@ -296,10 +331,25 @@ def build_workflow_graph(
296
331
  node["inputs"] = edges_by_node[node_id]
297
332
  nodes.append(node)
298
333
  nodes.extend(_fanned_out_sources(item, fanned_out, resolve_asset_path))
334
+ _prune_dangling_edges(nodes)
299
335
  _apply_facing_hints(nodes, by_id)
300
336
  return {"schemaVersion": 1, "nodes": nodes}, target_item_id
301
337
 
302
338
 
339
+ def _prune_dangling_edges(nodes: list[dict[str, Any]]) -> None:
340
+ """Drop edges naming a source that produced no node - an asset that does not resolve in this
341
+ project (a board imported from another one, a deleted file). Those sources are skipped rather
342
+ than failing the run, so the edges have to go with them: left in, validation reports a bare
343
+ canvas id, where dropping them reports the port that is now unwired."""
344
+ ids = {n["id"] for n in nodes}
345
+ for node in nodes:
346
+ inputs: dict[str, list[dict[str, str]]] = node.get("inputs") or {}
347
+ if not inputs:
348
+ continue
349
+ kept = {port: [e for e in edges if e["from"] in ids] for port, edges in inputs.items()}
350
+ node["inputs"] = {port: edges for port, edges in kept.items() if edges}
351
+
352
+
303
353
  def _fanned_out_sources(
304
354
  item: dict[str, Any],
305
355
  fanned_out: dict[str, int],
@@ -0,0 +1,55 @@
1
+ """What a wired ``load/*`` node hands the LTX node, and how the node reads it back.
2
+
3
+ Both of these shipped broken past a green suite, and neither raised where it went wrong: the LoRA
4
+ one only failed once the models root was relative, and the component one failed silently.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from pathlib import Path
10
+
11
+ import pytest
12
+
13
+ from inline_core.errors import ComponentError
14
+ from inline_core.graph.loader_runners import ComponentRef, LoraRef
15
+ from inline_core.models.ltx25 import pipeline
16
+
17
+
18
+ def test_a_wired_component_is_read_off_the_field_the_loader_actually_sets(tmp_path: Path) -> None:
19
+ """`ComponentRef` carries `file`. Reading `path` matched nothing, so a wired transformer, VAE
20
+ or text encoder was silently dropped and the run used the dropdown instead."""
21
+ weights = tmp_path / "custom-transformer.safetensors"
22
+ weights.write_bytes(b"")
23
+ ref = ComponentRef(kind="diffusion", arch="ltx-2-5", file=str(weights))
24
+
25
+ assert pipeline._wired(ref) == weights
26
+
27
+
28
+ def test_an_unwired_port_resolves_to_nothing() -> None:
29
+ assert pipeline._wired(None) is None
30
+
31
+
32
+ def test_a_lora_is_taken_at_the_path_the_loader_resolved(tmp_path: Path, monkeypatch) -> None:
33
+ """The models root is relative by default (`./models`), which is what exposed this: the ref's
34
+ path was re-joined under `models/loras/`, so `models/loras/x.safetensors` was looked for at
35
+ `models/loras/models/loras/x.safetensors`. An absolute root had hidden it, because an absolute
36
+ right-hand side wins a join."""
37
+ pytest.importorskip("torch")
38
+ monkeypatch.chdir(tmp_path)
39
+ loras = tmp_path / "models" / "loras"
40
+ loras.mkdir(parents=True)
41
+ adapter = loras / "motion-8afbbc83.safetensors"
42
+ adapter.write_bytes(b"")
43
+ monkeypatch.setenv("INLINE_MODELS_DIR", "models")
44
+
45
+ # Exactly what LoadLoraRunner emits under a relative root.
46
+ emitted = LoraRef(file="models/loras/motion-8afbbc83.safetensors", strength=0.8)
47
+ resolved = pipeline._lora(emitted)
48
+
49
+ assert Path(resolved.path) == Path("models/loras/motion-8afbbc83.safetensors")
50
+ assert resolved.strength == pytest.approx(0.8)
51
+
52
+
53
+ def test_a_lora_that_is_not_there_names_itself_in_the_error() -> None:
54
+ with pytest.raises(ComponentError, match="ghost.safetensors"):
55
+ pipeline._lora(LoraRef(file="models/loras/ghost.safetensors", strength=1.0))
@@ -109,3 +109,53 @@ def test_an_unresolvable_control_map_adds_nothing(conn) -> None:
109
109
  nodes = _nodes(conn, gen_id)
110
110
  assert nodes[gen_id]["inputs"]["prompt"][0]["from"] == prompt_id
111
111
  assert not nodes[gen_id]["params"].get("negative_prompt")
112
+
113
+
114
+ def test_an_asset_this_project_does_not_have_takes_its_edge_with_it(conn) -> None:
115
+ """A board exported from one project and imported into another carries asset ids the new project
116
+ has never seen. The source node is skipped, and the edge naming it has to go too - left in, the
117
+ run failed validation with a bare canvas id ("No node with id '6e29da67...'")."""
118
+ loader = mb.add_loader(conn, 0, 0)
119
+ mb.update_item(conn, loader["id"], {"data": {"assetIds": ["from-another-project"]}})
120
+ gen = mb.add_core_node(conn, "alibaba/z-image-turbo", 0, 0)
121
+ mb.create_connector(conn, loader["id"], gen["id"], "image", "image")
122
+
123
+ nodes = _nodes(conn, gen["id"])
124
+ assert loader["id"] not in nodes
125
+ assert "image" not in nodes[gen["id"]]["inputs"]
126
+
127
+
128
+ def test_one_unresolvable_asset_does_not_dangle_the_rest_of_a_fanned_out_loader(conn) -> None:
129
+ """A Load Assets node on a list port emits one source per asset and skips the ones that do not
130
+ resolve, so the numbered edges have to be pruned to match or the run dies on the gap."""
131
+ loader = mb.add_loader(conn, 0, 0)
132
+ mb.update_item(conn, loader["id"], {"data": {"assetIds": ["a1", "gone", "a1"]}})
133
+ gen = mb.add_core_node(conn, "black-forest-labs/flux-2", 0, 0)
134
+ mb.create_connector(conn, loader["id"], gen["id"], "image", "images")
135
+
136
+ graph, _ = build_workflow_graph(
137
+ conn, Path("/tmp"), gen["id"], lambda _type, port: port == "images"
138
+ )
139
+ nodes = {n["id"]: n for n in graph["nodes"]}
140
+ edges = nodes[gen["id"]]["inputs"]["images"]
141
+ assert [e["from"] for e in edges] == [n["id"] for n in graph["nodes"] if "::ref" in n["id"]]
142
+
143
+
144
+ def test_a_wired_clip_becomes_a_video_source_not_an_image_one(conn) -> None:
145
+ """Every asset became `input/image` whatever it held, so wiring a clip into a video port failed
146
+ validation with "Cannot wire image into video" about a file that was already a video.
147
+
148
+ The node's type and its edge's output port are asserted together. They are one contract: typing
149
+ the node alone would leave the edge naming a port the node does not have.
150
+ """
151
+ conn.execute(
152
+ "INSERT INTO assets (id, project_id, name, file_path, kind, created_at) "
153
+ "VALUES ('v1', 'p', 'ref', 'assets/ref.mp4', 'video', 0)"
154
+ )
155
+ clip = mb.add_asset(conn, "v1", 0, 0)
156
+ gen = mb.add_core_node(conn, "lightricks/ltx-2-5-text-to-video", 0, 0)
157
+ mb.create_connector(conn, clip["id"], gen["id"], "image", "reference")
158
+
159
+ nodes = _nodes(conn, gen["id"])
160
+ assert nodes[clip["id"]]["type"] == "input/video"
161
+ assert nodes[gen["id"]]["inputs"]["reference"][0]["output"] == "video"
File without changes
File without changes
File without changes
File without changes