diff --git a/components/studio2/Bench.vue b/components/studio2/Bench.vue index 4e07389..bdc4553 100644 --- a/components/studio2/Bench.vue +++ b/components/studio2/Bench.vue @@ -84,9 +84,21 @@ const sourceAsset=computed(()=>form.startClipId?clips.value.find((c:any)=>c.id== const sourceSize=computed(()=>measured[sourceAsset.value?.id] || sourceAsset.value) const resolvedSize=computed(()=>resolveSize(form.settings.aspect,sourceSize.value)) watch(()=>sourceAsset.value?.id,id=>{const asset=sourceAsset.value;if(!import.meta.client||!asset||measured[id])return;const media=asset.id===form.startClipId?document.createElement('video'):new Image();if(media.tagName==='VIDEO')(media as HTMLVideoElement).preload='metadata';const done=()=>{measured[asset.id]={width:(media as HTMLVideoElement).videoWidth||(media as HTMLImageElement).naturalWidth,height:(media as HTMLVideoElement).videoHeight||(media as HTMLImageElement).naturalHeight}};media.addEventListener(media.tagName==='VIDEO'?'loadedmetadata':'load',done,{once:true});media.src=media.tagName==='VIDEO'?`/api/library/clips/${asset.id}/video`:stillUrl(asset.id)}) -function chooseTask(task:string){if(task==='extend'){Object.assign(form,extendSelected(form,selected.value?.kind==='clip'?selected.value:null,useRuntimeConfig().public.studio==='xaigen'));return}const was=video.value;form.mode=task;form.startClipId='';if(video.value!==was){form.engine=video.value?'minimax':'flux';form.settings.steps=video.value?8:24;form.settings.cfg=video.value?1.5:4}} -function chooseClip(id:string){if(!id){form.startClipId='';return}const clip=clips.value.find((c:any)=>c.id===id);if(clip)Object.assign(form,bindClip(form,clip,useRuntimeConfig().public.studio==='xaigen'))} -function selectOutput(item:any){selected.value=item} +function chooseTask(task:string){ + if(task==='extend'){ + form.mode='extend' + form.engine=xaigen && form.engine==='ltx'?'ltx':'minimax' + const clip=selected.value?.kind==='clip'?selected.value:clips.value.find((c:any)=>c.id===form.startClipId) + if(clip?.id){ + try{Object.assign(form,bindClip(form,clip,xaigen))} + catch(e:any){error.value=e?.message||'Could not copy clip settings. Previous clip is still bound.';form.startClipId=clip.id} + } + return + } + const was=video.value;form.mode=task;form.startClipId='';if(video.value!==was){form.engine=video.value?'minimax':'flux';form.settings.steps=video.value?8:24;form.settings.cfg=video.value?1.5:4} +} +function chooseClip(id:string){if(!id){form.startClipId='';return}const clip=clips.value.find((c:any)=>c.id===id);if(clip){try{Object.assign(form,bindClip(form,clip,xaigen))}catch(e:any){error.value=e?.message||'Could not copy clip settings.';form.startClipId=clip.id;form.mode='extend';form.engine=xaigen && form.engine==='ltx'?'ltx':'minimax'}}} +function selectOutput(item:any){selected.value=item;if(form.mode==='extend' && item?.kind==='clip')chooseClip(item.id)} function sourceChanged(){Object.assign(form,changeSource(form))} function restore(item:any){Object.assign(form,restoreAll(form,item,xaigen));form.guides=form.guides||[];batchText.value=''} function focusJob(job:any){selectOutput(job.outputs?.at(-1)||null)}