summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--txt/books.txt5
-rw-r--r--www/photo.causal.agency/.gitignore5
-rw-r--r--www/photo.causal.agency/0062/body1
-rw-r--r--www/photo.causal.agency/0062/date1
-rw-r--r--www/photo.causal.agency/0062/film1
-rw-r--r--www/photo.causal.agency/0062/lens1
-rw-r--r--www/photo.causal.agency/0063/body1
-rw-r--r--www/photo.causal.agency/0063/date1
-rw-r--r--www/photo.causal.agency/0063/film1
-rw-r--r--www/photo.causal.agency/0063/lens1
-rw-r--r--www/photo.causal.agency/0064/body1
-rw-r--r--www/photo.causal.agency/0064/date1
-rw-r--r--www/photo.causal.agency/0064/film1
-rw-r--r--www/photo.causal.agency/0064/lens1
-rw-r--r--www/photo.causal.agency/0065/body1
-rw-r--r--www/photo.causal.agency/0065/date1
-rw-r--r--www/photo.causal.agency/0065/film1
-rw-r--r--www/photo.causal.agency/0065/lens1
-rw-r--r--www/photo.causal.agency/0066/body1
-rw-r--r--www/photo.causal.agency/0066/date1
-rw-r--r--www/photo.causal.agency/0066/film1
-rw-r--r--www/photo.causal.agency/0066/lens1
-rw-r--r--www/photo.causal.agency/0067/body1
-rw-r--r--www/photo.causal.agency/0067/date1
-rw-r--r--www/photo.causal.agency/0067/film1
-rw-r--r--www/photo.causal.agency/0067/lens1
-rw-r--r--www/photo.causal.agency/0068/body1
-rw-r--r--www/photo.causal.agency/0068/date1
-rw-r--r--www/photo.causal.agency/0068/film1
-rw-r--r--www/photo.causal.agency/0068/lens1
-rw-r--r--www/photo.causal.agency/0069/body1
-rw-r--r--www/photo.causal.agency/0069/date1
-rw-r--r--www/photo.causal.agency/0069/film1
-rw-r--r--www/photo.causal.agency/0069/lens1
-rw-r--r--www/photo.causal.agency/0070/body1
-rw-r--r--www/photo.causal.agency/0070/date1
-rw-r--r--www/photo.causal.agency/0070/film1
-rw-r--r--www/photo.causal.agency/0070/lens1
-rw-r--r--www/photo.causal.agency/0071/body1
-rw-r--r--www/photo.causal.agency/0071/date1
-rw-r--r--www/photo.causal.agency/0071/film1
-rw-r--r--www/photo.causal.agency/0071/lens1
-rw-r--r--www/photo.causal.agency/0072/body1
-rw-r--r--www/photo.causal.agency/0072/date1
-rw-r--r--www/photo.causal.agency/0072/film1
-rw-r--r--www/photo.causal.agency/0072/lens1
-rw-r--r--www/photo.causal.agency/0073/body1
-rw-r--r--www/photo.causal.agency/0073/date1
-rw-r--r--www/photo.causal.agency/0073/film1
-rw-r--r--www/photo.causal.agency/0073/lens1
-rw-r--r--www/photo.causal.agency/0074/body1
-rw-r--r--www/photo.causal.agency/0074/date1
-rw-r--r--www/photo.causal.agency/0074/film1
-rw-r--r--www/photo.causal.agency/0074/lens1
-rw-r--r--www/photo.causal.agency/0075/body1
-rw-r--r--www/photo.causal.agency/0075/date1
-rw-r--r--www/photo.causal.agency/0075/film1
-rw-r--r--www/photo.causal.agency/0075/lens1
-rw-r--r--www/photo.causal.agency/0076/body1
-rw-r--r--www/photo.causal.agency/0076/date1
-rw-r--r--www/photo.causal.agency/0076/film1
-rw-r--r--www/photo.causal.agency/0076/lens1
-rw-r--r--www/photo.causal.agency/0077/body1
-rw-r--r--www/photo.causal.agency/0077/date1
-rw-r--r--www/photo.causal.agency/0077/film1
-rw-r--r--www/photo.causal.agency/0077/lens1
-rw-r--r--www/photo.causal.agency/0078/body1
-rw-r--r--www/photo.causal.agency/0078/date1
-rw-r--r--www/photo.causal.agency/0078/film1
-rw-r--r--www/photo.causal.agency/0078/lens1
-rw-r--r--www/photo.causal.agency/0079/body1
-rw-r--r--www/photo.causal.agency/0079/date1
-rw-r--r--www/photo.causal.agency/0079/film1
-rw-r--r--www/photo.causal.agency/0079/lens1
-rw-r--r--www/photo.causal.agency/0080/body1
-rw-r--r--www/photo.causal.agency/0080/date1
-rw-r--r--www/photo.causal.agency/0080/film1
-rw-r--r--www/photo.causal.agency/0080/lens1
-rw-r--r--www/photo.causal.agency/0080/note3
-rw-r--r--www/photo.causal.agency/2024-06-08/R1-07534-002A.txt10
-rw-r--r--www/photo.causal.agency/2024-06-12/R1-07671-017A.txt3
-rw-r--r--www/photo.causal.agency/2024-06-12/R1-07671-019A.txt4
-rw-r--r--www/photo.causal.agency/2024-06-12/R1-07671-022A.txt8
-rw-r--r--www/photo.causal.agency/2024-07-03/000099810023.txt6
-rw-r--r--www/photo.causal.agency/2024-08-29/000054970005.txt3
-rw-r--r--www/photo.causal.agency/2024-08-29/000054970006.txt2
-rw-r--r--www/photo.causal.agency/c35/body1
-rw-r--r--www/photo.causal.agency/c35/lens1
-rw-r--r--www/photo.causal.agency/fx-3/body1
-rw-r--r--www/photo.causal.agency/fx-3/lens1
-rw-r--r--www/photo.causal.agency/gear.html65
-rw-r--r--www/photo.causal.agency/generate.sh27
-rw-r--r--www/photo.causal.agency/mastodon.sh54
-rw-r--r--www/photo.causal.agency/trips.html27
94 files changed, 257 insertions, 45 deletions
diff --git a/txt/books.txt b/txt/books.txt
index bd31cc0d..ec739490 100644
--- a/txt/books.txt
+++ b/txt/books.txt
@@ -1,3 +1,8 @@
+[ 2025 ]
+
+  2. ★★☆ Nicola Griffith, Spear
+  1. ★★☆ Ruthanna Emrys, A Half-Built Garden
+
 [ 2024 ]
 
   2. ★☆☆ R. A. MacAvoy, Tea with the Black Dragon
diff --git a/www/photo.causal.agency/.gitignore b/www/photo.causal.agency/.gitignore
index 4e55d718..e6e1a830 100644
--- a/www/photo.causal.agency/.gitignore
+++ b/www/photo.causal.agency/.gitignore
@@ -1,3 +1,6 @@
-*.JPG
 *.jpg
+*.JPG
+app.json
+posted.txt
 static/
+token.json
diff --git a/www/photo.causal.agency/0062/body b/www/photo.causal.agency/0062/body
new file mode 100644
index 00000000..3676b877
--- /dev/null
+++ b/www/photo.causal.agency/0062/body
@@ -0,0 +1 @@
+Konica C35 Automatic
diff --git a/www/photo.causal.agency/0062/date b/www/photo.causal.agency/0062/date
new file mode 100644
index 00000000..26d2ee87
--- /dev/null
+++ b/www/photo.causal.agency/0062/date
@@ -0,0 +1 @@
+April 5-6, 2025
diff --git a/www/photo.causal.agency/0062/film b/www/photo.causal.agency/0062/film
new file mode 100644
index 00000000..24c56374
--- /dev/null
+++ b/www/photo.causal.agency/0062/film
@@ -0,0 +1 @@
+Kodak UltraMax 400
diff --git a/www/photo.causal.agency/0062/lens b/www/photo.causal.agency/0062/lens
new file mode 100644
index 00000000..3fef9a43
--- /dev/null
+++ b/www/photo.causal.agency/0062/lens
@@ -0,0 +1 @@
+Konica Hexanon 38mm f/2.8
diff --git a/www/photo.causal.agency/0063/body b/www/photo.causal.agency/0063/body
new file mode 100644
index 00000000..3676b877
--- /dev/null
+++ b/www/photo.causal.agency/0063/body
@@ -0,0 +1 @@
+Konica C35 Automatic
diff --git a/www/photo.causal.agency/0063/date b/www/photo.causal.agency/0063/date
new file mode 100644
index 00000000..c85682d5
--- /dev/null
+++ b/www/photo.causal.agency/0063/date
@@ -0,0 +1 @@
+April 6, 2025
diff --git a/www/photo.causal.agency/0063/film b/www/photo.causal.agency/0063/film
new file mode 100644
index 00000000..24c56374
--- /dev/null
+++ b/www/photo.causal.agency/0063/film
@@ -0,0 +1 @@
+Kodak UltraMax 400
diff --git a/www/photo.causal.agency/0063/lens b/www/photo.causal.agency/0063/lens
new file mode 100644
index 00000000..3fef9a43
--- /dev/null
+++ b/www/photo.causal.agency/0063/lens
@@ -0,0 +1 @@
+Konica Hexanon 38mm f/2.8
diff --git a/www/photo.causal.agency/0064/body b/www/photo.causal.agency/0064/body
new file mode 100644
index 00000000..0962ee7d
--- /dev/null
+++ b/www/photo.causal.agency/0064/body
@@ -0,0 +1 @@
+Yashica FX-3
diff --git a/www/photo.causal.agency/0064/date b/www/photo.causal.agency/0064/date
new file mode 100644
index 00000000..f1ec6872
--- /dev/null
+++ b/www/photo.causal.agency/0064/date
@@ -0,0 +1 @@
+April 4-6, 2025
diff --git a/www/photo.causal.agency/0064/film b/www/photo.causal.agency/0064/film
new file mode 100644
index 00000000..42423702
--- /dev/null
+++ b/www/photo.causal.agency/0064/film
@@ -0,0 +1 @@
+BT21 Star 400
diff --git a/www/photo.causal.agency/0064/lens b/www/photo.causal.agency/0064/lens
new file mode 100644
index 00000000..fcf3c232
--- /dev/null
+++ b/www/photo.causal.agency/0064/lens
@@ -0,0 +1 @@
+Carl Zeiss Planar T* 50mm f/1.7, Yashica ML 42-75 f/3.5-4.5
diff --git a/www/photo.causal.agency/0065/body b/www/photo.causal.agency/0065/body
new file mode 100644
index 00000000..3676b877
--- /dev/null
+++ b/www/photo.causal.agency/0065/body
@@ -0,0 +1 @@
+Konica C35 Automatic
diff --git a/www/photo.causal.agency/0065/date b/www/photo.causal.agency/0065/date
new file mode 100644
index 00000000..de490c39
--- /dev/null
+++ b/www/photo.causal.agency/0065/date
@@ -0,0 +1 @@
+April 6-12, 2025
diff --git a/www/photo.causal.agency/0065/film b/www/photo.causal.agency/0065/film
new file mode 100644
index 00000000..75a90c86
--- /dev/null
+++ b/www/photo.causal.agency/0065/film
@@ -0,0 +1 @@
+Ilford FP4 Plus 125
diff --git a/www/photo.causal.agency/0065/lens b/www/photo.causal.agency/0065/lens
new file mode 100644
index 00000000..3fef9a43
--- /dev/null
+++ b/www/photo.causal.agency/0065/lens
@@ -0,0 +1 @@
+Konica Hexanon 38mm f/2.8
diff --git a/www/photo.causal.agency/0066/body b/www/photo.causal.agency/0066/body
new file mode 100644
index 00000000..0962ee7d
--- /dev/null
+++ b/www/photo.causal.agency/0066/body
@@ -0,0 +1 @@
+Yashica FX-3
diff --git a/www/photo.causal.agency/0066/date b/www/photo.causal.agency/0066/date
new file mode 100644
index 00000000..803a4b62
--- /dev/null
+++ b/www/photo.causal.agency/0066/date
@@ -0,0 +1 @@
+April 12, 2025
diff --git a/www/photo.causal.agency/0066/film b/www/photo.causal.agency/0066/film
new file mode 100644
index 00000000..f07cfc3e
--- /dev/null
+++ b/www/photo.causal.agency/0066/film
@@ -0,0 +1 @@
+Lomography CN 400
diff --git a/www/photo.causal.agency/0066/lens b/www/photo.causal.agency/0066/lens
new file mode 100644
index 00000000..eaab4375
--- /dev/null
+++ b/www/photo.causal.agency/0066/lens
@@ -0,0 +1 @@
+Carl Zeiss Planar T* 50mm f/1.7
diff --git a/www/photo.causal.agency/0067/body b/www/photo.causal.agency/0067/body
new file mode 100644
index 00000000..3676b877
--- /dev/null
+++ b/www/photo.causal.agency/0067/body
@@ -0,0 +1 @@
+Konica C35 Automatic
diff --git a/www/photo.causal.agency/0067/date b/www/photo.causal.agency/0067/date
new file mode 100644
index 00000000..bbfc292a
--- /dev/null
+++ b/www/photo.causal.agency/0067/date
@@ -0,0 +1 @@
+April 12-13, 2025
diff --git a/www/photo.causal.agency/0067/film b/www/photo.causal.agency/0067/film
new file mode 100644
index 00000000..1a1b1714
--- /dev/null
+++ b/www/photo.causal.agency/0067/film
@@ -0,0 +1 @@
+Astrum Foto 200
diff --git a/www/photo.causal.agency/0067/lens b/www/photo.causal.agency/0067/lens
new file mode 100644
index 00000000..3fef9a43
--- /dev/null
+++ b/www/photo.causal.agency/0067/lens
@@ -0,0 +1 @@
+Konica Hexanon 38mm f/2.8
diff --git a/www/photo.causal.agency/0068/body b/www/photo.causal.agency/0068/body
new file mode 100644
index 00000000..3676b877
--- /dev/null
+++ b/www/photo.causal.agency/0068/body
@@ -0,0 +1 @@
+Konica C35 Automatic
diff --git a/www/photo.causal.agency/0068/date b/www/photo.causal.agency/0068/date
new file mode 100644
index 00000000..c460408f
--- /dev/null
+++ b/www/photo.causal.agency/0068/date
@@ -0,0 +1 @@
+April 13-17, 2025
diff --git a/www/photo.causal.agency/0068/film b/www/photo.causal.agency/0068/film
new file mode 100644
index 00000000..6227f2a9
--- /dev/null
+++ b/www/photo.causal.agency/0068/film
@@ -0,0 +1 @@
+Wolfen UN 54
diff --git a/www/photo.causal.agency/0068/lens b/www/photo.causal.agency/0068/lens
new file mode 100644
index 00000000..3fef9a43
--- /dev/null
+++ b/www/photo.causal.agency/0068/lens
@@ -0,0 +1 @@
+Konica Hexanon 38mm f/2.8
diff --git a/www/photo.causal.agency/0069/body b/www/photo.causal.agency/0069/body
new file mode 100644
index 00000000..3676b877
--- /dev/null
+++ b/www/photo.causal.agency/0069/body
@@ -0,0 +1 @@
+Konica C35 Automatic
diff --git a/www/photo.causal.agency/0069/date b/www/photo.causal.agency/0069/date
new file mode 100644
index 00000000..939dfe29
--- /dev/null
+++ b/www/photo.causal.agency/0069/date
@@ -0,0 +1 @@
+April 17, 2025
diff --git a/www/photo.causal.agency/0069/film b/www/photo.causal.agency/0069/film
new file mode 100644
index 00000000..cb06f7ff
--- /dev/null
+++ b/www/photo.causal.agency/0069/film
@@ -0,0 +1 @@
+Konica VX 400 Super (exp. 2008)
diff --git a/www/photo.causal.agency/0069/lens b/www/photo.causal.agency/0069/lens
new file mode 100644
index 00000000..3fef9a43
--- /dev/null
+++ b/www/photo.causal.agency/0069/lens
@@ -0,0 +1 @@
+Konica Hexanon 38mm f/2.8
diff --git a/www/photo.causal.agency/0070/body b/www/photo.causal.agency/0070/body
new file mode 100644
index 00000000..0962ee7d
--- /dev/null
+++ b/www/photo.causal.agency/0070/body
@@ -0,0 +1 @@
+Yashica FX-3
diff --git a/www/photo.causal.agency/0070/date b/www/photo.causal.agency/0070/date
new file mode 100644
index 00000000..d0bfb87b
--- /dev/null
+++ b/www/photo.causal.agency/0070/date
@@ -0,0 +1 @@
+April 18, 2025
diff --git a/www/photo.causal.agency/0070/film b/www/photo.causal.agency/0070/film
new file mode 100644
index 00000000..24e393c6
--- /dev/null
+++ b/www/photo.causal.agency/0070/film
@@ -0,0 +1 @@
+JCH Streetpan 400
diff --git a/www/photo.causal.agency/0070/lens b/www/photo.causal.agency/0070/lens
new file mode 100644
index 00000000..eaab4375
--- /dev/null
+++ b/www/photo.causal.agency/0070/lens
@@ -0,0 +1 @@
+Carl Zeiss Planar T* 50mm f/1.7
diff --git a/www/photo.causal.agency/0071/body b/www/photo.causal.agency/0071/body
new file mode 100644
index 00000000..0962ee7d
--- /dev/null
+++ b/www/photo.causal.agency/0071/body
@@ -0,0 +1 @@
+Yashica FX-3
diff --git a/www/photo.causal.agency/0071/date b/www/photo.causal.agency/0071/date
new file mode 100644
index 00000000..8eaecd35
--- /dev/null
+++ b/www/photo.causal.agency/0071/date
@@ -0,0 +1 @@
+April 18-20, 2025
diff --git a/www/photo.causal.agency/0071/film b/www/photo.causal.agency/0071/film
new file mode 100644
index 00000000..d41d547a
--- /dev/null
+++ b/www/photo.causal.agency/0071/film
@@ -0,0 +1 @@
+Rollei Reinhold 640
diff --git a/www/photo.causal.agency/0071/lens b/www/photo.causal.agency/0071/lens
new file mode 100644
index 00000000..eaab4375
--- /dev/null
+++ b/www/photo.causal.agency/0071/lens
@@ -0,0 +1 @@
+Carl Zeiss Planar T* 50mm f/1.7
diff --git a/www/photo.causal.agency/0072/body b/www/photo.causal.agency/0072/body
new file mode 100644
index 00000000..3676b877
--- /dev/null
+++ b/www/photo.causal.agency/0072/body
@@ -0,0 +1 @@
+Konica C35 Automatic
diff --git a/www/photo.causal.agency/0072/date b/www/photo.causal.agency/0072/date
new file mode 100644
index 00000000..8eaecd35
--- /dev/null
+++ b/www/photo.causal.agency/0072/date
@@ -0,0 +1 @@
+April 18-20, 2025
diff --git a/www/photo.causal.agency/0072/film b/www/photo.causal.agency/0072/film
new file mode 100644
index 00000000..24c56374
--- /dev/null
+++ b/www/photo.causal.agency/0072/film
@@ -0,0 +1 @@
+Kodak UltraMax 400
diff --git a/www/photo.causal.agency/0072/lens b/www/photo.causal.agency/0072/lens
new file mode 100644
index 00000000..3fef9a43
--- /dev/null
+++ b/www/photo.causal.agency/0072/lens
@@ -0,0 +1 @@
+Konica Hexanon 38mm f/2.8
diff --git a/www/photo.causal.agency/0073/body b/www/photo.causal.agency/0073/body
new file mode 100644
index 00000000..0962ee7d
--- /dev/null
+++ b/www/photo.causal.agency/0073/body
@@ -0,0 +1 @@
+Yashica FX-3
diff --git a/www/photo.causal.agency/0073/date b/www/photo.causal.agency/0073/date
new file mode 100644
index 00000000..668a1ac5
--- /dev/null
+++ b/www/photo.causal.agency/0073/date
@@ -0,0 +1 @@
+April 20, 2025
diff --git a/www/photo.causal.agency/0073/film b/www/photo.causal.agency/0073/film
new file mode 100644
index 00000000..6968664d
--- /dev/null
+++ b/www/photo.causal.agency/0073/film
@@ -0,0 +1 @@
+Ilford Ortho Plus 80
diff --git a/www/photo.causal.agency/0073/lens b/www/photo.causal.agency/0073/lens
new file mode 100644
index 00000000..eaab4375
--- /dev/null
+++ b/www/photo.causal.agency/0073/lens
@@ -0,0 +1 @@
+Carl Zeiss Planar T* 50mm f/1.7
diff --git a/www/photo.causal.agency/0074/body b/www/photo.causal.agency/0074/body
new file mode 100644
index 00000000..0962ee7d
--- /dev/null
+++ b/www/photo.causal.agency/0074/body
@@ -0,0 +1 @@
+Yashica FX-3
diff --git a/www/photo.causal.agency/0074/date b/www/photo.causal.agency/0074/date
new file mode 100644
index 00000000..0aec6293
--- /dev/null
+++ b/www/photo.causal.agency/0074/date
@@ -0,0 +1 @@
+April 20-27, 2025
diff --git a/www/photo.causal.agency/0074/film b/www/photo.causal.agency/0074/film
new file mode 100644
index 00000000..326aaee3
--- /dev/null
+++ b/www/photo.causal.agency/0074/film
@@ -0,0 +1 @@
+Wolfen NP100
diff --git a/www/photo.causal.agency/0074/lens b/www/photo.causal.agency/0074/lens
new file mode 100644
index 00000000..eaab4375
--- /dev/null
+++ b/www/photo.causal.agency/0074/lens
@@ -0,0 +1 @@
+Carl Zeiss Planar T* 50mm f/1.7
diff --git a/www/photo.causal.agency/0075/body b/www/photo.causal.agency/0075/body
new file mode 100644
index 00000000..3676b877
--- /dev/null
+++ b/www/photo.causal.agency/0075/body
@@ -0,0 +1 @@
+Konica C35 Automatic
diff --git a/www/photo.causal.agency/0075/date b/www/photo.causal.agency/0075/date
new file mode 100644
index 00000000..0aec6293
--- /dev/null
+++ b/www/photo.causal.agency/0075/date
@@ -0,0 +1 @@
+April 20-27, 2025
diff --git a/www/photo.causal.agency/0075/film b/www/photo.causal.agency/0075/film
new file mode 100644
index 00000000..dd589471
--- /dev/null
+++ b/www/photo.causal.agency/0075/film
@@ -0,0 +1 @@
+Harman Phoenix 200
diff --git a/www/photo.causal.agency/0075/lens b/www/photo.causal.agency/0075/lens
new file mode 100644
index 00000000..3fef9a43
--- /dev/null
+++ b/www/photo.causal.agency/0075/lens
@@ -0,0 +1 @@
+Konica Hexanon 38mm f/2.8
diff --git a/www/photo.causal.agency/0076/body b/www/photo.causal.agency/0076/body
new file mode 100644
index 00000000..3676b877
--- /dev/null
+++ b/www/photo.causal.agency/0076/body
@@ -0,0 +1 @@
+Konica C35 Automatic
diff --git a/www/photo.causal.agency/0076/date b/www/photo.causal.agency/0076/date
new file mode 100644
index 00000000..3a8a41d3
--- /dev/null
+++ b/www/photo.causal.agency/0076/date
@@ -0,0 +1 @@
+April 27, 2025
diff --git a/www/photo.causal.agency/0076/film b/www/photo.causal.agency/0076/film
new file mode 100644
index 00000000..cb06f7ff
--- /dev/null
+++ b/www/photo.causal.agency/0076/film
@@ -0,0 +1 @@
+Konica VX 400 Super (exp. 2008)
diff --git a/www/photo.causal.agency/0076/lens b/www/photo.causal.agency/0076/lens
new file mode 100644
index 00000000..3fef9a43
--- /dev/null
+++ b/www/photo.causal.agency/0076/lens
@@ -0,0 +1 @@
+Konica Hexanon 38mm f/2.8
diff --git a/www/photo.causal.agency/0077/body b/www/photo.causal.agency/0077/body
new file mode 100644
index 00000000..3676b877
--- /dev/null
+++ b/www/photo.causal.agency/0077/body
@@ -0,0 +1 @@
+Konica C35 Automatic
diff --git a/www/photo.causal.agency/0077/date b/www/photo.causal.agency/0077/date
new file mode 100644
index 00000000..a35d7362
--- /dev/null
+++ b/www/photo.causal.agency/0077/date
@@ -0,0 +1 @@
+April 27 – May 4, 2025
diff --git a/www/photo.causal.agency/0077/film b/www/photo.causal.agency/0077/film
new file mode 100644
index 00000000..ffcc1ab6
--- /dev/null
+++ b/www/photo.causal.agency/0077/film
@@ -0,0 +1 @@
+Flic Film Aurora 400
diff --git a/www/photo.causal.agency/0077/lens b/www/photo.causal.agency/0077/lens
new file mode 100644
index 00000000..3fef9a43
--- /dev/null
+++ b/www/photo.causal.agency/0077/lens
@@ -0,0 +1 @@
+Konica Hexanon 38mm f/2.8
diff --git a/www/photo.causal.agency/0078/body b/www/photo.causal.agency/0078/body
new file mode 100644
index 00000000..0962ee7d
--- /dev/null
+++ b/www/photo.causal.agency/0078/body
@@ -0,0 +1 @@
+Yashica FX-3
diff --git a/www/photo.causal.agency/0078/date b/www/photo.causal.agency/0078/date
new file mode 100644
index 00000000..7e2a323a
--- /dev/null
+++ b/www/photo.causal.agency/0078/date
@@ -0,0 +1 @@
+April 27 – May 3, 2025
diff --git a/www/photo.causal.agency/0078/film b/www/photo.causal.agency/0078/film
new file mode 100644
index 00000000..6a2f64b6
--- /dev/null
+++ b/www/photo.causal.agency/0078/film
@@ -0,0 +1 @@
+AristaEDU Ultra 200
diff --git a/www/photo.causal.agency/0078/lens b/www/photo.causal.agency/0078/lens
new file mode 100644
index 00000000..ad833bed
--- /dev/null
+++ b/www/photo.causal.agency/0078/lens
@@ -0,0 +1 @@
+Carl Zeiss Planar T* 50mm f/1.7, Yashica ML Macro 55mm f/2.8
diff --git a/www/photo.causal.agency/0079/body b/www/photo.causal.agency/0079/body
new file mode 100644
index 00000000..0962ee7d
--- /dev/null
+++ b/www/photo.causal.agency/0079/body
@@ -0,0 +1 @@
+Yashica FX-3
diff --git a/www/photo.causal.agency/0079/date b/www/photo.causal.agency/0079/date
new file mode 100644
index 00000000..d44c408e
--- /dev/null
+++ b/www/photo.causal.agency/0079/date
@@ -0,0 +1 @@
+May 3, 2025
diff --git a/www/photo.causal.agency/0079/film b/www/photo.causal.agency/0079/film
new file mode 100644
index 00000000..7438f38e
--- /dev/null
+++ b/www/photo.causal.agency/0079/film
@@ -0,0 +1 @@
+Lucky SHD 400
diff --git a/www/photo.causal.agency/0079/lens b/www/photo.causal.agency/0079/lens
new file mode 100644
index 00000000..197595bc
--- /dev/null
+++ b/www/photo.causal.agency/0079/lens
@@ -0,0 +1 @@
+Yashica ML Macro 55mm f/2.8
diff --git a/www/photo.causal.agency/0080/body b/www/photo.causal.agency/0080/body
new file mode 100644
index 00000000..3676b877
--- /dev/null
+++ b/www/photo.causal.agency/0080/body
@@ -0,0 +1 @@
+Konica C35 Automatic
diff --git a/www/photo.causal.agency/0080/date b/www/photo.causal.agency/0080/date
new file mode 100644
index 00000000..17eb8868
--- /dev/null
+++ b/www/photo.causal.agency/0080/date
@@ -0,0 +1 @@
+May 4-14, 2025
diff --git a/www/photo.causal.agency/0080/film b/www/photo.causal.agency/0080/film
new file mode 100644
index 00000000..a87ca638
--- /dev/null
+++ b/www/photo.causal.agency/0080/film
@@ -0,0 +1 @@
+Konica 400 VX Super (exp. 2005)
diff --git a/www/photo.causal.agency/0080/lens b/www/photo.causal.agency/0080/lens
new file mode 100644
index 00000000..3fef9a43
--- /dev/null
+++ b/www/photo.causal.agency/0080/lens
@@ -0,0 +1 @@
+Konica Hexanon 38mm f/2.8
diff --git a/www/photo.causal.agency/0080/note b/www/photo.causal.agency/0080/note
new file mode 100644
index 00000000..72945eda
--- /dev/null
+++ b/www/photo.causal.agency/0080/note
@@ -0,0 +1,3 @@
+first roll I didn't even have the lab scan as a backup!
+shot at EI 100 and clearly overexposed.
+is the one-stop-per-decade rule even real?
diff --git a/www/photo.causal.agency/2024-06-08/R1-07534-002A.txt b/www/photo.causal.agency/2024-06-08/R1-07534-002A.txt
deleted file mode 100644
index 6a70030e..00000000
--- a/www/photo.causal.agency/2024-06-08/R1-07534-002A.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-profile of Ayla on the couch in our apartment.
-behind her on the left of the frame is a warm brick wall.
-there's a band from what might be a light leak
-just to the right of her head.
-I've DIY replaced the light seals
-on this camera so we'll see how it looks
-on the next roll.
-there's also a narrow dark band
-at the right edge of the frame.
-I don't know what's up with that.
diff --git a/www/photo.causal.agency/2024-06-12/R1-07671-017A.txt b/www/photo.causal.agency/2024-06-12/R1-07671-017A.txt
deleted file mode 100644
index a42ac1da..00000000
--- a/www/photo.causal.agency/2024-06-12/R1-07671-017A.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Ayla lying on the couch,
-head propped up on her arm,
-smiling at her phone.
diff --git a/www/photo.causal.agency/2024-06-12/R1-07671-019A.txt b/www/photo.causal.agency/2024-06-12/R1-07671-019A.txt
deleted file mode 100644
index 110edad8..00000000
--- a/www/photo.causal.agency/2024-06-12/R1-07671-019A.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Ayla outside in stark lighting
-as the sun was just starting to set,
-looking at some yellow long flowers
-growing on a large bush.
diff --git a/www/photo.causal.agency/2024-06-12/R1-07671-022A.txt b/www/photo.causal.agency/2024-06-12/R1-07671-022A.txt
deleted file mode 100644
index 89dc567e..00000000
--- a/www/photo.causal.agency/2024-06-12/R1-07671-022A.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-Ayla looking back
-from halfway down a staircase
-leading towards an old stone building.
-there's a black band
-of underexposed film
-on the right edge of the frame.
-a problem with the shutter
-at slower speeds or something?
diff --git a/www/photo.causal.agency/2024-07-03/000099810023.txt b/www/photo.causal.agency/2024-07-03/000099810023.txt
deleted file mode 100644
index 0b3d18b8..00000000
--- a/www/photo.causal.agency/2024-07-03/000099810023.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Ayla on a peak of the mountain
-facing away from me
-but turning back towards the camera.
-she's wearing a pink tshirt
-and carrying a red backpack.
-her hair is messy blowing in the wind.
diff --git a/www/photo.causal.agency/2024-08-29/000054970005.txt b/www/photo.causal.agency/2024-08-29/000054970005.txt
deleted file mode 100644
index 89cfbe7f..00000000
--- a/www/photo.causal.agency/2024-08-29/000054970005.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Ayla in an orange sweater
-pulling her fingers through her hair
-and making a squinting face.
diff --git a/www/photo.causal.agency/2024-08-29/000054970006.txt b/www/photo.causal.agency/2024-08-29/000054970006.txt
deleted file mode 100644
index dcf4b50e..00000000
--- a/www/photo.causal.agency/2024-08-29/000054970006.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Ayla in an orange sweater
-looking to the side and smiling.
diff --git a/www/photo.causal.agency/c35/body b/www/photo.causal.agency/c35/body
new file mode 100644
index 00000000..3676b877
--- /dev/null
+++ b/www/photo.causal.agency/c35/body
@@ -0,0 +1 @@
+Konica C35 Automatic
diff --git a/www/photo.causal.agency/c35/lens b/www/photo.causal.agency/c35/lens
new file mode 100644
index 00000000..3fef9a43
--- /dev/null
+++ b/www/photo.causal.agency/c35/lens
@@ -0,0 +1 @@
+Konica Hexanon 38mm f/2.8
diff --git a/www/photo.causal.agency/fx-3/body b/www/photo.causal.agency/fx-3/body
new file mode 100644
index 00000000..0962ee7d
--- /dev/null
+++ b/www/photo.causal.agency/fx-3/body
@@ -0,0 +1 @@
+Yashica FX-3
diff --git a/www/photo.causal.agency/fx-3/lens b/www/photo.causal.agency/fx-3/lens
new file mode 100644
index 00000000..eaab4375
--- /dev/null
+++ b/www/photo.causal.agency/fx-3/lens
@@ -0,0 +1 @@
+Carl Zeiss Planar T* 50mm f/1.7
diff --git a/www/photo.causal.agency/gear.html b/www/photo.causal.agency/gear.html
new file mode 100644
index 00000000..e058d341
--- /dev/null
+++ b/www/photo.causal.agency/gear.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>Photography Equipment</title>
+<style>
+html { color: #bbb; background-color: black; font-family: monospace; }
+body { max-width: 76ch; margin: auto; }
+</style>
+
+<h1>Photography Equipment</h1>
+<p>
+this is a (probably incomplete) list of equipment I use to Do Photography.
+
+<h2>Cameras</h2>
+<ul>
+<li>Yashica FX-3 (every day)
+<li>Konica C35 Automatic (Hexanon 38mm f/2.8) (every day)
+<li>Praktica MTL3 (probably on loan to a friend)
+<li>Zenit-122
+<li>Yashica FX-2
+</ul>
+
+<h2>Lenses</h2>
+<ul>
+<li>Carl Zeis Planar T* 50mm f/1.7 (FX-3 default)
+<li>Yashica DSB 50mm f/1.9 (FX-2 kit lens)
+<li>Helios-44M-5 58mm f/2 (Zenit-122 kit lens)
+<li>Pentacon 50mm f/1.8 (MTL3 kit lens)
+<li>Osawa MC 70-210mm f/4-5 (C/Y)
+<li>Takumar SMC 35mm f/3.5
+<li>Super-Takumar 135mm f/3.5
+<li>Yashica ML 28-85mm f/3.5-4.5 (wonky focus at 28mm)
+<li>Yashica ML 42-75mm f/3.5-4.5
+<li>Yashica MC 35-70mm f/3.5-4.5 (bad aperture)
+<li>Yashica ML 50mm f/2 (sticky aperture)
+<li>Yashica DSB 28mm f/2.8
+<li>Yashica DSB 135mm f/2.8
+<li>Yashica ML Macro 55mm f/2.8
+<li>Yashica ML 28mm f/2.8
+<li>Yashica ML 75-150mm f/4
+</ul>
+
+<h2>Flash</h2>
+<ul>
+<li>Reflx Lab Simple Flash
+<li>Starblitz 318M
+</ul>
+
+<h2>Tripod</h2>
+<ul>
+<li>Sirui Traveler 5C
+</ul>
+
+<h2>Scanning</h2>
+<ul>
+<li>Filmomat SmartConvert
+<li>Canon EOS Rebel SL3
+<li>Yashica ML Macro 55mm f/2.8 (at f/11)
+<li>Yashica 13mm extension tube (also have 20mm and 27mm)
+<li>Urth C/Y-EF adapter
+<li>Skier CS-700 copy stand
+<li>Valoi 135 film holder
+<li>CineStill CS-Lite
+<li>the box the CS-Lite came in
+</ul>
diff --git a/www/photo.causal.agency/generate.sh b/www/photo.causal.agency/generate.sh
index e4293d8c..83a3128b 100644
--- a/www/photo.causal.agency/generate.sh
+++ b/www/photo.causal.agency/generate.sh
@@ -36,6 +36,7 @@ encode() {
 
 page_title() {
 	case $1 in
+		(leader) echo 'Film Leader';;
 		(20*) date -j -f '%F' $1 '+%B %e, %Y';;
 		(0*) echo Roll $(dc -e "${1}p");;
 	esac
@@ -44,10 +45,10 @@ page_title() {
 page_head() {
 	local page=$1
 	local title=$(page_title $page)
-	local date body lens film
+	local date body lens film note
 
 	if test -f $page/date; then
-		date=$(sed 's/\([0-9]\)-\([0-9]\)/\1-\2/g' $page/date | encode)
+		date=$(sed 's/\([0-9]\)-\([0-9]\)/\1–\2/g' $page/date | encode)
 	fi
 	if test -f $page/body; then
 		body=$(encode $page/body)
@@ -56,7 +57,7 @@ page_head() {
 		lens=$(
 			sed '
 				s,f/,ƒ/,g
-				s/\([0-9]\)-\([0-9]\)/\1-\2/g
+				s/\([0-9]\)-\([0-9]\)/\1–\2/g
 			' $page/lens |
 			encode
 		)
@@ -75,6 +76,9 @@ page_head() {
 	if test -f $page/film; then
 		film=$(encode $page/film)
 	fi
+	if test -f $page/note; then
+		note=$(encode $page/note)
+	fi
 
 	cat <<-EOF
 	<!DOCTYPE html>
@@ -90,7 +94,8 @@ page_head() {
 	details { max-width: 78ch; margin: 0.5em auto; }
 	</style>
 	<h1>${title}</h1>
-	<p>${date:+📆 }${date:-} 📷 ${body:-}${body:+ 🔘 }${lens}${film:+ 🎞️ }${film:-}</p>
+	<p>${date:+📆 }${date:-} 📷 ${body:-}${body:+ 🔘 }${lens:-}${film:+ 🎞️ }${film:-}</p>
+	${note:+<p>}${note:-}${note:+</p>}
 	EOF
 }
 
@@ -248,6 +253,20 @@ for entry in 20* 0*; do
 	set -- $entry "$@"
 done
 
+mkdir -p static/leader
+page=static/leader/index.html
+if [ leader -nt $page ]; then
+	echo $page >&2
+	page_head leader >$page
+	for photo in leader/*.[Jj][Pp][Gg]; do
+		preview=$(preview $photo)
+		if ! test -f static/${photo}; then
+			ln $photo static/${photo}
+		fi
+		page_photo $photo $preview xxx >>$page
+	done
+fi
+
 echo static/index.html >&2
 index_head >static/index.html
 echo static/feed.atom >&2
diff --git a/www/photo.causal.agency/mastodon.sh b/www/photo.causal.agency/mastodon.sh
new file mode 100644
index 00000000..1eaa1114
--- /dev/null
+++ b/www/photo.causal.agency/mastodon.sh
@@ -0,0 +1,54 @@
+#!/bin/sh
+set -eu
+
+Instance=https://tilde.zone
+Root=${1:-static}
+
+if ! test -f app.json; then
+	echo 'No app.json!' >&2
+	exit 1
+fi
+chmod 600 app.json
+
+if ! test -f token.json; then
+	client_id=$(jq -r .client_id app.json)
+	client_secret=$(jq -r .client_secret app.json)
+	echo "Please open ${Instance}/oauth/authorize?client_id=${client_id}&scope=write&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code"
+	printf 'Enter code: '
+	read -r code
+	curl -Ss -X POST \
+		-F 'grant_type=authorization_code' \
+		-F "client_id=${client_id}" \
+		-F "client_secret=${client_secret}" \
+		-F 'redirect_uri=urn:ietf:wg:oauth:2.0:oob' \
+		-F "code=${code}" \
+		${Instance}/oauth/token >token.json
+fi
+chmod 600 token.json
+
+access_token=$(jq -r .access_token token.json)
+
+if ! test -f posted.txt; then
+	touch posted.txt
+fi
+
+photo=$(
+	find ${Root} -type f -path '*/0*/*.jpg' |
+	sort | comm -13 posted.txt - | head -n 1
+)
+preview=${Root}/preview/${photo##*/}
+
+media_id=$(
+	curl -Ss -X POST \
+		-H "Authorization: Bearer ${access_token}" \
+		-F "file=@${preview}" \
+		${Instance}/api/v2/media |
+	jq -r .id
+)
+
+curl -Ss -X POST \
+	-H "Authorization: Bearer ${access_token}" \
+	-F "media_ids[]=${media_id}" \
+	${Instance}/api/v1/statuses >/dev/null
+
+echo ${photo} >>posted.txt
diff --git a/www/photo.causal.agency/trips.html b/www/photo.causal.agency/trips.html
index a5cacc5c..d65aeaef 100644
--- a/www/photo.causal.agency/trips.html
+++ b/www/photo.causal.agency/trips.html
@@ -32,6 +32,17 @@ input[type="number"] { width: 5ch; }
 </select>
 <label for="roll-film">Film:</label>
 <input id="roll-film" list="films" required>
+<span>Exposures:</span>
+<span>
+<input id="roll-36" type="radio" name="roll-exposures" value="36" checked>
+<label for="roll-36">36</label>
+<input id="roll-27" type="radio" name="roll-exposures" value="27">
+<label for="roll-27">27</label>
+<input id="roll-24" type="radio" name="roll-exposures" value="24">
+<label for="roll-24">24</label>
+<input id="roll-12" type="radio" name="roll-exposures" value="12">
+<label for="roll-12">12</label>
+</span>
 <button type="button" onclick="loadRoll()">Load</button>
 </form>
 
@@ -207,8 +218,9 @@ function setTrips() {
 		rollB.appendChild(document.createTextNode(rollTrips[0].film));
 		rollLi.appendChild(rollB);
 		rollLi.appendChild(document.createTextNode(` (${rollTrips[0].body})`));
+		let body = bodies.find(body => body.name == rollTrips[0].body);
 		let rollUl = document.createElement("ul");
-		for (let trip of rollTrips) {
+		for (let [index, trip] of rollTrips.entries()) {
 			let li = document.createElement("li");
 			let b = document.createElement("b");
 			b.appendChild(document.createTextNode(trip.date));
@@ -216,8 +228,13 @@ function setTrips() {
 			li.appendChild(document.createTextNode(
 				`: ${trip.firstExposure}–${trip.lastExposure}`
 			));
-			li.appendChild(document.createElement("br"));
-			li.appendChild(document.createTextNode(trip.lens));
+			if (
+				body.mount != body.name &&
+				(!index || trip.lens != rollTrips[index-1].lens)
+			) {
+				li.appendChild(document.createElement("br"));
+				li.appendChild(document.createTextNode(trip.lens));
+			}
 			if (trip.note) {
 				li.appendChild(document.createElement("br"));
 				li.appendChild(document.createTextNode(`“${trip.note}”`));
@@ -261,6 +278,7 @@ setTripBody();
 function clearForm(form) {
 	let inputs = form.querySelectorAll("input");
 	for (input of inputs) {
+		if (input.type == "radio") continue;
 		input.value = null;
 	}
 }
@@ -313,7 +331,8 @@ function loadRoll() {
 	if (!form.checkValidity()) return;
 	let body = document.getElementById("roll-body").value;
 	let film = document.getElementById("roll-film").value;
-	rolls[body] = { id: nextId++, film, used: 0, exposures: 36 };
+	let exposures = +new FormData(form).get("roll-exposures");
+	rolls[body] = { id: nextId++, film, exposures, used: 0 };
 	localStorage.setItem("nextId", nextId);
 	setRolls();
 	clearForm(form);