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.
- {inline_core-1.3.0 → inline_core-1.3.1}/PKG-INFO +1 -1
- {inline_core-1.3.0 → inline_core-1.3.1}/pyproject.toml +1 -1
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/__main__.py +5 -1
- inline_core-1.3.1/src/inline_core/server/version.py +205 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/dataset_import.py +64 -19
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/training.py +14 -13
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/dataset.py +2 -1
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_dataset_import.py +43 -1
- inline_core-1.3.1/tests/test_version_report.py +79 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/webui.bat +11 -2
- {inline_core-1.3.0 → inline_core-1.3.1}/webui.sh +12 -4
- {inline_core-1.3.0 → inline_core-1.3.1}/.gitignore +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/.python-version +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/CLAUDE.md +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/README.md +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/main.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/scripts/flux2_train_matrix.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/scripts/minimax_h3_lora_check.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/scripts/minimax_h3_train_matrix.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/scripts/reference.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/characters/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/characters/apply.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/characters/charfile.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/characters/encode.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/characters/library.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/characters/scoring.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/characters/weights.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/components/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/components/conditioning.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/components/interfaces.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/config.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/device/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/device/auto.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/device/detect.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/device/memory.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/device/policy.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/device/probe.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/device/types.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/errors.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/api.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/constraints.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/fetch.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/handlers.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/importer.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/install.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/loader.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/manifest.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/models.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/paths.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/resolve.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/scanner.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/state.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/extensions/tools.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/ffmpeg.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/cache.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/descriptor.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/executor.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/loader_runners.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/primitives.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/registry.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/runners.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/schema.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/topo.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/graph/validate.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/media.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/catalog.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/character/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/character/runner.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/characterreqs.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/checkpoint.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/controlspace.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/flux2/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/flux2/controlnet.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/flux2/embeds.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/flux2/provider.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/flux2/requirements.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/flux2/runner.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/flux2/variants.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/keymap.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/krea2/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/krea2/convert.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/krea2/depth_control.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/krea2/img2img.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/krea2/provider.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/krea2/requirements.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/krea2/runner.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/loaders.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/lora.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/lora_keys.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/memory.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/pipeline.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/provider.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/requirements.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/runner.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/allocator_trim_strategy.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/batch_split.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/__init__.py +0 -0
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/builder.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/disk.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/pool.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/provider.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/source.py +0 -0
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/utils.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/block_streaming/wrapper.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/color/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/color/audio_mux.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/color/hlg.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/color/primaries.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/color/yuv.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/components/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/components/diffusion_steps.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/components/guiders.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/components/noisers.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/components/patchifiers.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/components/protocols.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/components/schedulers.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/exceptions.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/item.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/mask_utils.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/conditioning/types/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/devices.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/duration_head/__init__.py +0 -0
- {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
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/guidance/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/guidance/perturbations.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/hdr.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/attention_ops.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/fuse_loras.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/helpers.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/kernels.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/module_ops.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/primitives.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/registry.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/sd_ops.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/loader/sft_loader.py +0 -0
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/modality_tiling.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/common/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/common/normalization.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/disposable.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/model_protocol.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/adaln.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/attention.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/compiling.py +0 -0
- {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
- {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
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/modality.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/model.py +0 -0
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/ops.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/rope.py +0 -0
- {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
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/transformer/transformer.py +0 -0
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/__init__.py +0 -0
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/model/upsampler/model.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/__init__.py +0 -0
- {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
- {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
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/gemma/loader.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/sharded_sd.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/transformer/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/transformer/attention.py +0 -0
- {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
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/multigpu/vae/__init__.py +0 -0
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/blockwise/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/blockwise/_impl.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/fp8_cast.py +0 -0
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/convert.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/fuse.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/linear.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/prequant.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/nvfp4/types.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/quantization/policy.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/text_encoders/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/tiling.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/tools.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/types.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_core/utils.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/a2vid_two_stage.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/dfr_layout.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/dfr_pipeline.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/distilled.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/distilled_mgpu.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/dubit.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/hdr_ic_lora.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/ic_lora.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/iclora_utils.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/keyframe_interpolation.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/_broadcast.py +0 -0
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/controller.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/delegating_builder.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/fleet.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/gemma_builders.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/nccl_groups.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/runner.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/sp_builder.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/tdp_builder.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/vae_builders.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/multigpu/weight_tracker.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/retake.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/t2a_one_stage.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_one_stage.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/ti2vid_two_stages.py +0 -0
- {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
- {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
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/args.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/blocks.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/constants.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/denoisers.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/gpu_model.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/helpers.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/model_paths.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/quantization_factory.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/res2s.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/samplers.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/ltx25/vendor/ltx_pipelines/utils/types.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/adaln.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/keys.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/load.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/lora_keys.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/pipeline.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/provider.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/requirements.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/runner.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vae_keys.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/autoencoder_kl_minimax_h3.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/autoencoder_kl_minimax_h3_audio.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/before_denoise.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/before_encoder.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/decoders.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/denoise.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/encoders.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/modular_blocks_minimax_h3.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/modular_pipeline.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/packing.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/packing_ref2va.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/scheduling_minimax_h3.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/minimaxh3/vendor/transformer_minimax_h3.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/offload.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/pipeline_runtime.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/prepared.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/preprocess/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/preprocess/requirements.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/preprocess/runner.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/references.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/registry_index.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/requirements.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/sampling.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/training/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/training/runner.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/trainingreqs.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/video_params.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/zimage/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/zimage/primitives.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/zimage/provider.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/zimage/requirements.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/models/zimage/runner.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/parallel/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/parallel/config.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/parallel/group.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/parallel/launch.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/parallel/protocol.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/parallel/registry.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/parallel/worker.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/runtime/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/runtime/context.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/runtime/file_store.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/runtime/progress.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/runtime/run.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/runtime/store.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/runtime/video_encode.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/sampling/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/sampling/batch.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/app.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/assets.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/bootstrap.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/frontend.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/manager.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/rpc.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/run_store.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/server/serialize.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/activity.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/assets.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/characters.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/config.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/fal.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/frames.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/generation.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/graph_build.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/handlers.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/image_meta.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/models.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/moodboard.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/peaks.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/recipe.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/schema.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/store.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/system_stats.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/timeline/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/timeline/compose.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/timeline/ffmpeg.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/timeline/render.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/timeline/resolve.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/studio/training_store.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/takes.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/__init__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/__main__.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/arch.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/cache.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/caption.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/h3.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/ltx25.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/models.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/precache_store.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/protocol.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/src/inline_core/training/trainer.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/conftest.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/helpers.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/reference/lookalike_faces.json +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_cache.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_catalog.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_character_nodes.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_character_requirements.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_characters_apply.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_characters_encode.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_characters_library.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_characters_rpc.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_characters_scoring.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_characters_wiring.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_charfile.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_checkpoint.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_clip_grid_parity.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_config.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_device_detect.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_encoder_parking.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_executor.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_extension_api.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_extension_install.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_extension_manifest.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_extension_resolve.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_extension_scanner.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_extension_spine.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_extension_state.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_file_store.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_flux2_controlnet.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_flux2_folder.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_flux2_resolve.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_flux2_runner.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_flux2_training.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_flux2_variants.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_frontend_serving.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_hidden_nodes.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_keymap.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_krea2_convert.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_krea2_depth_control.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_krea2_requirements.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_krea2_runner.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_loader_runners.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_loaders.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_lora.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_lora_download.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_ltx25_lora_keys.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_ltx25_nodes.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_ltx25_requirements.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_ltx25_training.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_ltx25_wired_refs.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_manager_queue.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_memory_policy.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_minimaxh3_adaln.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_minimaxh3_keys.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_minimaxh3_load.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_minimaxh3_lora_keys.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_minimaxh3_nodes.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_minimaxh3_training.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_model_download_queue.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_model_registry_index.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_model_requirements.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_offload_prepared.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_output_kind_contract.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_parallel_group.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_pipeline_cache.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_precache_store.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_primitives.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_recipe.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_references.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_rpc_bridge.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_run_store.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_sampling.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_schema.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_server.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_staged_residency.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_activity.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_assets.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_fal.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_frames.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_generation.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_graph_build.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_models.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_moodboard.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_multi_reference.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_node_size.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_peaks.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_rpc.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_schema.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_store.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_timeline.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_studio_training.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_take_bytes.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_topo.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_training_arch.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_training_dataset.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_training_models.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_training_nodes.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_training_requirements.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_training_resolve.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_training_snapshots.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_validate.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_video_encode.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_video_params.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_webui_install.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_xfuser_sampler.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_zimage_primitives.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_zimage_resolve.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/tests/test_zimage_runner.py +0 -0
- {inline_core-1.3.0 → inline_core-1.3.1}/uv.lock +0 -0
|
@@ -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
|
|
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 =
|
|
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
|
-
|
|
56
|
-
|
|
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=(
|
|
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
|
|
138
|
-
metadata_file = None
|
|
181
|
+
names: list[str] = []
|
|
182
|
+
total, metadata_file = 0, None
|
|
139
183
|
for sibling in info.siblings or []:
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
if
|
|
144
|
-
|
|
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
|
|
156
|
-
metadata_file = None
|
|
157
|
-
for entry in
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
172
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
189
|
+
name = relative(source)
|
|
190
|
+
if asset is None or name in references:
|
|
190
191
|
continue
|
|
191
|
-
entry = metadata.get(
|
|
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(
|
|
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":
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
374
|
-
|
|
375
|
-
|
|
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
|
-
|
|
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
|