From f20ae8231e2a2273b48b2a0f3956a0464c6d924d Mon Sep 17 00:00:00 2001
From: gator
Date: Mon, 21 Sep 2026 01:56:43 +0000
Subject: [PATCH] Storyboard: film prices from the engine's real per-second
rate
---
trailer.html | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/trailer.html b/trailer.html
index 921697a..2e81f43 100644
--- a/trailer.html
+++ b/trailer.html
@@ -405,6 +405,11 @@
+ '';
}
+ // What a take really costs: the engine bills by the second (7 cents), five
+ // seconds at least, and a speaking shot runs its line plus the slate words.
+ function filmCost(x) { return Math.max(5, Math.ceil((Number(x.edit_seconds) || 5) + 1.5)) * 0.07; }
+ function filmCostAll(list) { return list.reduce(function (a, x) { return a + filmCost(x); }, 0); }
+
function partsHtml(draft) {
var parts = DRAFTS.filter(function (d) { return /^part-/.test(String(d.writer)); });
var n = (PKG.shots || []).length;
@@ -583,6 +588,7 @@
// A clip filmed from a picture or words that have since changed is not the shot any more.
var unfilmed = shots.filter(function (s) { return !s.clip_url || s.clip_stale; }).length;
var changed = shots.filter(function (s) { return s.clip_url && s.clip_stale; }).length;
+ var unfilmedUsd = filmCostAll(shots.filter(function (s) { return !s.clip_url || s.clip_stale; }));
var filmed = shots.length - unfilmed;
var imgs = boardImages(shots, cast);
var s = String(meta.draw_state || "");
@@ -662,7 +668,7 @@
if (unfilmed && !undrawn)
out.push('');
+ + ' · about $' + unfilmedUsd.toFixed(2) + '');
if (filmed)
out.push('');
@@ -1104,6 +1110,7 @@
var checking = ps && ps !== "ready";
var reelReady = String(PKG.reel_state || "") === "ready";
var unfilmed = shots.filter(function (x) { return !x.clip_url || x.clip_stale; }).length;
+ var unfilmedUsd2 = filmCostAll(shots.filter(function (x) { return !x.clip_url || x.clip_stale; }));
var objections = String((DRAFTNOW || {}).problems || "").split("\n").filter(Boolean).length;
var price = function (n) { return "$" + n.toFixed(2); };
@@ -1146,7 +1153,7 @@
if (s3.done && unfilmed)
s6.btn = '';
+ + ' \u00b7 ' + price(unfilmedUsd2) + '';
steps.push(s6);
var nowSet = false;
@@ -1438,7 +1445,7 @@
+ ''
+ (s.opening_url ? '' : '')
+ + (s.clip_url ? 'Film it again' : 'Film this shot') + ' · about $' + filmCost(s).toFixed(2) + '' : '')
+ (s.clip_url && s.take_url ? '' : '')
+ chkHtml + eyeHtml
@@ -1471,7 +1478,7 @@
+ (s.film_unchanged && !s.filming ? '
Nothing that reaches the camera has changed since '
+ 'the last take - same pictures, same words, same voices - so it was not filmed again and nothing '
+ 'was charged.
' : '')
+ + '">Film another take anyway · about $' + filmCost(s).toFixed(2) + '