@@ -2869,6 +2869,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
28692869 "runware:190@1 (Ovi)" ,
28702870 ] ,
28712871 "Runway" : [
2872+ "runway:aleph@2.0 (Runway Aleph 2.0)" ,
28722873 "runway:2@1 (Runway Aleph)" ,
28732874 "runway:1@1 (Runway Gen-4 Turbo)" ,
28742875 "runway:1@2 (Runway Gen-4.5)" ,
@@ -2992,6 +2993,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
29922993 "lightricks:ltx@2.3" : { "width" : 1920 , "height" : 1080 } ,
29932994 "lightricks:ltx@2.3-fast" : { "width" : 1920 , "height" : 1080 } ,
29942995 "runware:190@1" : { "width" : 0 , "height" : 0 } ,
2996+ "runway:aleph@2.0" : { "width" : 0 , "height" : 0 } ,
29952997 "runway:2@1" : { "width" : 1280 , "height" : 720 } ,
29962998 "runway:1@1" : { "width" : 1280 , "height" : 720 } ,
29972999 "runway:1@2" : { "width" : 1280 , "height" : 720 } ,
@@ -3092,6 +3094,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
30923094 "lightricks:ltx@2.3" : "1080p" ,
30933095 "lightricks:ltx@2.3-fast" : "1080p" ,
30943096 "runware:190@1" : null , // No resolution support
3097+ "runway:aleph@2.0" : null , // Output ratio matches input video
30953098 "runway:2@1" : "720p" ,
30963099 "runway:1@1" : "720p" ,
30973100 "runway:1@2" : "720p" ,
@@ -4958,6 +4961,82 @@ function audioInferenceSpeechVoicesToggleHandler(voicesNode) {
49584961 }
49594962}
49604963
4964+ function videoInputsFrameToggleHandler ( frameImagesNode ) {
4965+ if ( ! frameImagesNode ?. widgets ) return ;
4966+ if ( frameImagesNode . _videoInputsFrameToggleHandlerRegistered ) return ;
4967+ frameImagesNode . _videoInputsFrameToggleHandlerRegistered = true ;
4968+
4969+ function toggleWidgetState ( useWidget , paramWidget , paramName ) {
4970+ if ( ! useWidget || ! paramWidget ) return ;
4971+
4972+ function toggleEnabled ( ) {
4973+ const enabled = useWidget . value === true ;
4974+
4975+ if ( paramWidget . inputEl ) {
4976+ paramWidget . inputEl . disabled = ! enabled ;
4977+ paramWidget . inputEl . style . opacity = enabled ? "1" : "0.5" ;
4978+ paramWidget . inputEl . style . cursor = enabled ? "text" : "not-allowed" ;
4979+ paramWidget . inputEl . readOnly = ! enabled ;
4980+ }
4981+
4982+ if ( paramWidget . options && paramWidget . options . element ) {
4983+ paramWidget . options . element . disabled = ! enabled ;
4984+ paramWidget . options . element . style . opacity = enabled ? "1" : "0.5" ;
4985+ paramWidget . options . element . style . pointerEvents = enabled ? "auto" : "none" ;
4986+ }
4987+
4988+ paramWidget . disabled = ! enabled ;
4989+
4990+ if ( ! paramWidget . inputEl && paramName ) {
4991+ const nodeElement = frameImagesNode . htmlElements ?. widgetsContainer || frameImagesNode . htmlElements ;
4992+ if ( nodeElement ) {
4993+ const input = nodeElement . querySelector ( `input[name="${ paramName } "], textarea[name="${ paramName } "], select[name="${ paramName } "]` ) ;
4994+ if ( input ) {
4995+ input . disabled = ! enabled ;
4996+ input . style . opacity = enabled ? "1" : "0.5" ;
4997+ input . style . cursor = enabled ? "text" : "not-allowed" ;
4998+ input . readOnly = ! enabled ;
4999+ if ( input . tagName === "SELECT" ) {
5000+ input . style . pointerEvents = enabled ? "auto" : "none" ;
5001+ }
5002+ }
5003+ }
5004+ }
5005+
5006+ frameImagesNode . setDirtyCanvas ( true ) ;
5007+ }
5008+
5009+ appendWidgetCB ( useWidget , ( ) => {
5010+ setTimeout ( toggleEnabled , 50 ) ;
5011+ } ) ;
5012+
5013+ setTimeout ( toggleEnabled , 100 ) ;
5014+ }
5015+
5016+ function initializeHandler ( ) {
5017+ if ( ! frameImagesNode . widgets || frameImagesNode . widgets . length === 0 ) {
5018+ setTimeout ( initializeHandler , 100 ) ;
5019+ return ;
5020+ }
5021+
5022+ for ( let i = 1 ; i <= 4 ; i ++ ) {
5023+ const useFrameWidget = frameImagesNode . widgets . find ( ( w ) => w && w . name === `useFrame${ i } ` ) ;
5024+ const frameWidget = frameImagesNode . widgets . find ( ( w ) => w && w . name === `frame${ i } position` ) ;
5025+ const useTimestampWidget = frameImagesNode . widgets . find ( ( w ) => w && w . name === `useTimestamp${ i } ` ) ;
5026+ const timestampWidget = frameImagesNode . widgets . find ( ( w ) => w && w . name === `timestamp${ i } ` ) ;
5027+
5028+ if ( useFrameWidget && frameWidget ) {
5029+ toggleWidgetState ( useFrameWidget , frameWidget , `frame${ i } position` ) ;
5030+ }
5031+ if ( useTimestampWidget && timestampWidget ) {
5032+ toggleWidgetState ( useTimestampWidget , timestampWidget , `timestamp${ i } ` ) ;
5033+ }
5034+ }
5035+ }
5036+
5037+ initializeHandler ( ) ;
5038+ }
5039+
49615040function referenceVideosToggleHandler ( referenceVideosNode ) {
49625041 if ( ! referenceVideosNode ?. widgets ) return ;
49635042
@@ -5097,6 +5176,7 @@ export {
50975176 videoAdvancedFeatureInputsToggleHandler ,
50985177 audioInferenceInputsToggleHandler ,
50995178 audioInferenceSpeechVoicesToggleHandler ,
5179+ videoInputsFrameToggleHandler ,
51005180 referenceVideosToggleHandler ,
51015181} ;
51025182
0 commit comments