- Warp only north cylindrically (sunrise completely unmodified)
- Focal-length grid search picks the best phase-correlation alignment
- Soft validity mask (31x31 erosion) fades out black corners of the warp
- Per-channel colour/exposure match: north's treeline strip mean is scaled
to match sunrise's, removing the visible sky-colour seam between cameras
- Corrected overlap blend: invalid north pixels fall back to sunrise
(s_weight = max(alpha, 1-validity)) instead of showing black
- Auto-crops left black-corner columns from the final canvas
https://claude.ai/code/session_01C4jbd3waXG3eKZYbGUjLUQ
North is projected onto a cylinder so its right edge curves naturally into
sunrise's left edge, giving a continuous panoramic sweep from North to East.
cyl-f1920-preview.jpg — f=1920 px (~90° HFOV): most natural perspective
cyl-f1550-preview.jpg — f=1550 px (~105° HFOV): more pronounced curve
stitch-cameras.py updated to use cylindrical projection. Focal length is
a tunable argv[4]; refine once the user confirms which curve looks right.
The 36-second inter-shot gap causes cloud drift at the seam — live video
frames captured simultaneously will not have this artefact.
https://claude.ai/code/session_01C4jbd3waXG3eKZYbGUjLUQ
Phase-correlation on the treeline/horizon band (rows 70-90%) found:
tx = -3324 px (north is 3324 px to the left of sunrise)
ty = -85 px (north camera is 85 px higher — slight tilt difference)
overlap = 516 px wide, feather-blended with a horizontal gradient
Result in images/stitch-preview/north-sunrise-aligned-preview.jpg:
7164x2075 px panorama with continuous horizon and treeline.
Cloud "V" at seam is a 36-second inter-shot artefact only; live video
frames captured simultaneously will have no such discontinuity.
stitch-cameras.py: accepts tx/ty overrides as argv[4]/argv[5] so the
offsets can be tuned without code changes.
https://claude.ai/code/session_01C4jbd3waXG3eKZYbGUjLUQ
- images/stitch-preview/north-sunrise-hstack.jpg:
naive side-by-side preview of the two skycams at 14:29 on 2026-04-17
- images/stitch-preview/feature-matches-debug.jpg:
close-up of overlap region (right 40% of north × left 40% of sunrise)
with ORB Lowe-ratio matches drawn — 39 candidates, RANSAC survives only
4 inliers because the 90° perspective offset invalidates a similarity
transform. Overlap IS present (trees, houses, power poles visible in
both) but full homography needs more/better tie points.
- stitch-cameras.py: reusable script that generates both previews plus a
similarity-transform .txt for reuse in ffmpeg filter chains once we
have enough matches (or manual tie-points).
https://claude.ai/code/session_01C4jbd3waXG3eKZYbGUjLUQ