
Я люблю фотографию. Есть что‑то волнующее в наблюдении за изображением через объектив, выстраивании кадра для получения композиции и работы над получившимся фото. Я менял зеркальные и беззеркальные камеры, пока, наконец, не влюбился в Canon AE-1P — аналоговую зеркалку, с которой мой отец путешествовал по миру, пока, наконец, не обосновался в Штатах.
Фотосъёмка на плёнку проста, но специфична: отражённый свет падает на пластмассовую плёнку, выжигая в ней химическое изображение. Сочетание освещения, типа плёнки и объектива создаёт волшебно‑уникальные композиции.
Долгие годы мой процесс работы выглядел так: я заправляю плёнку и делаю фотографии, отправляю плёнку в лабораторию и жду проявки, забираю плёнку, разрезаю негативы на полосы, вставляю их в держатель, сканирую негатив каждого кадра специальным сканером, открываю каждый файл в Darktable, инвертирую вручную, вношу правки, а затем решаю где хранить и/или публиковать экспортированное изображение. Поначалу этот процесс казался мне восхитительным, но чем больше я снимал плёнок, тем больше времени уходило на обработку всех 36 кадров плёнки.

В среднем на сканирование плёнки из 36 кадров и внесение изменений мне требовалось примерно четыре часа. При работе с плёнкой нужно внимание, особенно чтобы избежать пыли и царапин на готовом снимке. Разумеется, этот процесс достаточно быстро стал казаться утомительным. Я тратил больше времени на обработку фотографий, чем на их съёмку, поэтому начал искать способы сэкономить время, облегчив операции в моей личной цифровой лаборатории.
Даём Claude полномочия уничтожать технику
Моя первая гипотеза заключалась в том, что можно сделать этот цикл полностью автономным. Пусть Claude управляет сканером через SANE (опенсорсный стек драйверов сканера) и занимается всем процессом сканирования, цветовых преобразований и редактуры.
При первом прогоне Claude использовал SANE с инвертированными направлениями X/Y, едва не поломав зубчатый механизм внутри сканера. Из‑за этого мне, к сожалению, пришлось тратить время на выполнение срочной хирургической операции для экономии $200 на покупку нового.
Чат: пустые белые сканы
20 сентября 2026 года
-
Shan, 16:54
Плёнка точно внутри, возможно, дело в выбранных тобой параметрах сканирования
-
Claude, 16:56
Я проверил, почему сканы могут получаться белыми: ваше предположение о параметрах можно исключить. … Все 856 строк одинаковы: гладкие вертикальные полосы от неравномерного освещения лампы с нулевыми изменениями сверху вниз и с отсутствием деталей изображения. … То есть на протяжении всего скана датчик наблюдал одну и ту же ничем не перекрытую полосу света.
-
Shan, 17:01
Я попробовал vuescan, но датчик или каретка не движутся; похоже, ты что‑то сделал не так
-
Shan, 17:04
Ситуация точно плохая. можешь проверять сканер, пока я не скажу, что он движется? я слышу какие‑то щелчки, возможно, он движется в обратном направлении
-
Claude, 17:05
Я выяснил причину щелчков: причина в моих сканах. … В конце каждого скана бэкенд genesys отправляет каретку назад слепым обратным движением: 7010 шагов с 900 dpi, а затем дополнительно с 3600. Он предполагает, что при сканировании каретка двигалась вперёд. … Поэтому каждый скан заканчивался тем, что двигатель перемещал каретку, которая уже была припаркована в точке своего останова. Именно эти щелчки вы слышали, и ваше мнение о направлении было правильным. Я выполнил семь сканов, то есть это произошло семь раз.

В результате я стал работать с тем, что уже хорошо работало. Лицензию на VueScan я купил уже давно; эта программа была лучше всего совместима с моим сканером, а у меня не имелось робота‑манипулятора, автоматизирующего физическую вставку и сканирование плёнок, поэтому я просто буду пользоваться программой сам и искать решение, которое сможет выполнять операции сразу после этого.
Студия
К счастью, неудачная попытка заставила меня посмотреть на проблему под другим углом. Я работаю с VueScan, как делал это всегда, поэтому мне нужно каким‑то образом оптимизировать обработку сканов. Проведя несколько тестов с данными изображений, я создал целый пакет инструментов, помогающих мне в выполнении процесса.
Преобразование негативов
В основном для преобразования негативов в позитивы требуется лишь код. Инверсия реализована в виде небольшой программы на numpy, которая работает с оптической плотностью плёнки и измеряет цветовые характеристики всей плёнки, прежде чем корректировать каждый кадр с учётом ограничений, задаваемых его негативом. Благодаря этому 36 кадров выглядят однородно на всей плёнке, а, например, закат не подвергается радикальной цветовой коррекции. Обычно я мучился с этим даже при ручной обработке. Мой агент определил, что пустой начальный слот плёнки будет хорошим эталоном весов цветовой коррекции относительно остальных кадров. Прежде чем делать что-либо ещё, я испытал систему на старой фотоплёнке, чтобы решить, стоит ли продолжать работу.
Чат: тест преобразования
21 сентября 2026 года
-
Shan, 10:35
Запусти тест преобразования для film/valentines2026
-
Claude, 10:40
Тест преобразования пройдет для 28 из 29 кадров. Самодельное преобразование работает достаточно хорошо, чтобы развивать его дальше, и для этого не нужен darktable… Мои снимки получаются светлее и с более нейтральной цветопередачей, тогда как ваши экспортированные изображения уходят в бирюзовые оттенки и выглядят темнее (небо над отелем Hotel del Coronado, портрет на пляже, снимок сада). Но здесь дело не только в правильности цветопередачи, но и во вкусе, так что судить тебе.
-
Shan, 10:40
мне нравится выбранное тобой направление. запусти тест распознавания пыли








Удаление пыли и редактирование
Модели приходят на помощь, когда исчерпываются возможности кода. Пыль обнаруживается при анализе изображения негатива и помечается на удаление. Это сложнее, чем кажется: на кадре с пляжем первый детектор пометил как пыль примерно две тысячи солнечных бликов на воде. Решение заключалось в том, чтобы учитывать контекст и применять обработку только там, где окружающая область достаточно однородна. Обнаруженные пятна заполняются с помощью LaMa (модели для восстановления изображений, или inpainting). При этом в восстановленный участок добавляются детали с соседних участков плёнки, чтобы он не выглядел размазанным. Это похоже на инструмент «Восстанавливающая кисть» в Photoshop.
Не каждый участок нужно заполнять автоматически. Я настроил собственный порог, при котором участки с зернистостью можно отложить для проверки, а затем подтвердить или отклонить их обработку по отдельности или пакетно.
Из-за этого возникла необходимость настройки свойств света и цвета каждого изображения с учётом зернистости, поэтому я добавил удобные элементы управления выдержкой, контрастностью, температурой и другими параметрами.

Метаданные
Индексирование данных об аналоговой фотоплёнке может занимать много времени, особенно если приходится самостоятельно работать с несколькими отдельными инструментами. Это была одна из тех задач, о которых думаешь: «А почему бы и нет?» Теперь, раз я использую технологии, я могу пойти дальше и добавить возможность распознавать фотографии, чтобы впоследствии их было проще искать.
Поэтому при поступлении новых сканов в Ollama локально запускается Qwen3-VL, анализирует каждый готовый кадр и примерно за пять секунд составляет для него набор тегов. В сочетании с данными о камере, объективе, дате съёмки и типе фотоплёнки это позволяет создать полноценный архив фотографий, в котором легко искать нужные снимки.

Теперь на мою долю остаётся лишь та часть работы, которой я искренне наслаждаюсь: я изучаю сделанные снимки и ищу вдохновение, чтобы делать новые.

Галерея
После того, как я разобрался с конвейером, появился вопрос, где хранить все изображения.
Обычно они лежат на моём 4-терабайтном HDD, который постоянно подключен к моей машине. Но теперь, когда я избавился от необходимости создания корпоративного ПО для личного пользования, мне захотелось изучить возможности хранения в world wide web.
Процесс публикации
У меня есть аккаунт Cloudflare, который время от времени активируется благодаря посетителям, просматривающим CDN-контент с моего личного сайта. Разве есть способ лучше, чтобы выжать максимум из бесплатного тарифа, кроме загрузки всех фотографий в собственный бакет R2? Поэтому я расширил студию, добавив возможность публикации.

Показ фотографий по плёнкам
Простая сетка миниатюр показалась мне слишком непрезентабельной. Я продолжал сканировать плёнки, вспоминая о том, как раньше возил плёнки на проявку. Когда я увидел, как лаборанты разматывают саму фотоплёнку и заправляют её в процессор для проявки по процессу C-41, мне пришла в голову простая идея — воссоздать саму фотоплёнку в цифровом виде.
Я понимаю, что это не самый реалистичный способ воссоздать процесс, но идея оказалась очень увлекательной, и её хотелось развивать дальше. В итоге у меня получился суконный стол, на котором лежат смоделированные для Three.js кассеты с фотоплёнкой с настоящими изображениями этикеток и случайными потёртостями. Берёшь кассету, вытягиваешь из неё плёнку, и на ней появляются кадры. Затем плёнка просто падает на стол.
Мой уголок Интернета
Суммарно этот проект занял 11 дне и потребовал 64 коммита. В галерее сейчас есть 22 плёнки и 314 фотографий, первые из которых были сняты ещё в 2020 году.
Я продолжу добавлять фотографии и сливать деньги на плёнки и проявку. Это мой уголок Интернета, в котором могут отдохнуть посетители.
Создание такого сайта оказалось для меня не менее увлекательным занятием, чем сама работа со сканером и проявка плёнки.
Ручной процесс позволяет человеку может получать удовольствие и от чего он не захочет отказываться в пользу автоматизации. По крайней мере, для меня он означает возможность оторваться от компьютера и сосредоточиться на том, чтобы наслаждаться временем, которое я провожу, исследуя мир и запечатлевая его с необычных ракурсов.
