diff --git a/components/studio2/PromptControls.vue b/components/studio2/PromptControls.vue index 20ee753..b6ae571 100644 --- a/components/studio2/PromptControls.vue +++ b/components/studio2/PromptControls.vue @@ -4,7 +4,8 @@
-
+
+
@@ -17,6 +18,7 @@ import {cameraMoves,soundscapeOptions,normalizeBeat,toggleMove} from '~/shared/studio2/prompt.mjs' const model=defineModel({required:true}),active=ref(0) const current=computed(()=>model.value.cameraBeats[active.value]) +const isHold=computed(()=>!!current.value?.moves?.includes?.('hold')) function addBeat(){const last=model.value.cameraBeats.at(-1);if(last?.durationSec==null&&last)last.durationSec=2;model.value.cameraBeats.push(normalizeBeat());active.value=model.value.cameraBeats.length-1} function toggleSound(sound:string){const chips=model.value.soundscapeChips;model.value.soundscapeChips=chips.includes(sound)?chips.filter((s:string)=>s!==sound):[...chips,sound]} diff --git a/shared/studio2/prompt.mjs b/shared/studio2/prompt.mjs index 1b761b8..eaeef1a 100644 --- a/shared/studio2/prompt.mjs +++ b/shared/studio2/prompt.mjs @@ -28,7 +28,11 @@ export function sectionsFrom(value = {}) { export function compileSections(value) { const s = sectionsFrom(value) const camera = s.cameraBeats.length ? ['One continuous take.', ...s.cameraBeats.map((b,i) => { - const move = b.moves[0] === 'hold' ? 'hold the camera locked on a tripod' : b.moves.map(m=>m.replaceAll('-',' ')).join(' and ') + (b.moves.length > 1 ? ' simultaneously' : '') + const hold = b.moves[0] === 'hold' || b.moves.includes('hold') + if (hold) { + return `${i ? 'Then' : 'First'}, hold the camera locked on a tripod.` + } + const move = b.moves.map(m=>m.replaceAll('-',' ')).join(' and ') + (b.moves.length > 1 ? ' simultaneously' : '') const timing = b.durationSec == null ? 'through the end of the remaining clip' : i === 0 ? `for the first ${b.durationSec} seconds` : `for ${b.durationSec} seconds` return `${i ? 'Then' : 'First'}, ${move}, ${{subtle:'small',moderate:'medium',large:'large'}[b.amplitude]} amplitude, ${b.speed} speed, ${timing}.` }), 'No cuts. No new setup.'].join(' ') : s.camera