inline-core 1.3.0__tar.gz → 1.3.1__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 (545) hide show
  1. {inline_core-1.3.0 → inline_core-1.3.1}/PKG-INFO +1 -1
  2. {inline_core-1.3.0 → inline_core-1.3.1}/pyproject.toml +1 -1
  3. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/__main__.py +5 -1
  4. inline_core-1.3.1/src/inline_core/server/version.py +205 -0
  5. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/dataset_import.py +64 -19
  6. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/training.py +14 -13
  7. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/dataset.py +2 -1
  8. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_dataset_import.py +43 -1
  9. inline_core-1.3.1/tests/test_version_report.py +79 -0
  10. {inline_core-1.3.0 → inline_core-1.3.1}/webui.bat +11 -2
  11. {inline_core-1.3.0 → inline_core-1.3.1}/webui.sh +12 -4
  12. {inline_core-1.3.0 → inline_core-1.3.1}/.gitignore +0 -0
  13. {inline_core-1.3.0 → inline_core-1.3.1}/.python-version +0 -0
  14. {inline_core-1.3.0 → inline_core-1.3.1}/CLAUDE.md +0 -0
  15. {inline_core-1.3.0 → inline_core-1.3.1}/README.md +0 -0
  16. {inline_core-1.3.0 → inline_core-1.3.1}/main.py +0 -0
  17. {inline_core-1.3.0 → inline_core-1.3.1}/scripts/flux2_train_matrix.py +0 -0
  18. {inline_core-1.3.0 → inline_core-1.3.1}/scripts/minimax_h3_lora_check.py +0 -0
  19. {inline_core-1.3.0 → inline_core-1.3.1}/scripts/minimax_h3_train_matrix.py +0 -0
  20. {inline_core-1.3.0 → inline_core-1.3.1}/scripts/reference.py +0 -0
  21. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/__init__.py +0 -0
  22. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/characters/__init__.py +0 -0
  23. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/characters/apply.py +0 -0
  24. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/characters/charfile.py +0 -0
  25. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/characters/encode.py +0 -0
  26. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/characters/library.py +0 -0
  27. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/characters/scoring.py +0 -0
  28. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/characters/weights.py +0 -0
  29. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/components/__init__.py +0 -0
  30. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/components/conditioning.py +0 -0
  31. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/components/interfaces.py +0 -0
  32. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/config.py +0 -0
  33. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/device/__init__.py +0 -0
  34. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/device/auto.py +0 -0
  35. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/device/detect.py +0 -0
  36. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/device/memory.py +0 -0
  37. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/device/policy.py +0 -0
  38. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/device/probe.py +0 -0
  39. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/device/types.py +0 -0
  40. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/errors.py +0 -0
  41. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/__init__.py +0 -0
  42. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/api.py +0 -0
  43. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/constraints.py +0 -0
  44. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/fetch.py +0 -0
  45. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/handlers.py +0 -0
  46. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/importer.py +0 -0
  47. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/install.py +0 -0
  48. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/loader.py +0 -0
  49. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/manifest.py +0 -0
  50. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/models.py +0 -0
  51. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/paths.py +0 -0
  52. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/resolve.py +0 -0
  53. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/scanner.py +0 -0
  54. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/state.py +0 -0
  55. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/tools.py +0 -0
  56. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/ffmpeg.py +0 -0
  57. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/__init__.py +0 -0
  58. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/cache.py +0 -0
  59. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/descriptor.py +0 -0
  60. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/executor.py +0 -0
  61. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/loader_runners.py +0 -0
  62. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/primitives.py +0 -0
  63. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/registry.py +0 -0
  64. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/runners.py +0 -0
  65. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/schema.py +0 -0
  66. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/topo.py +0 -0
  67. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/validate.py +0 -0
  68. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/media.py +0 -0
  69. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/__init__.py +0 -0
  70. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/catalog.py +0 -0
  71. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/character/__init__.py +0 -0
  72. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/character/runner.py +0 -0
  73. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/characterreqs.py +0 -0
  74. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/checkpoint.py +0 -0
  75. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/controlspace.py +0 -0
  76. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/flux2/__init__.py +0 -0
  77. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/flux2/controlnet.py +0 -0
  78. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/flux2/embeds.py +0 -0
  79. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/flux2/provider.py +0 -0
  80. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/flux2/requirements.py +0 -0
  81. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/flux2/runner.py +0 -0
  82. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/flux2/variants.py +0 -0
  83. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/keymap.py +0 -0
  84. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/krea2/__init__.py +0 -0
  85. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/krea2/convert.py +0 -0
  86. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/krea2/depth_control.py +0 -0
  87. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/krea2/img2img.py +0 -0
  88. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/krea2/provider.py +0 -0
  89. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/krea2/requirements.py +0 -0
  90. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/krea2/runner.py +0 -0
  91. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/loaders.py +0 -0
  92. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/lora.py +0 -0
  93. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/__init__.py +0 -0
  94. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/lora_keys.py +0 -0
  95. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/memory.py +0 -0
  96. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/pipeline.py +0 -0
  97. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/provider.py +0 -0
  98. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/requirements.py +0 -0
  99. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/runner.py +0 -0
  100. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/__init__.py +0 -0
  101. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/__init__.py +0 -0
  102. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/allocator_trim_strategy.py +0 -0
  103. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/batch_split.py +0 -0
  104. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/__init__.py +0 -0
  105. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/block_fetcher.py +0 -0
  106. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/builder.py +0 -0
  107. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/disk.py +0 -0
  108. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/pool.py +0 -0
  109. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/provider.py +0 -0
  110. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/source.py +0 -0
  111. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/stream_sync.py +0 -0
  112. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/utils.py +0 -0
  113. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/wrapper.py +0 -0
  114. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/color/__init__.py +0 -0
  115. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/color/audio_mux.py +0 -0
  116. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/color/hlg.py +0 -0
  117. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/color/primaries.py +0 -0
  118. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/color/yuv.py +0 -0
  119. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/components/__init__.py +0 -0
  120. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/components/diffusion_steps.py +0 -0
  121. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/components/guiders.py +0 -0
  122. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/components/noisers.py +0 -0
  123. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/components/patchifiers.py +0 -0
  124. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/components/protocols.py +0 -0
  125. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/components/schedulers.py +0 -0
  126. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/__init__.py +0 -0
  127. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/exceptions.py +0 -0
  128. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/item.py +0 -0
  129. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/mask_utils.py +0 -0
  130. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/__init__.py +0 -0
  131. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/attention_strength_wrapper.py +0 -0
  132. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/keyframe_cond.py +0 -0
  133. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/keyframe_slots.py +0 -0
  134. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/latent_cond.py +0 -0
  135. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/mask_cond.py +0 -0
  136. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/noise_mask_cond.py +0 -0
  137. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/reference_audio_cond.py +0 -0
  138. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/reference_video_cond.py +0 -0
  139. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/devices.py +0 -0
  140. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/duration_head/__init__.py +0 -0
  141. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/duration_head/duration_head.py +0 -0
  142. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/duration_head/model_configurator.py +0 -0
  143. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/guidance/__init__.py +0 -0
  144. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/guidance/perturbations.py +0 -0
  145. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/hdr.py +0 -0
  146. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/__init__.py +0 -0
  147. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/attention_ops.py +0 -0
  148. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/fuse_loras.py +0 -0
  149. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/helpers.py +0 -0
  150. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/kernels.py +0 -0
  151. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/module_ops.py +0 -0
  152. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/primitives.py +0 -0
  153. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/registry.py +0 -0
  154. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/sd_ops.py +0 -0
  155. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/sft_loader.py +0 -0
  156. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/single_gpu_model_builder.py +0 -0
  157. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/modality_tiling.py +0 -0
  158. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/__init__.py +0 -0
  159. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/__init__.py +0 -0
  160. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/attention.py +0 -0
  161. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/audio_vae.py +0 -0
  162. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/causal_conv_2d.py +0 -0
  163. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/causality_axis.py +0 -0
  164. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/downsample.py +0 -0
  165. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/model_configurator.py +0 -0
  166. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/ops.py +0 -0
  167. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/resnet.py +0 -0
  168. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/upsample.py +0 -0
  169. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/audio_vae/vocoder.py +0 -0
  170. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/common/__init__.py +0 -0
  171. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/common/normalization.py +0 -0
  172. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/disposable.py +0 -0
  173. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/model_protocol.py +0 -0
  174. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/__init__.py +0 -0
  175. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/adaln.py +0 -0
  176. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/attention.py +0 -0
  177. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/compiling.py +0 -0
  178. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/cudagraph_capture.py +0 -0
  179. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/feed_forward.py +0 -0
  180. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/gelu_approx.py +0 -0
  181. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/modality.py +0 -0
  182. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/model.py +0 -0
  183. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/model_configurator.py +0 -0
  184. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/ops.py +0 -0
  185. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/rope.py +0 -0
  186. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/text_projection.py +0 -0
  187. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/timestep_embedding.py +0 -0
  188. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/transformer.py +0 -0
  189. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/transformer_args.py +0 -0
  190. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/__init__.py +0 -0
  191. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/blur_downsample.py +0 -0
  192. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/model.py +0 -0
  193. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/model_configurator.py +0 -0
  194. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/pixel_shuffle.py +0 -0
  195. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/res_block.py +0 -0
  196. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/spatial_rational_resampler.py +0 -0
  197. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/__init__.py +0 -0
  198. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/attention.py +0 -0
  199. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/conv_video_decoder.py +0 -0
  200. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/convolution.py +0 -0
  201. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/diffusion_tiling.py +0 -0
  202. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/diffusion_video_decoder.py +0 -0
  203. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/enums.py +0 -0
  204. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/memory_efficient_decode.py +0 -0
  205. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/model_configurator.py +0 -0
  206. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/normalization.py +0 -0
  207. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/ops.py +0 -0
  208. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/resnet.py +0 -0
  209. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/sampling.py +0 -0
  210. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/__init__.py +0 -0
  211. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/apply.py +0 -0
  212. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/attention.py +0 -0
  213. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/blocks.py +0 -0
  214. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/__init__.py +0 -0
  215. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/attn.py +0 -0
  216. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/block.py +0 -0
  217. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/context.py +0 -0
  218. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/chunked/mlp.py +0 -0
  219. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/__init__.py +0 -0
  220. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/attn.py +0 -0
  221. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/block.py +0 -0
  222. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/context.py +0 -0
  223. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/combined/mlp.py +0 -0
  224. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/compiling.py +0 -0
  225. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/config.py +0 -0
  226. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/det_attn_rope.py +0 -0
  227. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/__init__.py +0 -0
  228. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/apply_dsl.py +0 -0
  229. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/attn.py +0 -0
  230. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/block.py +0 -0
  231. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/dsl_kernels/chain.py +0 -0
  232. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/fallback_na/__init__.py +0 -0
  233. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/fallback_na/eager.py +0 -0
  234. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/fallback_na/triton_na.py +0 -0
  235. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/layers.py +0 -0
  236. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/qkv.py +0 -0
  237. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/rope.py +0 -0
  238. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/rope_math.py +0 -0
  239. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/transformer/swiglu.py +0 -0
  240. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/video_vae/video_vae.py +0 -0
  241. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/__init__.py +0 -0
  242. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/__init__.py +0 -0
  243. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/accelerate_wrapper.py +0 -0
  244. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/batch_parallel_wrapper.py +0 -0
  245. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/broadcast_wrapper.py +0 -0
  246. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/loader.py +0 -0
  247. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/sharded_sd.py +0 -0
  248. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/transformer/__init__.py +0 -0
  249. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/transformer/attention.py +0 -0
  250. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/transformer/sequence_parallel.py +0 -0
  251. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/transformer/tiled_data_parallel.py +0 -0
  252. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/vae/__init__.py +0 -0
  253. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/vae/distributed_decoder.py +0 -0
  254. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/__init__.py +0 -0
  255. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/blockwise/__init__.py +0 -0
  256. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/blockwise/_impl.py +0 -0
  257. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/fp8_cast.py +0 -0
  258. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/fp8_scaled_mm.py +0 -0
  259. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/__init__.py +0 -0
  260. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/convert.py +0 -0
  261. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/fuse.py +0 -0
  262. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/linear.py +0 -0
  263. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/prequant.py +0 -0
  264. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/types.py +0 -0
  265. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/policy.py +0 -0
  266. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/__init__.py +0 -0
  267. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/__init__.py +0 -0
  268. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/embeddings_connector.py +0 -0
  269. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/embeddings_processor.py +0 -0
  270. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/base_encoder.py +0 -0
  271. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/encoder_configurator.py +0 -0
  272. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/prompts/gemma3_i2v_system_prompt.txt +0 -0
  273. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/prompts/gemma3_t2v_system_prompt.txt +0 -0
  274. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/prompts/gemma4_i2v_system_prompt.txt +0 -0
  275. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/encoders/prompts/gemma4_t2v_system_prompt.txt +0 -0
  276. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/feature_extractor.py +0 -0
  277. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/gemma_assets.py +0 -0
  278. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/gemma/tokenizer.py +0 -0
  279. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/tiling.py +0 -0
  280. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/tools.py +0 -0
  281. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/types.py +0 -0
  282. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/utils.py +0 -0
  283. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/__init__.py +0 -0
  284. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/a2vid_two_stage.py +0 -0
  285. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/dfr_layout.py +0 -0
  286. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/dfr_pipeline.py +0 -0
  287. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/distilled.py +0 -0
  288. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/distilled_mgpu.py +0 -0
  289. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/dubit.py +0 -0
  290. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/hdr_ic_lora.py +0 -0
  291. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/ic_lora.py +0 -0
  292. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/iclora_utils.py +0 -0
  293. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/keyframe_interpolation.py +0 -0
  294. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/__init__.py +0 -0
  295. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/_broadcast.py +0 -0
  296. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/bp_gemma_builder.py +0 -0
  297. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/controller.py +0 -0
  298. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/delegating_builder.py +0 -0
  299. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/fleet.py +0 -0
  300. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/gemma_builders.py +0 -0
  301. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/nccl_groups.py +0 -0
  302. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/runner.py +0 -0
  303. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/sp_builder.py +0 -0
  304. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/tdp_builder.py +0 -0
  305. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/vae_builders.py +0 -0
  306. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/weight_tracker.py +0 -0
  307. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/retake.py +0 -0
  308. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/t2a_one_stage.py +0 -0
  309. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_one_stage.py +0 -0
  310. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_two_stages.py +0 -0
  311. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_two_stages_hq.py +0 -0
  312. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_two_stages_hq_mgpu.py +0 -0
  313. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_two_stages_mgpu.py +0 -0
  314. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/__init__.py +0 -0
  315. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/args.py +0 -0
  316. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/blocks.py +0 -0
  317. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/constants.py +0 -0
  318. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/denoisers.py +0 -0
  319. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/gpu_model.py +0 -0
  320. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/helpers.py +0 -0
  321. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/__init__.py +0 -0
  322. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/color_config.py +0 -0
  323. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/decode.py +0 -0
  324. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/encode.py +0 -0
  325. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/exr.py +0 -0
  326. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/range_map.py +0 -0
  327. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/media_io/resize.py +0 -0
  328. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/model_paths.py +0 -0
  329. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/quantization_factory.py +0 -0
  330. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/res2s.py +0 -0
  331. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/samplers.py +0 -0
  332. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/types.py +0 -0
  333. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/__init__.py +0 -0
  334. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/adaln.py +0 -0
  335. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/keys.py +0 -0
  336. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/load.py +0 -0
  337. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/lora_keys.py +0 -0
  338. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/pipeline.py +0 -0
  339. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/provider.py +0 -0
  340. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/requirements.py +0 -0
  341. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/runner.py +0 -0
  342. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vae_keys.py +0 -0
  343. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/__init__.py +0 -0
  344. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/autoencoder_kl_minimax_h3.py +0 -0
  345. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/autoencoder_kl_minimax_h3_audio.py +0 -0
  346. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/before_denoise.py +0 -0
  347. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/before_encoder.py +0 -0
  348. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/decoders.py +0 -0
  349. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/denoise.py +0 -0
  350. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/encoders.py +0 -0
  351. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/modular_blocks_minimax_h3.py +0 -0
  352. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/modular_pipeline.py +0 -0
  353. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/packing.py +0 -0
  354. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/packing_ref2va.py +0 -0
  355. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/scheduling_minimax_h3.py +0 -0
  356. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/transformer_minimax_h3.py +0 -0
  357. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/offload.py +0 -0
  358. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/pipeline_runtime.py +0 -0
  359. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/prepared.py +0 -0
  360. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/preprocess/__init__.py +0 -0
  361. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/preprocess/requirements.py +0 -0
  362. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/preprocess/runner.py +0 -0
  363. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/references.py +0 -0
  364. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/registry_index.py +0 -0
  365. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/requirements.py +0 -0
  366. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/sampling.py +0 -0
  367. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/training/__init__.py +0 -0
  368. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/training/runner.py +0 -0
  369. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/trainingreqs.py +0 -0
  370. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/video_params.py +0 -0
  371. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/zimage/__init__.py +0 -0
  372. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/zimage/primitives.py +0 -0
  373. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/zimage/provider.py +0 -0
  374. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/zimage/requirements.py +0 -0
  375. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/zimage/runner.py +0 -0
  376. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/parallel/__init__.py +0 -0
  377. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/parallel/config.py +0 -0
  378. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/parallel/group.py +0 -0
  379. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/parallel/launch.py +0 -0
  380. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/parallel/protocol.py +0 -0
  381. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/parallel/registry.py +0 -0
  382. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/parallel/worker.py +0 -0
  383. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/runtime/__init__.py +0 -0
  384. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/runtime/context.py +0 -0
  385. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/runtime/file_store.py +0 -0
  386. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/runtime/progress.py +0 -0
  387. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/runtime/run.py +0 -0
  388. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/runtime/store.py +0 -0
  389. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/runtime/video_encode.py +0 -0
  390. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/sampling/__init__.py +0 -0
  391. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/sampling/batch.py +0 -0
  392. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/__init__.py +0 -0
  393. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/app.py +0 -0
  394. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/assets.py +0 -0
  395. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/bootstrap.py +0 -0
  396. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/frontend.py +0 -0
  397. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/manager.py +0 -0
  398. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/rpc.py +0 -0
  399. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/run_store.py +0 -0
  400. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/serialize.py +0 -0
  401. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/__init__.py +0 -0
  402. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/activity.py +0 -0
  403. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/assets.py +0 -0
  404. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/characters.py +0 -0
  405. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/config.py +0 -0
  406. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/fal.py +0 -0
  407. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/frames.py +0 -0
  408. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/generation.py +0 -0
  409. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/graph_build.py +0 -0
  410. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/handlers.py +0 -0
  411. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/image_meta.py +0 -0
  412. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/models.py +0 -0
  413. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/moodboard.py +0 -0
  414. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/peaks.py +0 -0
  415. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/recipe.py +0 -0
  416. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/schema.py +0 -0
  417. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/store.py +0 -0
  418. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/system_stats.py +0 -0
  419. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/timeline/__init__.py +0 -0
  420. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/timeline/compose.py +0 -0
  421. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/timeline/ffmpeg.py +0 -0
  422. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/timeline/render.py +0 -0
  423. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/timeline/resolve.py +0 -0
  424. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/training_store.py +0 -0
  425. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/takes.py +0 -0
  426. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/__init__.py +0 -0
  427. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/__main__.py +0 -0
  428. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/arch.py +0 -0
  429. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/cache.py +0 -0
  430. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/caption.py +0 -0
  431. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/h3.py +0 -0
  432. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/ltx25.py +0 -0
  433. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/models.py +0 -0
  434. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/precache_store.py +0 -0
  435. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/protocol.py +0 -0
  436. {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/trainer.py +0 -0
  437. {inline_core-1.3.0 → inline_core-1.3.1}/tests/conftest.py +0 -0
  438. {inline_core-1.3.0 → inline_core-1.3.1}/tests/helpers.py +0 -0
  439. {inline_core-1.3.0 → inline_core-1.3.1}/tests/reference/lookalike_faces.json +0 -0
  440. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_cache.py +0 -0
  441. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_catalog.py +0 -0
  442. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_character_nodes.py +0 -0
  443. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_character_requirements.py +0 -0
  444. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_characters_apply.py +0 -0
  445. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_characters_encode.py +0 -0
  446. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_characters_library.py +0 -0
  447. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_characters_rpc.py +0 -0
  448. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_characters_scoring.py +0 -0
  449. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_characters_wiring.py +0 -0
  450. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_charfile.py +0 -0
  451. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_checkpoint.py +0 -0
  452. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_clip_grid_parity.py +0 -0
  453. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_config.py +0 -0
  454. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_device_detect.py +0 -0
  455. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_encoder_parking.py +0 -0
  456. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_executor.py +0 -0
  457. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_extension_api.py +0 -0
  458. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_extension_install.py +0 -0
  459. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_extension_manifest.py +0 -0
  460. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_extension_resolve.py +0 -0
  461. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_extension_scanner.py +0 -0
  462. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_extension_spine.py +0 -0
  463. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_extension_state.py +0 -0
  464. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_file_store.py +0 -0
  465. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_flux2_controlnet.py +0 -0
  466. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_flux2_folder.py +0 -0
  467. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_flux2_resolve.py +0 -0
  468. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_flux2_runner.py +0 -0
  469. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_flux2_training.py +0 -0
  470. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_flux2_variants.py +0 -0
  471. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_frontend_serving.py +0 -0
  472. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_hidden_nodes.py +0 -0
  473. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_keymap.py +0 -0
  474. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_krea2_convert.py +0 -0
  475. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_krea2_depth_control.py +0 -0
  476. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_krea2_requirements.py +0 -0
  477. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_krea2_runner.py +0 -0
  478. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_loader_runners.py +0 -0
  479. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_loaders.py +0 -0
  480. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_lora.py +0 -0
  481. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_lora_download.py +0 -0
  482. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_ltx25_lora_keys.py +0 -0
  483. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_ltx25_nodes.py +0 -0
  484. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_ltx25_requirements.py +0 -0
  485. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_ltx25_training.py +0 -0
  486. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_ltx25_wired_refs.py +0 -0
  487. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_manager_queue.py +0 -0
  488. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_memory_policy.py +0 -0
  489. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_minimaxh3_adaln.py +0 -0
  490. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_minimaxh3_keys.py +0 -0
  491. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_minimaxh3_load.py +0 -0
  492. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_minimaxh3_lora_keys.py +0 -0
  493. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_minimaxh3_nodes.py +0 -0
  494. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_minimaxh3_training.py +0 -0
  495. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_model_download_queue.py +0 -0
  496. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_model_registry_index.py +0 -0
  497. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_model_requirements.py +0 -0
  498. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_offload_prepared.py +0 -0
  499. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_output_kind_contract.py +0 -0
  500. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_parallel_group.py +0 -0
  501. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_pipeline_cache.py +0 -0
  502. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_precache_store.py +0 -0
  503. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_primitives.py +0 -0
  504. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_recipe.py +0 -0
  505. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_references.py +0 -0
  506. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_rpc_bridge.py +0 -0
  507. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_run_store.py +0 -0
  508. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_sampling.py +0 -0
  509. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_schema.py +0 -0
  510. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_server.py +0 -0
  511. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_staged_residency.py +0 -0
  512. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_activity.py +0 -0
  513. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_assets.py +0 -0
  514. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_fal.py +0 -0
  515. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_frames.py +0 -0
  516. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_generation.py +0 -0
  517. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_graph_build.py +0 -0
  518. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_models.py +0 -0
  519. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_moodboard.py +0 -0
  520. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_multi_reference.py +0 -0
  521. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_node_size.py +0 -0
  522. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_peaks.py +0 -0
  523. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_rpc.py +0 -0
  524. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_schema.py +0 -0
  525. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_store.py +0 -0
  526. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_timeline.py +0 -0
  527. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_training.py +0 -0
  528. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_take_bytes.py +0 -0
  529. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_topo.py +0 -0
  530. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_training_arch.py +0 -0
  531. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_training_dataset.py +0 -0
  532. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_training_models.py +0 -0
  533. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_training_nodes.py +0 -0
  534. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_training_requirements.py +0 -0
  535. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_training_resolve.py +0 -0
  536. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_training_snapshots.py +0 -0
  537. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_validate.py +0 -0
  538. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_video_encode.py +0 -0
  539. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_video_params.py +0 -0
  540. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_webui_install.py +0 -0
  541. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_xfuser_sampler.py +0 -0
  542. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_zimage_primitives.py +0 -0
  543. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_zimage_resolve.py +0 -0
  544. {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_zimage_runner.py +0 -0
  545. {inline_core-1.3.0 → inline_core-1.3.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: inline-core
3
- Version: 1.3.0
3
+ Version: 1.3.1
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.3.0"
4
+ version = "1.3.1"
5
5
  description = "The generation engine behind Inline Studio."
6
6
  readme = "README.md"
7
7
  license = "GPL-3.0-or-later"
@@ -34,6 +34,7 @@ from .bootstrap import register_models
34
34
  from .frontend import resolve_frontend_root
35
35
  from .rpc import EventBroadcaster, RpcRouter
36
36
  from .run_store import SqliteRunStore
37
+ from .version import report_versions
37
38
 
38
39
 
39
40
  def _quiet_dependency_noise() -> None:
@@ -50,6 +51,10 @@ def _quiet_dependency_noise() -> None:
50
51
 
51
52
  def main() -> None:
52
53
  _quiet_dependency_noise() # before register_models, which is what pulls diffusers/torchao in
54
+ # Resolved and reported first: model registration is slow and can crash, and the two version
55
+ # numbers are the first thing a bug report needs.
56
+ frontend_root = resolve_frontend_root()
57
+ report_versions(frontend_root)
53
58
  policy = MemoryPolicy()
54
59
  registry = build_default_registry()
55
60
  data = data_dir()
@@ -71,7 +76,6 @@ def main() -> None:
71
76
  torch_warning = cpu_only_torch_warning() or unsupported_arch_warning()
72
77
  if torch_warning:
73
78
  print(f"WARNING: {torch_warning}")
74
- frontend_root = resolve_frontend_root()
75
79
  # The Studio app-backend: Core is the sole native backend (projects, frames, moodboard, assets,
76
80
  # generation, fal, timeline). Every InlineStudioApi channel is handled here.
77
81
  store = StudioStore(
@@ -0,0 +1,205 @@
1
+ """What is installed and whether PyPI has newer: the engine and the UI ship separately and drift."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ import os
7
+ import threading
8
+ import time
9
+ import urllib.error
10
+ import urllib.request
11
+ from dataclasses import dataclass
12
+ from importlib.metadata import PackageNotFoundError, distribution, version
13
+ from pathlib import Path
14
+ from typing import Any, cast
15
+
16
+ from ..config import data_dir
17
+
18
+ CORE_PACKAGE = "inline-core"
19
+ FRONTEND_PACKAGE = "inline-studio-frontend"
20
+
21
+ #: A day: long enough that a restart loop never hammers PyPI, short enough to notice a release.
22
+ CACHE_TTL_SECONDS = 24 * 60 * 60
23
+
24
+ #: The check runs off the boot path, but a hung socket would still hold the daemon thread open.
25
+ FETCH_TIMEOUT_SECONDS = 5
26
+
27
+
28
+ @dataclass(frozen=True)
29
+ class Component:
30
+ package: str
31
+ #: None when what runs is not an installed distribution - a local SPA build, or no UI at all.
32
+ version: str | None
33
+ origin: str
34
+
35
+
36
+ def core_component() -> Component:
37
+ """An editable install records its version at install time, so the number can lag the source."""
38
+ return Component(
39
+ CORE_PACKAGE, _installed(CORE_PACKAGE), "editable" if _is_editable(CORE_PACKAGE) else ""
40
+ )
41
+
42
+
43
+ def frontend_component(frontend_root: str | None) -> Component:
44
+ if frontend_root is None:
45
+ return Component(FRONTEND_PACKAGE, None, "not installed")
46
+ if _is_package_static(frontend_root):
47
+ return Component(FRONTEND_PACKAGE, _installed(FRONTEND_PACKAGE), "")
48
+ return Component(FRONTEND_PACKAGE, None, f"local build: {frontend_root}")
49
+
50
+
51
+ def report_versions(frontend_root: str | None) -> None:
52
+ """Name both halves at boot, then announce an update - cached, or from a background fetch."""
53
+ core, frontend = core_component(), frontend_component(frontend_root)
54
+ print("Versions: " + ", ".join(describe(c) for c in (core, frontend)))
55
+ if os.environ.get("INLINE_NO_UPDATE_CHECK", "").strip().lower() in {"1", "true", "yes"}:
56
+ return
57
+ cached = _read_cache()
58
+ if cached is not None:
59
+ _announce(core, frontend, cached)
60
+ return
61
+ threading.Thread(target=_check, args=(core, frontend), daemon=True).start()
62
+
63
+
64
+ def describe(component: Component) -> str:
65
+ parts = [component.package, component.version or "unknown"]
66
+ return " ".join(parts) + (f" ({component.origin})" if component.origin else "")
67
+
68
+
69
+ def update_lines(component: Component, latest: str | None) -> list[str]:
70
+ """Empty unless this half is behind - an unreachable PyPI must never claim either answer."""
71
+ if component.version is None or latest is None or not is_newer(latest, component.version):
72
+ return []
73
+ launcher = ".\\webui.bat" if os.name == "nt" else "./webui.sh"
74
+ hint = f"{launcher} --install"
75
+ if component.package == CORE_PACKAGE and component.origin == "editable":
76
+ hint = f"git pull, then {hint}"
77
+ return [
78
+ f"UPDATE AVAILABLE: {component.package} {component.version} -> {latest}",
79
+ f" Update with: {hint} (or: pip install -U {component.package})",
80
+ ]
81
+
82
+
83
+ def is_newer(candidate: str, current: str) -> bool:
84
+ """PEP 440 when packaging is importable; it is not a declared dependency of the engine."""
85
+ try:
86
+ from packaging.version import InvalidVersion, Version
87
+
88
+ try:
89
+ return Version(candidate) > Version(current)
90
+ except InvalidVersion:
91
+ pass
92
+ except ModuleNotFoundError:
93
+ pass
94
+ return _numeric(candidate) > _numeric(current)
95
+
96
+
97
+ def latest_release(package: str) -> str | None:
98
+ url = f"https://pypi.org/pypi/{package}/json"
99
+ try:
100
+ with urllib.request.urlopen(url, timeout=FETCH_TIMEOUT_SECONDS) as response: # noqa: S310
101
+ payload = _object(json.loads(response.read().decode("utf-8")))
102
+ except (urllib.error.URLError, OSError, ValueError):
103
+ return None
104
+ latest = _object(payload.get("info")).get("version")
105
+ return latest if isinstance(latest, str) else None
106
+
107
+
108
+ def _check(core: Component, frontend: Component) -> None:
109
+ latest = {p: latest_release(p) for p in (CORE_PACKAGE, FRONTEND_PACKAGE)}
110
+ found = {p: v for p, v in latest.items() if v is not None}
111
+ # Only a complete answer is cached, so one unreachable fetch does not freeze a stale pair in.
112
+ if len(found) == len(latest):
113
+ _write_cache(found)
114
+ _announce(core, frontend, found)
115
+
116
+
117
+ def _announce(core: Component, frontend: Component, latest: dict[str, str]) -> None:
118
+ lines = [
119
+ line
120
+ for component in (core, frontend)
121
+ for line in update_lines(component, latest.get(component.package))
122
+ ]
123
+ for line in lines:
124
+ print(line)
125
+
126
+
127
+ def _object(value: object) -> dict[str, Any]:
128
+ """`json.loads` returns `Any`; narrowed once here so the rest of the module stays typed."""
129
+ return cast("dict[str, Any]", value) if isinstance(value, dict) else {}
130
+
131
+
132
+ def _installed(package: str) -> str | None:
133
+ try:
134
+ return version(package)
135
+ except PackageNotFoundError:
136
+ return None
137
+
138
+
139
+ def _is_editable(package: str) -> bool:
140
+ try:
141
+ raw = distribution(package).read_text("direct_url.json")
142
+ except (PackageNotFoundError, OSError):
143
+ return False
144
+ if not raw:
145
+ return False
146
+ try:
147
+ info = _object(json.loads(raw))
148
+ except ValueError:
149
+ return False
150
+ return bool(_object(info.get("dir_info")).get("editable"))
151
+
152
+
153
+ def _is_package_static(frontend_root: str) -> bool:
154
+ """INLINE_FRONTEND_ROOT can name the package's own static dir, which is still the package."""
155
+ try:
156
+ import inline_studio_frontend # type: ignore[import-not-found]
157
+ except ModuleNotFoundError:
158
+ return False
159
+ pkg_file = getattr(inline_studio_frontend, "__file__", None)
160
+ if not pkg_file:
161
+ return False
162
+ static = Path(pkg_file).parent / "static"
163
+ try:
164
+ return static.resolve() == Path(frontend_root).resolve()
165
+ except OSError:
166
+ return False
167
+
168
+
169
+ def _numeric(value: str) -> tuple[int, ...]:
170
+ parts: list[int] = []
171
+ for chunk in value.split("."):
172
+ digits = ""
173
+ for character in chunk:
174
+ if not character.isdigit():
175
+ break
176
+ digits += character
177
+ if not digits:
178
+ break
179
+ parts.append(int(digits))
180
+ return tuple(parts)
181
+
182
+
183
+ def _cache_path() -> Path:
184
+ return data_dir() / "version-check.json"
185
+
186
+
187
+ def _read_cache() -> dict[str, str] | None:
188
+ """None when absent or past the TTL, so a stale file never reports an old release as newest."""
189
+ path = _cache_path()
190
+ try:
191
+ if time.time() - path.stat().st_mtime > CACHE_TTL_SECONDS:
192
+ return None
193
+ raw = json.loads(path.read_text(encoding="utf-8"))
194
+ except (OSError, ValueError):
195
+ return None
196
+ return {k: v for k, v in _object(raw).items() if isinstance(v, str)}
197
+
198
+
199
+ def _write_cache(latest: dict[str, str]) -> None:
200
+ path = _cache_path()
201
+ try:
202
+ path.parent.mkdir(parents=True, exist_ok=True)
203
+ path.write_text(json.dumps(latest), encoding="utf-8")
204
+ except OSError:
205
+ pass
@@ -9,11 +9,18 @@ names it ``caption-nvila15b``.
9
9
 
10
10
  Filenames remain the fallback: ``bear.mp4`` pairs with ``bear_reference.mp4`` with no sidecar at
11
11
  all, which is what ``training/dataset.py`` already reads at train time.
12
+
13
+ Nesting is read too. The Hugging Face ``videofolder`` convention puts the clips in ``train/`` beside
14
+ a ``metadata.jsonl`` whose ``file_name`` is relative to that split, so a reader that only looked at
15
+ the root of a pulled repo found no media at all and every path here is relative to the root instead
16
+ of a bare name.
12
17
  """
13
18
 
14
19
  from __future__ import annotations
15
20
 
16
21
  import json
22
+ import os
23
+ from collections.abc import Iterator
17
24
  from dataclasses import dataclass
18
25
  from pathlib import Path
19
26
  from typing import Any
@@ -38,9 +45,39 @@ class DatasetEntry:
38
45
 
39
46
 
40
47
  def read_metadata(root: Path) -> dict[str, DatasetEntry]:
41
- """Every metadata row, keyed by target filename. Empty when the folder carries none."""
48
+ """Every metadata row, keyed by path relative to `root`. Empty when the folder carries none."""
49
+ entries: dict[str, DatasetEntry] = {}
50
+ for folder in sorted({root, *(f.parent for f in walk_files(root))}):
51
+ entries.update(_read_folder(root, folder))
52
+ return entries
53
+
54
+
55
+ def walk_files(root: Path) -> list[Path]:
56
+ """Every file under `root`, sorted, skipping dot-dirs - `.cache/` mirrors the whole snapshot."""
57
+ return sorted(_walk(root))
58
+
59
+
60
+ def media_files(root: Path) -> list[Path]:
61
+ return [p for p in walk_files(root) if p.suffix.lower() in _MEDIA_SUFFIXES]
62
+
63
+
64
+ def _walk(root: Path) -> Iterator[Path]:
65
+ try:
66
+ entries = sorted(root.iterdir())
67
+ except OSError:
68
+ return
69
+ for entry in entries:
70
+ if entry.name.startswith("."):
71
+ continue
72
+ if entry.is_dir():
73
+ yield from _walk(entry)
74
+ elif entry.is_file():
75
+ yield entry
76
+
77
+
78
+ def _read_folder(root: Path, folder: Path) -> dict[str, DatasetEntry]:
42
79
  for name in _METADATA_FILES:
43
- path = root / name
80
+ path = folder / name
44
81
  if not path.is_file():
45
82
  continue
46
83
  try:
@@ -52,16 +89,23 @@ def read_metadata(root: Path) -> dict[str, DatasetEntry]:
52
89
  target = _first(row, _TARGET_KEYS)
53
90
  if not target:
54
91
  continue
55
- entries[Path(target).name] = DatasetEntry(
56
- target=Path(target).name,
92
+ reference = _first(row, _REFERENCE_KEYS)
93
+ key = _relative(root, folder, target)
94
+ entries[key] = DatasetEntry(
95
+ target=key,
57
96
  caption=_caption(row),
58
- reference=(lambda r: Path(r).name if r else None)(_first(row, _REFERENCE_KEYS)),
97
+ reference=_relative(root, folder, reference) if reference else None,
59
98
  )
60
99
  if entries:
61
100
  return entries
62
101
  return {}
63
102
 
64
103
 
104
+ def _relative(root: Path, folder: Path, value: str) -> str:
105
+ """A sidecar names its files relative to itself, so a split's rows key on `train/0001.mp4`."""
106
+ return Path(os.path.normpath(folder.relative_to(root) / value)).as_posix()
107
+
108
+
65
109
  def _rows(path: Path) -> list[dict[str, Any]]:
66
110
  text = path.read_text(encoding="utf-8").strip()
67
111
  if not text:
@@ -134,14 +178,16 @@ def inspect_repo(repo: str, token: str | None = None) -> RepoPreview:
134
178
  return RepoPreview(repo, 0, 0, 0, None, f"No dataset repo called {repo!r}.")
135
179
  return RepoPreview(repo, 0, 0, 0, None, str(exc).splitlines()[0])
136
180
 
137
- names, total = [], 0
138
- metadata_file = None
181
+ names: list[str] = []
182
+ total, metadata_file = 0, None
139
183
  for sibling in info.siblings or []:
140
- name = Path(sibling.rfilename).name
141
- if sibling.rfilename in _METADATA_FILES or name in _METADATA_FILES:
142
- metadata_file = name
143
- if Path(name).suffix.lower() in _MEDIA_SUFFIXES:
144
- names.append(name)
184
+ # The repo path, not its basename: the preview counted `train/0001.mp4` while the import
185
+ # read only the root, so it promised 173 clips and then found none.
186
+ rel = Path(str(sibling.rfilename))
187
+ if rel.name in _METADATA_FILES:
188
+ metadata_file = rel.name
189
+ if rel.suffix.lower() in _MEDIA_SUFFIXES:
190
+ names.append(rel.as_posix())
145
191
  total += int(getattr(sibling, "size", 0) or 0)
146
192
 
147
193
  return _preview(repo, names, total, metadata_file)
@@ -152,15 +198,13 @@ def inspect_folder(path: str) -> RepoPreview:
152
198
  folder = Path(path).expanduser()
153
199
  if not folder.is_dir():
154
200
  return RepoPreview(path, 0, 0, 0, None, f"No folder at {path!r}.")
155
- names, total = [], 0
156
- metadata_file = None
157
- for entry in sorted(folder.iterdir()):
158
- if not entry.is_file():
159
- continue
201
+ names: list[str] = []
202
+ total, metadata_file = 0, None
203
+ for entry in walk_files(folder):
160
204
  if entry.name in _METADATA_FILES:
161
205
  metadata_file = entry.name
162
206
  if entry.suffix.lower() in _MEDIA_SUFFIXES:
163
- names.append(entry.name)
207
+ names.append(entry.relative_to(folder).as_posix())
164
208
  total += entry.stat().st_size
165
209
  return _preview(path, names, total, metadata_file)
166
210
 
@@ -185,7 +229,8 @@ def _looks_like_reference(name: str) -> bool:
185
229
  def _reference_name_for(name: str, present: set[str]) -> str | None:
186
230
  path = Path(name)
187
231
  for suffix in (".ref", "_reference"):
188
- candidate = f"{path.stem}{suffix}{path.suffix.lower()}"
232
+ # with_name, so a nested pair stays in its own split rather than matching across folders.
233
+ candidate = path.with_name(f"{path.stem}{suffix}{path.suffix.lower()}").as_posix()
189
234
  if candidate in present:
190
235
  return candidate
191
236
  return None
@@ -32,7 +32,7 @@ from ..training.dataset import (
32
32
  )
33
33
  from . import training_store as ts
34
34
  from .activity import ActivityRun
35
- from .dataset_import import read_metadata
35
+ from .dataset_import import read_metadata, walk_files
36
36
 
37
37
  _CAPTION_EXT = ".txt"
38
38
 
@@ -168,38 +168,39 @@ class Training:
168
168
  if not folder.is_dir():
169
169
  raise ValueError(f"Not a folder: {path}")
170
170
  conn, project = self._conn(), self._store.folder()
171
- media = [
172
- p
173
- for p in sorted(folder.iterdir())
174
- if p.is_file() and ax.kind_for_file(str(p)) in ("image", "video")
175
- ]
171
+ # Nested, because a pulled Hugging Face dataset keeps its clips in `train/`, not the root.
172
+ media = [p for p in walk_files(folder) if ax.kind_for_file(str(p)) in ("image", "video")]
176
173
  if not media:
177
174
  raise ValueError(f"No images or clips in {path}")
178
175
 
176
+ def relative(source: Path) -> str:
177
+ return source.relative_to(folder).as_posix()
178
+
179
179
  metadata = read_metadata(folder)
180
+ names = {relative(p) for p in media}
180
181
  references = {e.reference for e in metadata.values() if e.reference} | {
181
- p.name for p in media if is_reference_name(p)
182
+ n for n in names if is_reference_name(Path(n))
182
183
  }
183
184
  imported = [(p, ax.import_file(conn, project, str(p), None)) for p in media]
184
- by_name = {p.name: a["id"] for p, a in imported if a}
185
- names = {p.name for p in media}
185
+ by_name = {relative(p): a["id"] for p, a in imported if a}
186
186
 
187
187
  staged: list[dict[str, Any]] = []
188
188
  for source, asset in imported:
189
- if asset is None or source.name in references:
189
+ name = relative(source)
190
+ if asset is None or name in references:
190
191
  continue
191
- entry = metadata.get(source.name)
192
+ entry = metadata.get(name)
192
193
  sidecar = source.with_suffix(_CAPTION_EXT)
193
194
  caption = ""
194
195
  if sidecar.is_file():
195
196
  caption = sidecar.read_text(encoding="utf-8").strip()
196
197
  elif entry is not None:
197
198
  caption = entry.caption
198
- reference_name = entry.reference if entry else reference_for_name(source, names)
199
+ reference_name = entry.reference if entry else reference_for_name(Path(name), names)
199
200
  staged.append(
200
201
  {
201
202
  "assetId": asset["id"],
202
- "name": source.name,
203
+ "name": name,
203
204
  "caption": caption,
204
205
  "referenceAssetId": by_name.get(reference_name) if reference_name else None,
205
206
  }
@@ -56,7 +56,8 @@ def reference_for_name(target: Path, names: set[str]) -> str | None:
56
56
  out. Same two spellings, matched against what is actually being imported.
57
57
  """
58
58
  for suffix in (_REFERENCE_INFIX, _REFERENCE_SUFFIX):
59
- candidate = f"{target.stem}{suffix}{target.suffix.lower()}"
59
+ # with_name keeps a nested target in its own folder; a bare name is unchanged by it.
60
+ candidate = target.with_name(f"{target.stem}{suffix}{target.suffix.lower()}").as_posix()
60
61
  if candidate in names:
61
62
  return candidate
62
63
  return None
@@ -5,7 +5,7 @@ from __future__ import annotations
5
5
  import json
6
6
  from pathlib import Path
7
7
 
8
- from inline_core.studio.dataset_import import read_metadata
8
+ from inline_core.studio.dataset_import import inspect_folder, media_files, read_metadata
9
9
  from inline_core.training.dataset import is_reference_name, reference_for_name
10
10
 
11
11
 
@@ -41,6 +41,48 @@ def test_hugging_face_metadata_jsonl_finds_a_prefixed_caption_key(tmp_path: Path
41
41
  assert entries["0001.mp4"].reference is None
42
42
 
43
43
 
44
+ def test_a_split_subfolder_is_read_and_keyed_from_the_root(tmp_path: Path) -> None:
45
+ """The videofolder convention: clips in `train/`, a sidecar beside them, `file_name` relative.
46
+
47
+ Reading only the root is what made a pulled pixel-art dataset import as "No images or clips".
48
+ """
49
+ train = tmp_path / "train"
50
+ train.mkdir()
51
+ (train / "metadata.jsonl").write_text(
52
+ '{"file_name": "0001.mp4", "caption-nvila15b": "a pixel scene"}\n'
53
+ )
54
+ (train / "0001.mp4").write_bytes(b"clip")
55
+ (tmp_path / "README.md").write_text("# a dataset")
56
+
57
+ entries = read_metadata(tmp_path)
58
+ assert set(entries) == {"train/0001.mp4"}
59
+ assert entries["train/0001.mp4"].caption == "a pixel scene"
60
+ assert [p.name for p in media_files(tmp_path)] == ["0001.mp4"]
61
+ preview = inspect_folder(str(tmp_path))
62
+ assert (preview.items, preview.problem) == (1, None)
63
+
64
+
65
+ def test_a_nested_pair_stays_inside_its_own_split(tmp_path: Path) -> None:
66
+ """Pairing is by relative path, so `train/bear.mp4` cannot claim `test/bear_reference.mp4`."""
67
+ for split in ("train", "test"):
68
+ (tmp_path / split).mkdir()
69
+ (tmp_path / split / "bear.mp4").write_bytes(b"clip")
70
+ (tmp_path / "test" / "bear_reference.mp4").write_bytes(b"clip")
71
+
72
+ preview = inspect_folder(str(tmp_path))
73
+ assert (preview.items, preview.pairs) == (2, 1)
74
+
75
+
76
+ def test_the_hugging_face_download_cache_is_not_imported(tmp_path: Path) -> None:
77
+ """`local_dir` snapshots leave a `.cache/huggingface/` mirror beside the real files."""
78
+ cache = tmp_path / ".cache" / "huggingface" / "download" / "train"
79
+ cache.mkdir(parents=True)
80
+ (cache / "0001.mp4").write_bytes(b"not the real clip")
81
+ (tmp_path / "0001.mp4").write_bytes(b"clip")
82
+ assert [p.name for p in media_files(tmp_path)] == ["0001.mp4"]
83
+ assert media_files(tmp_path)[0].parent == tmp_path
84
+
85
+
44
86
  def test_a_malformed_sidecar_falls_back_rather_than_failing_the_import(tmp_path: Path) -> None:
45
87
  (tmp_path / "dataset.json").write_text("{not json")
46
88
  assert read_metadata(tmp_path) == {}
@@ -0,0 +1,79 @@
1
+ """The two halves ship separately, so the boot banner has to name both and notice either lagging."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from pathlib import Path
7
+
8
+ from inline_core.server import version as v
9
+
10
+
11
+ def _component(package: str, installed: str | None, origin: str = "") -> v.Component:
12
+ return v.Component(package, installed, origin)
13
+
14
+
15
+ def test_a_newer_release_is_announced_with_a_command() -> None:
16
+ lines = v.update_lines(_component(v.FRONTEND_PACKAGE, "1.2.52"), "1.3.0")
17
+ assert "1.2.52 -> 1.3.0" in lines[0]
18
+ assert v.FRONTEND_PACKAGE in lines[1]
19
+
20
+
21
+ def test_an_editable_checkout_is_told_to_pull_first() -> None:
22
+ """Its version is recorded at install time, so pip would not move it - only the source does."""
23
+ lines = v.update_lines(_component(v.CORE_PACKAGE, "1.2.0", "editable"), "1.3.0")
24
+ assert "git pull" in lines[1]
25
+
26
+
27
+ def test_nothing_is_claimed_when_current_or_unreachable() -> None:
28
+ assert v.update_lines(_component(v.CORE_PACKAGE, "1.3.0"), "1.3.0") == []
29
+ assert v.update_lines(_component(v.CORE_PACKAGE, "1.4.0"), "1.3.0") == []
30
+ assert v.update_lines(_component(v.CORE_PACKAGE, "1.3.0"), None) == []
31
+ assert v.update_lines(_component(v.FRONTEND_PACKAGE, None, "local build: x"), "1.3.0") == []
32
+
33
+
34
+ def test_version_compare_without_packaging(monkeypatch) -> None:
35
+ """`packaging` is not a declared dependency of the engine, so the fallback has to hold."""
36
+ import builtins
37
+
38
+ real_import = builtins.__import__
39
+
40
+ def _blocked(name, *args, **kwargs):
41
+ if name.startswith("packaging"):
42
+ raise ModuleNotFoundError(name)
43
+ return real_import(name, *args, **kwargs)
44
+
45
+ monkeypatch.setattr(builtins, "__import__", _blocked)
46
+ assert v.is_newer("1.3.0", "1.2.52")
47
+ assert v.is_newer("1.10.0", "1.9.0")
48
+ assert not v.is_newer("1.3.0", "1.3.0")
49
+ assert not v.is_newer("1.2.0", "1.3.0")
50
+
51
+
52
+ def test_a_local_spa_build_reports_no_package_version(tmp_path: Path) -> None:
53
+ """A `--rebuild` / `--front-end-root` run serves source, which no wheel version describes."""
54
+ component = v.frontend_component(str(tmp_path / "dist-web"))
55
+ assert component.version is None
56
+ assert "local build" in component.origin
57
+ assert v.frontend_component(None).origin == "not installed"
58
+
59
+
60
+ def test_a_stale_cache_is_ignored(monkeypatch, tmp_path: Path) -> None:
61
+ """Otherwise the first check's answer would be reported as the newest release forever."""
62
+ monkeypatch.setenv("INLINE_DATA_DIR", str(tmp_path))
63
+ cache = tmp_path / "version-check.json"
64
+ cache.write_text(json.dumps({v.CORE_PACKAGE: "1.3.0"}))
65
+ assert v._read_cache() == {v.CORE_PACKAGE: "1.3.0"}
66
+ import os
67
+
68
+ stale = cache.stat().st_mtime - v.CACHE_TTL_SECONDS - 1
69
+ os.utime(cache, (stale, stale))
70
+ assert v._read_cache() is None
71
+
72
+
73
+ def test_the_check_is_skippable(monkeypatch, capsys) -> None:
74
+ monkeypatch.setenv("INLINE_NO_UPDATE_CHECK", "1")
75
+ monkeypatch.setattr(v, "latest_release", lambda package: "99.0.0")
76
+ v.report_versions(None)
77
+ out = capsys.readouterr().out
78
+ assert "Versions:" in out
79
+ assert "UPDATE AVAILABLE" not in out
@@ -223,7 +223,14 @@ if "!TORCH_FORCE!"=="1" if defined TORCH_CHOICE (
223
223
  echo + uv pip install --python "!TARGET_PY!" --index-url !TORCH_URL! --reinstall !TORCH_PINS!
224
224
  uv pip install --python "!TARGET_PY!" --index-url !TORCH_URL! --reinstall !TORCH_PINS! || goto fail
225
225
  )
226
- uv pip install --python "!TARGET_PY!" inline-studio-frontend >nul 2>nul && echo Installed the prebuilt web UI (inline-studio-frontend). || echo Note: inline-studio-frontend not installed; the UI will build from source or run API-only.
226
+ rem --upgrade, because uv leaves an already-satisfied requirement alone: without it a re-run of
227
+ rem --install kept whatever UI was first installed while the engine moved on underneath it.
228
+ set "FRONTEND_VERSION="
229
+ uv pip install --python "!TARGET_PY!" --upgrade inline-studio-frontend >nul 2>nul && (
230
+ for /f "usebackq delims=" %%v in (`"!TARGET_PY!" -c "from importlib.metadata import version; print(version('inline-studio-frontend'))" 2^>nul`) do set "FRONTEND_VERSION=%%v"
231
+ if not defined FRONTEND_VERSION set "FRONTEND_VERSION=unknown"
232
+ echo Installed the prebuilt web UI ^(inline-studio-frontend !FRONTEND_VERSION!^).
233
+ ) || echo Note: inline-studio-frontend not installed; the UI will build from source or run API-only.
227
234
  call :write_install_record
228
235
  rem A CPU-only wheel on a GPU box is silent at runtime and ~100x slower, so say it here rather than
229
236
  rem let it through: it can still happen if PyPI ever outranks the CUDA index on version.
@@ -234,7 +241,9 @@ echo CPU, roughly 100x slower. Re-run with an explicit index, e.g.
234
241
  echo .\webui.bat --install --torch-index !TORCH_CHOICE! --recreate
235
242
 
236
243
  :install_done
237
- echo Installed extras: !EXTRAS!. Start with: .\webui.bat
244
+ set "CORE_VERSION=unknown"
245
+ for /f "usebackq delims=" %%v in (`"!TARGET_PY!" -c "from importlib.metadata import version; print(version('inline-core'))" 2^>nul`) do set "CORE_VERSION=%%v"
246
+ echo Installed inline-core !CORE_VERSION! with extras: !EXTRAS!. Start with: .\webui.bat
238
247
  exit /b 0
239
248
 
240
249
  rem One query for both, keeping the highest capability. set /a not a findstr guard: `if LSS` would
@@ -370,9 +370,15 @@ if [[ "$RUN_INSTALL" -eq 1 ]]; then
370
370
  uv pip install --python "$TARGET_PY" --index-url "$TORCH_URL" --reinstall "${TORCH_PINS[@]}"
371
371
  fi
372
372
  # Pull the prebuilt web UI so there's no Node build (best-effort - it may not be published yet).
373
- uv pip install --python "$TARGET_PY" inline-studio-frontend >/dev/null 2>&1 \
374
- && echo "Installed the prebuilt web UI (inline-studio-frontend)." \
375
- || echo "Note: inline-studio-frontend not installed; the UI will build from source or run API-only."
373
+ # --upgrade, because uv leaves an already-satisfied requirement alone: without it a re-run of
374
+ # --install kept whatever UI was first installed while the engine moved on underneath it.
375
+ if uv pip install --python "$TARGET_PY" --upgrade inline-studio-frontend >/dev/null 2>&1; then
376
+ FRONTEND_VERSION="$("$TARGET_PY" -c 'from importlib.metadata import version
377
+ print(version("inline-studio-frontend"))' 2>/dev/null || true)"
378
+ echo "Installed the prebuilt web UI (inline-studio-frontend ${FRONTEND_VERSION:-unknown})."
379
+ else
380
+ echo "Note: inline-studio-frontend not installed; the UI will build from source or run API-only."
381
+ fi
376
382
  # A CPU-only wheel on a GPU box is silent at runtime and ~100x slower, so say it here rather than
377
383
  # let the resolve fail quietly - it can still happen if PyPI outranks the CUDA index on version.
378
384
  if [[ "$TORCH_CHOICE" != "cpu" ]] && ! "$TARGET_PY" -c 'import importlib.util, sys
@@ -409,7 +415,9 @@ rec = {
409
415
  with open(os.environ["INLINE_RECORD"], "w", encoding="utf-8") as fh:
410
416
  json.dump(rec, fh, indent=2)
411
417
  ' 2>/dev/null || true
412
- echo "Installed extras: $EXTRAS. Start with: ./webui.sh"
418
+ CORE_VERSION="$("$TARGET_PY" -c 'from importlib.metadata import version
419
+ print(version("inline-core"))' 2>/dev/null || true)"
420
+ echo "Installed inline-core ${CORE_VERSION:-unknown} with extras: $EXTRAS. Start with: ./webui.sh"
413
421
  exit 0
414
422
  fi
415
423
 
File without changes
File without changes
File without changes