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