Storyboard: carry the motion of the previous shot (its clip as Video 1 for the video model)

This commit is contained in:
gator 2026-09-23 12:59:21 +00:00
parent 03cc1ec3c9
commit 47bc53862e

View file

@ -1502,7 +1502,11 @@
return '<div class="sceneshare" style="margin:4px 0 8px"><b style="color:var(--ink)">Opening picture</b>' return '<div class="sceneshare" style="margin:4px 0 8px"><b style="color:var(--ink)">Opening picture</b>'
+ '<button type="button" class="btn small ghost" data-useframe="first|' + esc(s.id) + '"' + (p.opening_url ? '' : ' disabled title="Shot ' + esc(p.id) + ' has no picture yet"') + '>Same as shot ' + esc(p.id) + '\'s first frame</button>' + '<button type="button" class="btn small ghost" data-useframe="first|' + esc(s.id) + '"' + (p.opening_url ? '' : ' disabled title="Shot ' + esc(p.id) + ' has no picture yet"') + '>Same as shot ' + esc(p.id) + '\'s first frame</button>'
+ '<button type="button" class="btn small ghost" data-useframe="last|' + esc(s.id) + '"' + (p.clip_url ? '' : ' disabled title="Shot ' + esc(p.id) + ' has not been filmed yet"') + '>Same as shot ' + esc(p.id) + '\'s last frame</button>' + '<button type="button" class="btn small ghost" data-useframe="last|' + esc(s.id) + '"' + (p.clip_url ? '' : ' disabled title="Shot ' + esc(p.id) + ' has not been filmed yet"') + '>Same as shot ' + esc(p.id) + '\'s last frame</button>'
+ from + '</div>'; + from
+ ' <span style="margin-left:10px"><b style="color:var(--ink)">Motion</b> '
+ (s.motion_from ? '<span class="tiny">follows shot ' + esc(s.motion_from.shot) + '\'s clip (direction of travel, camera side, pace)</span> <button type="button" class="btn small ghost" data-useframe="nomotion|' + esc(s.id) + '">stop following</button>'
: '<button type="button" class="btn small ghost" data-useframe="motion|' + esc(s.id) + '"' + (p.clip_url ? '' : ' disabled title="Shot ' + esc(p.id) + ' has not been filmed yet"') + ' title="The previous shot\'s clip is sent to the video model as a reference for direction of travel, camera side and pace">Carry the motion of shot ' + esc(p.id) + '</button>')
+ '</span></div>';
} }
function shotHtml(s, voice) { function shotHtml(s, voice) {
@ -1714,7 +1718,7 @@
var uf = el.getAttribute("data-useframe").split("|"); var uf = el.getAttribute("data-useframe").split("|");
el.disabled = true; el.disabled = true;
r = await act("use_frame", { draft_id: CUR, shot_id: uf[1], frame: uf[0] }); r = await act("use_frame", { draft_id: CUR, shot_id: uf[1], frame: uf[0] });
if (r) { showMsg("msg", "Shot " + uf[1] + " opens on the " + r.frame + " frame of shot " + r.from + (r.frame === "last" ? " - taking the frame from the clip, a few seconds." : "."), "ok"); await refresh(); } if (r) { showMsg("msg", r.frame === "motion" ? "Shot " + uf[1] + " will follow the motion of shot " + r.from + "'s clip when it is filmed." : r.frame === "nomotion" ? "Shot " + uf[1] + " no longer follows a clip." : "Shot " + uf[1] + " opens on the " + r.frame + " frame of shot " + r.from + (r.frame === "last" ? " - taking the frame from the clip, a few seconds." : "."), "ok"); await refresh(); }
else el.disabled = false; else el.disabled = false;
return; return;
} }