Add the photo-anchored variant pass with night and overcast facade frames
Full build / Import + headless tests (push) Successful in 40s
Full build / Full desktop build + optional release (push) Skipped

This commit is contained in:
zwitschi committed 2026-11-03 15:04:20 +01:00
1 parent 6e04c59589
commit ad91e71eeb
9 files changed
+183 -2

No files matched your search

+57
View File
@@ -1,4 +1,5 @@
import json
import re
import tempfile
import unittest
from unittest import mock
@@ -245,3 +246,59 @@ class RealismTests(unittest.TestCase):
if __name__ == "__main__":
unittest.main()
class AnchorTests(unittest.TestCase):
ROOT = Path(sc.__file__).resolve().parent.parent
def test_treatment_prompt_carries_context_suffix_and_clause(self):
prompt = sc._anchor_treatment_prompt("A 1920s masonic facade.", "night")
self.assertTrue(prompt.startswith("A 1920s masonic facade."))
self.assertIn("keep the building", prompt.lower())
self.assertIn("Restage the scene:", prompt)
self.assertIn("practical lights", prompt)
def test_unknown_treatment_names_are_rejected(self):
with self.assertRaises(SystemExit):
sc._anchor_treatment_prompt("c", "underwater")
def test_name_derivation_strips_the_capture_date(self):
reference = {"path": self.ROOT / "x" / "some-facade-2009-10-27",
"licence": "CC0", "page": "", "checked": True}
# exercised through cmd_anchor's stem logic via a tiny local copy
import re as _re
stem = _re.sub(r"-[0-9]{4}-[0-9]{2}-[0-9]{2}$", "",
"el-capitan-facade-day-wikimedia-2009-10-27")
self.assertEqual(stem, "el-capitan-facade-day-wikimedia")
def test_cmd_anchor_generates_each_treatment_with_provenance(self):
reference = {"path": self.ROOT / "docs/screens/refs/hollywood/"
"el-capitan-facade-day-wikimedia-2009-10-27.jpg",
"licence": "CC BY 2.0", "page": "https://commons/x",
"checked": True}
class FakeImage:
def convert(self, mode):
return Image.new("RGB", (1600, 900))
with tempfile.TemporaryDirectory() as tmp:
out_dir = Path(tmp) / "frames"
with mock.patch.object(sc, "_reference_source", return_value=reference), \
mock.patch.object(sc.generate_textures, "generate_image",
return_value=FakeImage()) as mocked, \
mock.patch.object(sc, "next_free_path",
side_effect=lambda p: p), \
mock.patch.object(sc, "_rel", side_effect=str):
args = mock.Mock(reference="r", reference_unchecked=False,
context="A facade.", treatments="day,night",
out_dir=str(out_dir), model="m",
request_size=1536)
args.name = "" # `name` is reserved on Mock; set it explicitly
self.assertEqual(sc.cmd_anchor(args), 0)
stems = [c.args[0] for c in mocked.call_args_list]
self.assertEqual(len(stems), 2)
for treatment, call in zip(("day", "night"), mocked.call_args_list):
self.assertIn("Restage the scene:", call.args[0])
self.assertEqual(call.kwargs["reference_path"],
reference["path"])
self.assertTrue((out_dir /
f"el_capitan_facade_day_wikimedia_{treatment}.png")
.exists())