大約六年前,我開始做 Simple Photo Gallery,想解決一個很簡單的問題:我想找個好看的方式,把旅行照片和剛出生的寶寶的照片分享給親友。光是把一堆圖片丟進相簿、傳個連結,並不是我要的。我想_說一個故事_。我想加上說明,把照片分成有意義的幾個區段,讓大家知道每張照片裡是什麼。
第一次做一篇像樣的大型「照片故事」,是為了記錄 2017 年的澳洲之旅。一路上我們學到好多有趣的事,我希望相簿能把這段體驗也傳達出去。我按城市和地點整理照片,替各個區段加上文字,還為許多照片寫了說明。問題是,當時根本找不到適合的工具。
我想要的工具既能說故事,做好的相簿又能輕鬆分享給祖母。她主要用平板電腦和通訊軟體。我傳一個連結給她,她點一下就應該能看到全部內容。不用登入,不用另外的服務,也沒有複雜的操作。當然,在手機、電腦和平板上都要好用。
最後,我決定自己做一個。
最初的版本
第一版 Simple Photo Gallery 是用 Python 寫的。我發現一個很棒的 JavaScript 函式庫 PhotoSwipe,它的圖片檢視器漂亮又流暢。我把它包進一個小小的命令列工具,讓工具掃描照片資料夾、產生縮圖,再把所有內容打包成靜態相簿。產物就是普通的 HTML、CSS 和 JavaScript 檔案,想託管在哪裡都可以。
我把工具的原始碼公開,在整理我們一次次旅行和陪伴兒子成長的照片時,陸續加了不少功能。這是 2017 年的第一版澳洲相簿。
不過,工具並不好用。
你得用 pip 安裝 Python 套件,在終端機執行指令。如果想用區段這類進階功能,還得手動編輯 JSON 檔案。實際用得起來的,大多是有一定技術背景的人。即便如此,用的人還是一年比一年多。
有個有趣的細節:每個產生的相簿下方都有一行小字,「使用 Simple Photo Gallery 製作」。我可以輕鬆用 Google 搜尋相簿,看看大家做了什麼。當然,原始碼是開放的,誰都可以拿掉這行字,所以實際的相簿可能更多。即便如此,專案還是獲得 200 多顆 GitHub 星星。對一個週末做出來的小專案來說,實在有點不可思議。
看到越來越多人使用,我就越常想: 「它明明_這麼_難用,卻還是有這麼多人覺得有價值。也許該把它做得更簡單。」
構思了好幾年的新版本
幾乎從一開始,我就在計畫做 v2。我想用現代 JavaScript 全部重寫,解決 Python 版一些根本的限制,再補上大家一直想要的功能。尤其是能從大型、多層巢狀的資料夾自動產生相簿。好幾個人聯絡我,說他們的照片收藏規模很大,需要這樣的工具。但在舊架構裡,很難把這個功能做得好。
我想了好幾年,終於在今年稍早對自己說:就做吧。
我說服好友 Tomasz 加入,成為對等的夥伴。他是很出色的開發者。我們用 Astro 和一套現代、快速的 TypeScript 技術從頭重寫工具。2025 年 9 月,我們在 GitHub 和 npm 發布了新的開放原始碼版本 Simple Photo Gallery v2。
這是現在用 v2 做出的澳洲相簿。
新方向:開放原始碼工具與託管應用程式
除了開放原始碼命令列工具,我們也開始打造新的網頁應用程式。它以開放原始碼引擎為基礎,提供全代管服務,負責託管、儲存和最佳化。你可以用視覺化編輯器做相簿,不必修改 JSON 檔案。上傳照片資料夾、加上說明,再點選「儲存」就好了。沒有技術背景的人也能輕鬆使用。
這就是我們現在在做的產品。它已經可以正常使用,我們還有一長串想新增的功能。想試試看的話,歡迎造訪 Simple Photo Gallery。也可以看看範例,找點靈感。
接下來
我們正在規劃一些有趣的 AI 功能,讓挑選和整理照片更簡單。隨著新功能陸續開發,我會在這個部落格和 @haltakov 分享進度。
