Builds a ShotPlan-format multishot prompt (global preamble + "Shot N: <modifier> <size> <move> <action>" blocks) plus the ordered, gray-padded reference batch that the multishot strata LoRA expects. No new conditioning node is needed: LTX Identity Transfer already assigns seg_value = (source_id + i) * phase_scale and strata_slot = i over the image batch, so source_id=2 with layout="strata" over 4 refs reproduces the trained convention (source_id 2/3/4/5 on slots 0/1/2/3). Batch order is shot order -- the LoRA was trained with shuffle_reference_slots=false. Unused slots get a flat RGB-128 frame, matching the dataset's blank.jpg placeholder. The dropdown vocabularies are extracted from the 12,470 "Shot N:" headers of Pensioner/shotplan train_meta_16fps.json (the span between "Shot N:" and the start of the action sentence), covering 98% of size terms and 97% of move terms. Modifiers (over-the-shoulder, low/high angle, POV) are a separate axis that combines with a size rather than replacing it, as in the source captions. Bump version to 1.21.1. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
76 lines
3.9 KiB
Python
76 lines
3.9 KiB
Python
from .nodes import NODE_CLASS_MAPPINGS as BFS_NODE_CLASS_MAPPINGS
|
|
from .nodes import NODE_DISPLAY_NAME_MAPPINGS as BFS_NODE_DISPLAY_NAME_MAPPINGS
|
|
from .ltxv_editanything import NODE_CLASS_MAPPINGS as LTXV_EA_NODE_CLASS_MAPPINGS
|
|
from .ltxv_editanything import NODE_DISPLAY_NAME_MAPPINGS as LTXV_EA_NODE_DISPLAY_NAME_MAPPINGS
|
|
from .headswap_node import NODE_CLASS_MAPPINGS as HEADSWAP_NODE_CLASS_MAPPINGS
|
|
from .headswap_node import NODE_DISPLAY_NAME_MAPPINGS as HEADSWAP_NODE_DISPLAY_NAME_MAPPINGS
|
|
from .anime2real_node import NODE_CLASS_MAPPINGS as A2R_NODE_CLASS_MAPPINGS
|
|
from .anime2real_node import NODE_DISPLAY_NAME_MAPPINGS as A2R_NODE_DISPLAY_NAME_MAPPINGS
|
|
from .amv_guide_node import NODE_CLASS_MAPPINGS as AMV_NODE_CLASS_MAPPINGS
|
|
from .amv_guide_node import NODE_DISPLAY_NAME_MAPPINGS as AMV_NODE_DISPLAY_NAME_MAPPINGS
|
|
from .ltx_identity_overlap import NODE_CLASS_MAPPINGS as IDT_NODE_CLASS_MAPPINGS
|
|
from .ltx_identity_overlap import NODE_DISPLAY_NAME_MAPPINGS as IDT_NODE_DISPLAY_NAME_MAPPINGS
|
|
from .ltx_multiple_controls import NODE_CLASS_MAPPINGS as MC_NODE_CLASS_MAPPINGS
|
|
from .ltx_multiple_controls import NODE_DISPLAY_NAME_MAPPINGS as MC_NODE_DISPLAY_NAME_MAPPINGS
|
|
from .color_mask_node import NODE_CLASS_MAPPINGS as CM_NODE_CLASS_MAPPINGS
|
|
from .color_mask_node import NODE_DISPLAY_NAME_MAPPINGS as CM_NODE_DISPLAY_NAME_MAPPINGS
|
|
try:
|
|
from .ltx_identity_multiangle import NODE_CLASS_MAPPINGS as MA_NODE_CLASS_MAPPINGS
|
|
from .ltx_identity_multiangle import NODE_DISPLAY_NAME_MAPPINGS as MA_NODE_DISPLAY_NAME_MAPPINGS
|
|
except Exception as _e: # noqa
|
|
print(f"[BFSNodes] LTX Identity Multiple Angles node not loaded: {_e!r}")
|
|
MA_NODE_CLASS_MAPPINGS, MA_NODE_DISPLAY_NAME_MAPPINGS = {}, {}
|
|
try:
|
|
from .ltx_identity_gemma_vision import NODE_CLASS_MAPPINGS as GV_NODE_CLASS_MAPPINGS
|
|
from .ltx_identity_gemma_vision import NODE_DISPLAY_NAME_MAPPINGS as GV_NODE_DISPLAY_NAME_MAPPINGS
|
|
except Exception as _e: # noqa
|
|
print(f"[BFSNodes] LTX Identity Gemma-Vision node not loaded: {_e!r}")
|
|
GV_NODE_CLASS_MAPPINGS, GV_NODE_DISPLAY_NAME_MAPPINGS = {}, {}
|
|
try:
|
|
from .multiref_sheet_node import NODE_CLASS_MAPPINGS as MRS_NODE_CLASS_MAPPINGS
|
|
from .multiref_sheet_node import NODE_DISPLAY_NAME_MAPPINGS as MRS_NODE_DISPLAY_NAME_MAPPINGS
|
|
except Exception as _e: # noqa
|
|
print(f"[BFSNodes] Multi-Ref Sheet Builder node not loaded: {_e!r}")
|
|
MRS_NODE_CLASS_MAPPINGS, MRS_NODE_DISPLAY_NAME_MAPPINGS = {}, {}
|
|
try:
|
|
from .ltx_multishot_prompt import NODE_CLASS_MAPPINGS as MSP_NODE_CLASS_MAPPINGS
|
|
from .ltx_multishot_prompt import NODE_DISPLAY_NAME_MAPPINGS as MSP_NODE_DISPLAY_NAME_MAPPINGS
|
|
except Exception as _e: # noqa
|
|
print(f"[BFSNodes] LTX Multishot Prompt node not loaded: {_e!r}")
|
|
MSP_NODE_CLASS_MAPPINGS, MSP_NODE_DISPLAY_NAME_MAPPINGS = {}, {}
|
|
# CAN / AdaLN node disabled: empirically the AdaLN modulation degrades the video (the identity
|
|
# gain came from the projector + LoRA, not the CAN). Kept the file but not registered.
|
|
CAN_NODE_CLASS_MAPPINGS, CAN_NODE_DISPLAY_NAME_MAPPINGS = {}, {}
|
|
|
|
NODE_CLASS_MAPPINGS = {
|
|
**GV_NODE_CLASS_MAPPINGS,
|
|
**CAN_NODE_CLASS_MAPPINGS,
|
|
**BFS_NODE_CLASS_MAPPINGS,
|
|
**LTXV_EA_NODE_CLASS_MAPPINGS,
|
|
**HEADSWAP_NODE_CLASS_MAPPINGS,
|
|
**A2R_NODE_CLASS_MAPPINGS,
|
|
**AMV_NODE_CLASS_MAPPINGS,
|
|
**IDT_NODE_CLASS_MAPPINGS,
|
|
**MC_NODE_CLASS_MAPPINGS,
|
|
**MA_NODE_CLASS_MAPPINGS,
|
|
**MRS_NODE_CLASS_MAPPINGS,
|
|
**CM_NODE_CLASS_MAPPINGS,
|
|
**MSP_NODE_CLASS_MAPPINGS,
|
|
}
|
|
|
|
NODE_DISPLAY_NAME_MAPPINGS = {
|
|
**GV_NODE_DISPLAY_NAME_MAPPINGS,
|
|
**CAN_NODE_DISPLAY_NAME_MAPPINGS,
|
|
**BFS_NODE_DISPLAY_NAME_MAPPINGS,
|
|
**LTXV_EA_NODE_DISPLAY_NAME_MAPPINGS,
|
|
**HEADSWAP_NODE_DISPLAY_NAME_MAPPINGS,
|
|
**A2R_NODE_DISPLAY_NAME_MAPPINGS,
|
|
**AMV_NODE_DISPLAY_NAME_MAPPINGS,
|
|
**IDT_NODE_DISPLAY_NAME_MAPPINGS,
|
|
**MC_NODE_DISPLAY_NAME_MAPPINGS,
|
|
**MA_NODE_DISPLAY_NAME_MAPPINGS,
|
|
**MRS_NODE_DISPLAY_NAME_MAPPINGS,
|
|
**CM_NODE_DISPLAY_NAME_MAPPINGS,
|
|
**MSP_NODE_DISPLAY_NAME_MAPPINGS,
|
|
}
|