照片庫與 raw 顯影;以淨室(clean-room)方式、用純 Rust 重新實作的開源 Adobe Lightroom。
在 macOS、Windows 與 Linux 上原生執行,也能透過 WebAssembly 在瀏覽器中使用,AI 代理也能透過 MCP 全程操作。
getartcraft.com 上的 LightCraft · ArtCraft · 所有 Crafting Apps
安瑟·亞當斯,《提頓山脈與蛇河》(1942)。公眾領域,美國國家檔案館。於 LightCraft 中顯影。
Note
ArtCraft 是一個由各行各業的創作者組成的社群。 數位藝術、生成藝術、音樂、 遊戲 — 只要你在創作,你就是我們的一員。來 Discord 打聲招呼吧。
編輯 · 色彩分級 · 編輯前/後對比 · 遮色片 · 預設集 · 照片庫 · 代理與 MCP · 效能 · 功能狀態 · 快速開始 · 路線圖 · 下載 · Crafting Apps
LightCraft 是裝在單一原生應用程式裡的完整暗房。每一項調整都是非破壞性的,永遠不會動到原始檔案。 每個滑桿都經過一條場景參考、寬色域、32 位元浮點的管線算繪:亮部像底片一樣柔和過渡,陰影提亮卻不產生光暈, 色彩從拍攝到匯出始終保持乾淨。
|
曝光、對比、亮部、陰影、白色色階、黑色色階,搭配邊緣感知的局部色調映射(對對數亮度做引導式濾波)。 把亮部拉到 −100,就能救回一片過曝的天空,而且不會出現用簡單曲線時常見的灰色光暈。 依色溫與色調調整白平衡(raw 用 K 值,JPEG 用相對值),附帶預設、自動,以及點一下就能中和的滴管。 保護膚色的自然飽和度、飽和度、8 段式混色器(色相/飽和度/明度),以及附帶混合與平衡的 三區色彩分級色輪。所有運算都在 OkLCh 這個現代感知色彩空間中完成。 |
讓細節更細緻的紋理、讓中間調更有力的清晰度、去朦朧(暗通道先驗加引導式細化; 推到負值可增添氛圍感)、裁切後附帶亮部優先、圓度與羽化的暗角,以及解析度無關、可調大小與粗糙度的 底片顆粒。 可移動分界點的參數曲線(區域曲線),再加上 RGB、紅、綠、藍的點曲線。曲線在結構上就是單調的, 所以不會意外出現色調反轉。 |
RGB 點曲線上一條平緩的 S 形曲線,就在「光線」滑桿正下方。安瑟·亞當斯,1942(公眾領域)。
用可隨處拖曳的色輪,分別為陰影、中間調與亮部做分離色調。下圖中,桃樂絲·蘭格的 《移民母親》 只拖曳兩次,就調出溫暖、如沖印照片般的色調(亮部 42°,陰影 28°)。
「色彩」面板中的陰影、中間調與亮部色輪。桃樂絲·蘭格,《移民母親》(1936)。公眾領域,美國國會圖書館。
按住 \ 偷看原圖,按 Y 並排比較,或按 Shift+Y 分割檢視。 下面每一張都是 LightCraft 的真實截圖,由代理透過控制通道自動擷取。
用筆刷塗抹(大小、羽化、流量、濃度、擦除),放置附可拖曳控制點的線性漸層與放射狀漸層, 或依明度範圍、色彩範圍、天空、主體與背景來選取。用新增/減去/交集組合各個元件, 反轉其中任何一個,每個遮色片可設定 15 項局部調整(色溫、色調、曝光、對比、亮部、陰影、白色色階、黑色色階、紋理、 清晰度、去朦朧、色相、飽和度、銳利化、雜訊抑制),再加上一個整體的強度。
疊加在線性「天空」遮色片之上的放射狀「陽光光暈」遮色片(色溫 +40、曝光 +0.50)。照片來自 LightCraft 程式產生的示範照片庫。
內建十八個手工打造的預設集(黃金時刻、青綠與橙色、褪色霧面、硒調色、清晰風景等),每個都有 0 到 200 % 的強度滑桿。你可以從任意一組設定儲存自己的預設集、加入喜好項目, 並在整個選取範圍中,只複製、貼上或同步你選定的那些群組。
一個不擋路的照片庫:所有照片、最近加入、精選照片、依日期、以巢狀收在資料夾裡的相簿,
以及最近刪除。用 0–5 評分,用 P / X /
U 加旗標,用 6–9 加色彩標籤。搜尋支援欄位語法:
rating:>3 flag:pick iso:>800 camera:x2 date:2026-04 keyword:mountains。每個檢視都能依拍攝日期、
匯入日期、編輯日期、名稱、評分、大小或隨機排序(一種穩定的亂序;「檢視 → 排序 → 重新隨機排序」可換一個順序)。
左右對齊的照片格狀檢視與方格檢視都經過虛擬化處理,
所以無論是四十張還是四萬張照片都一樣流暢。
![]() 照片格狀檢視,相簿以巢狀收在資料夾裡,附評分與旗標。示範照片庫。 |
![]() 四張公眾領域展示照片的方格檢視。 |
![]() 資訊面板:檔案、尺寸、評分、標題、圖說、著作權與相機中繼資料。NASA/比爾·安德斯,《地出》,阿波羅 8 號,1968(公眾領域)。 |
|
LightCraft 裡的每一個選單項目、滑桿、筆刷筆觸、裁切控點與按鍵,都是一個擁有穩定 ID 與 JSON 參數的指令。介面、鍵盤、CLI、JSON-lines 控制通道與一個 MCP 伺服器全都透過同一個入口分派。 代理可以挑片、顯影、為天空加上遮色片並匯出,而且能看到結果。
lightcraft --control 7980 ~/Pictures/trip-
指令註冊表。
engine.commands列出可用的指令;develop.controls列出每個滑桿的範圍、 預設值與目前值。 -
MCP 伺服器。
lightcraft-cli mcp把指令註冊表開放給 Claude(或任何 MCP 用戶端), 同時提供匯入、查詢、顯影、遮色片、算繪(以影像回傳)與匯出的輔助工具。它可以無介面執行,也可以附掛 到正在執行的應用程式上,支援截圖、點擊與手勢。詳見 docs/mcp.md。cargo build --release -p lightcraft-cli claude mcp add lightcraft -- "$PWD/target/release/lightcraft-cli" mcp ~/Pictures/shoot # 無介面 claude mcp add lightcraft-app -- "$PWD/target/release/lightcraft-cli" mcp --connect 127.0.0.1:7980 # 操作執行中的應用程式
-
可腳本化的 CLI:
lightcraft-cli run --import in.dng develop.set control=light.exposure value=0.7 app.export path=out.jpg longEdge=2048可執行任意指令鏈(無介面、對已儲存的照片庫,或對執行中的應用程式), 每條指令印出一行 JSON 結果;lightcraft-cli render in.dng -o out.jpg --set light.exposure=0.7 --preset …。 -
一切皆可復原,包括代理的操作:一次滑桿拖曳(或腳本中一連串的更新)算一步復原。
-
縮圖目錄(原生應用程式/CLI): 選取照片,然後 檔案 → 縮圖目錄 PDF…。可選擇 A4 或 Letter、橫向、 列數與欄數,以及檔名圖說;儲存分頁 PDF,再用你的 PDF 檢視器列印。匯出會套用目前的編輯,每張照片完整放入 而不再次裁切,以 150 dpi 和 sRGB 算繪。背景匯出支援取消,並保護原始檔案與 XMP 附屬檔案。從 CLI 呼叫:
lightcraft-cli run --import ~/Pictures/shoot library.selectAll export.contactSheet path=Contact.pdf paper=a4 columns=3 rows=4 captions=trueexport.contactSheet也接受明確的ids、landscape=true和paper=letter。只有在整份 PDF 成功產生之後, 它才會取代既有的輸出檔案。限制:1,000 張照片、100 頁、256 MiB;圖說使用與浮水印相同的字型涵蓋範圍來點陣化 (CJK 文字需要 craft-fonts),過長的名稱會在中間省略。 這是一套縮圖目錄工作流程, 不是印表機驅動程式或自訂拼版編輯器。 -
列印版面(原生應用程式/CLI): 檔案 → 列印… 會開啟「列印」模組的版面編輯器:單張照片、 縮圖目錄、相片包(自動版面會把格子排進頁面)與自訂相片包(拖曳並調整格子大小、堆疊順序、對齊格子或 格線),縮放填滿/旋轉以符合、相片邊框與內框線,紙張尺寸從 4 × 6 到 13 × 19 以及 A3 到 A5 或自訂, 邊界、以英吋/公分/公釐/點為單位的尺規、頁面背景、72–720 ppi,以及已儲存的範本。列印為 PDF… 會在背景算繪。一切都是
print.*指令 (print.get、print.set、print.cell.add、print.layout.autoLayout、print.exportPdf、print.template.save……),所以 CLI 和 MCP 也能操作它:lightcraft-cli run --import ~/Pictures/shoot print.set 'layout={"style":"picturePackage","page":{"paper":"8x10"}}' \ print.cell.add width=5 height=7 print.cell.add width=2.5 height=3.5 print.layout.autoLayout print.exportPdf path=Package.pdf
印表機色彩管理與頁面疊加層(身分標識、浮水印、頁碼)目前還沒有。
-
每個控制項都可定址(
ui.widgets)且可依名稱點擊,所以代理操作的是真實介面,而不是走旁門。 -
本 README 中的截圖全部由
docs/showcase/腳本全自動產生。 協定參考:docs/control-protocol.md。
- 純 Rust,無 C。 我們自己的 RAW 解碼器(DNG、Canon CR2/CR3、Sony ARW、Nikon NEF、Fujifilm RAF 含 X-Trans、
Panasonic RW2/Leica RWL、Pentax PEF、Olympus ORF),我們自己的色彩科學,我們自己的管線。JPEG、PNG、TIFF、WebP、
PSD 合成圖與 JPEG XL 現在就能開啟;加上
--features heif還能開啟 HEIC/HEIF 照片(HEVC 於建置時選用, 與 PhotoCraft 中一致)。 - 場景參考與寬色域。 內部使用線性 Rec.2020 浮點、Bradford 色彩適應的白平衡、以色域映射取代裁剪, raw 走底片式肩部曲線,未經改動的 JPEG 則採像素級直通。
- 解析度無關的編輯。 半徑與筆刷大小都相對於影像,所以 400 px 的預覽、你的 5K 顯示器和 60 MP 的匯出 看起來完全一致。
- GPU 加速,與 CPU 結果一致。 整條顯影管線都以 wgpu 計算核心執行(Metal/Vulkan/DX12), 並與 CPU 管線比對到 1/255 以內的誤差。在 24 MP 的 raw 上(Apple M4 Pro):一次滑桿更新約 4 ms 重新算繪, 冷啟動的 2.5 MP 放大檢視約 30 ms,全尺寸匯出約 0.3 秒(含平行 JPEG 編碼)。 沒有 GPU 時,同一條管線會在所有 CPU 核心上執行,只重做受滑桿影響的那些階段。批次匯出會同時算繪多張照片, 所以一張的解碼與編碼能和另一張的算繪重疊。
- 即時挑片。 開啟一張 raw 會在約 0.1 秒內顯示其內嵌的相機預覽或快取算繪結果,完整算繪隨後跟上 (24 MP 約 0.2–0.5 秒)。上一張與下一張會在背景準備好,因此瀏覽整批照片時每張約 50 ms。
- 背景算繪。 一個工作執行緒池在 UI 執行緒之外算繪放大檢視、編輯前/後對比與每一個可見縮圖: 拖曳時用草稿品質,放開後以完整品質算繪。
- 本機優先。 沒有帳號、沒有雲端、沒有遙測、沒有訂閱。你的目錄是一份只會附加寫入、可讀的操作紀錄, 可以比對差異、備份或重播。
LightCraft 還很年輕,而且進展飛快:Alpha 階段。老實說,我們目前的進度是(細節見路線圖和 docs/target-app-parity.md):
- 依功能數量計算,約達 Lightroom 的 81%(核心功能 98%),逐行記錄在 docs/parity-checklist.md。
- 作為日常取代 Lightroom 的工具,整體產品更接近 61%,對一般全職攝影師約 51%,一般休閒用途約 65%。 在單機上處理 JPEG/DNG,以及大多數 Sony/Panasonic/ Fujifilm/Nikon/較舊款 Canon 的 raw 都很出色;各機型詳情見 docs/raw-parity.md。
- 最大的缺口:
- 相機色彩校正: Sony、Nikon、Panasonic、Fujifilm 和 Canon CR3 的 raw 會從各自的相機 JPEG 得到受保護的估計值,內建 ILCA-99M2、ILCE-7CR、ILCE-7M4、X-H2S、X-T4、Nikon Z 6II、Z 8 和 D5300 描述檔;仍缺少實測校正,其他 raw 或被拒絕的擬合會保留中性矩陣;
- 壓縮的 Olympus raw 與不受支援的 CR3 變體: 這些在有內嵌 JPEG 預覽時會改用預覽畫面。Fujifilm 無損/有損壓縮 RAF 現在能解碼感光元件資料;驗證與現有照片庫重新載入說明;
- AI 遮色片與降噪: 主體與天空選取目前是傳統啟發式演算法;
- 網路照片庫: 預覽只讀取 raw 的標頭 — 或者,對於 CR3 或預覽標籤位於其後的 TIFF raw,只讀取稀疏規劃器指定的範圍 — 以及其內嵌的 JPEG(56.5 MB → 5.9 MB,10 秒 → 1 秒,測得於測試用的網路共用資料夾),但顯影後的畫面仍需要透過網路傳輸感光元件資料;詳見 docs/raw-preview-reads.md;
- 螢幕上的 HDR 顯示、影片,以及 Lightroom Classic 的列印、書冊與地圖模組。
- 接下來做什麼: 見依影響力排序的缺口和路線圖。
| 領域 | 狀態 |
|---|---|
| 照片庫:相簿、資料夾、智慧型相簿、堆疊(含自動堆疊)、虛擬副本、評分、旗標、標籤、篩選列、搜尋、排序、格狀檢視、底片顯示窗格 | ✅ |
| 挑片:比較(同步縮放)與總覽檢視、自動前進、即時預覽 | ✅ |
| 光線、色彩、效果(暗角樣式)、色調曲線(+ 細化飽和度、目標調整)、混色器(+ 目標調整)、點色彩、色彩分級、校正、黑白 | ✅ |
| 遮色片:筆刷、線性、放射狀、明度/色彩範圍、新增/減去/交集 | ✅(AI 主體/天空目前使用傳統啟發式演算法) |
| 裁切、拉直工具 + 自動拉直、翻轉、旋轉、長寬比、裁切疊加參考線 | ✅ |
| 描述檔(色彩、中性、鮮豔、風景、人像、單色:我們自己的風格)、預設集、版本、歷史紀錄、複製/貼上/同步設定 | ✅ |
| 相機色彩:DNG 檔案使用自帶矩陣 | ✅ DNG · 🚧 自家 Sony/Fujifilm 描述檔;缺少實測校正資料庫 |
| 原生 macOS 選單列(由指令註冊表產生)、控制通道 + 每個控制項可定址、無介面 UI 快照 | ✅ |
| RAW:DNG、CR2、CR3(無損 CRX Bayer 以及版本 0x100/0x200 的 C-RAW)、ARW、NEF(未壓縮 + 無損/有損壓縮,含有損壓縮經分割後的格式)、Fujifilm RAF(未壓縮 + 無損/有損壓縮,Bayer + X-Trans)、Panasonic RW2/Leica RWL/Panasonic RAW(所有 raw 格式,從 DMC-LX1 到 DC-S1RM2)、Pentax PEF、Olympus ORF(未壓縮,12.8 bpp)、Samsung SRW(未壓縮);所有格式皆支援內嵌預覽,含 CR3 | 🚧 · 其他 CR3 變體、壓縮 ORF/SRW 和 Nikon HE NEF 解碼 ⬜(raw 相容度) |
| 細節:銳利化、明度 + 色彩降噪 | ✅ · AI 降噪 🚧(Bayer,使用者自行安裝權重)、超解析度 ⬜ |
| 斑點移除/修復/仿製(自動取樣來源)、顯示斑點、紅眼與寵物眼校正(自動瞳孔偵測、眼神光) | ✅ · 內容感知填色、斑點圖釘編輯 🚧 |
| 匯出:JPEG/PNG/TIFF/WebP/AVIF/DNG/原始格式,尺寸調整、檔案大小上限、輸出銳利化、命名範本、批次處理、中繼資料政策、文字或影像浮水印 | ✅ |
| HDR:附餘裕上限的 HDR 編輯、SDR 呈現、視覺化 HDR;匯出為 ISO 21496-1 增益圖 JPEG、PQ AVIF 或 32 位元浮點 TIFF | ✅ · HDR 顯示 ⬜ |
| 照片庫持久化(防當機的操作紀錄 + 快照、背景壓縮、儲存失敗會回報)、磁碟縮圖快取 | ✅ |
| 匯入:原位置加入/複製/移動、重新命名與資料夾範本、裝置、重複檢測、監看資料夾;本機資料夾瀏覽 | ✅ |
| MCP 伺服器(無介面或執行中的應用程式、持久化照片庫)、CLI、控制通道 | ✅ |
XMP 附屬檔案(讀取/寫入、自動寫入)、讀取 crs: 顯影設定、預設集檔案(.lcpreset、XMP 預設集) |
✅ |
| 鏡頭校正(變形、暗角、自動 + 手動色差、去除邊緣色差、內嵌於 DNG 檔案的鏡頭校正資料、Panasonic/Leica RW2/RWL 變形資料以及 Nikon Z 6II/Z 8/Z f 變形資料)、幾何(變換、限制裁切範圍)、透視校正(自動/水平/垂直/完整/引導式) | ✅ · 相機鏡頭描述檔(我們自己的)⬜ |
| 照片合併:HDR(自動對齊、去除殘影)、全景(球面/圓柱/透視、邊界變形、自動裁切)、HDR 全景 → DNG | ✅ |
| GPU 管線(wgpu 計算,與 CPU 一致到 1/255 以內)、裝置限制/發生錯誤時改用 CPU | ✅ · 瀏覽器中的 WebGPU 🚧 |
| AI:分割遮色片、AI 降噪、超解析度、人臉;影片 | 🚧(見缺口清單) |
| 網頁版(透過 WASM 在瀏覽器中使用同一套介面):照片庫持久化於 OPFS/IndexedDB、Web Worker 算繪、匯出下載 | ✅ · WebGPU、Safari/Firefox 測試 🚧 |
✅ 現已可用 · 🚧 進行中 · ⬜ 尚未開始
建置整個工作區(含桌面、網頁與 CLI 應用程式)需要 Rust 1.95 或更新版本。
git clone https://github.com/storytold/lightcraft && cd lightcraft
cargo run --release -p lightcraft # 開啟你的照片庫(~/Pictures/LightCraft Library;新照片庫會先帶示範照片)
cargo run --release -p lightcraft -- ~/Pictures/trip # 匯入你的照片(掃描資料夾,跳過重複項目)
cargo run --release -p lightcraft -- --memory # 用完即丟的記憶體示範工作階段(不寫入任何內容)
cargo run --release -p lightcraft -- --control 7980 # 附帶自動化通道
cargo xtask web --serve # 在瀏覽器中執行同一個應用程式:http://127.0.0.1:8080/
cargo run --release -p lightcraft-cli -- render photo.jpg -o out.jpg --set light.exposure=0.5
cargo xtask ci # fmt、clippy、測試、分層、wasm 檢查CI 預設使用行表除錯資訊,並依啟動時可用記憶體每 1.5 GB 開一個建置工作
(每個 CPU 最多一個;讀不到記憶體時為 4 個),所以一台 8 GB、剩餘 6 GB 可用的機器會用 4 個任務建置,
而一台忙碌、剩餘記憶體很少的機器會用更少。測試執行緒數隨之調整,上限為 4。若不限制,每個 CPU 各跑
一個帶完整除錯資訊的連結器,測試還沒開始記憶體就會耗盡。GPU 測試的涵蓋範圍不受影響。明確設定
CARGO_PROFILE_DEV_DEBUG、CARGO_BUILD_JOBS 與 RUST_TEST_THREADS 會覆寫這些預設值。
日常開發指令保留各自的設定。
記憶體受限機器上的 release 建置: #1196
回報在一台 16 GB 的 Arch/AUR 機器上,同時建置桌面應用程式與 CLI,並啟用完整除錯資訊、thin LTO
及單一程式碼產生單元時,連結過程遭到 OOM 終止。上述 CI 預設值並不適用於一般的
cargo build --release。建議先用一個建置工作;若記憶體充足,可嘗試兩個:
CARGO_BUILD_JOBS=1 cargo build --release -p lightcraft -p lightcraft-cli
# 或者:CARGO_BUILD_JOBS=2 cargo build --release -p lightcraft -p lightcraft-cli如果打包環境啟用了完整除錯資訊或較耗記憶體的 LTO 設定,可以使用僅對本條指令生效的 覆寫設定,降低原始碼建置所需的記憶體:
CARGO_BUILD_JOBS=1 CARGO_PROFILE_RELEASE_DEBUG=0 CARGO_PROFILE_RELEASE_LTO=false CARGO_PROFILE_RELEASE_CODEGEN_UNITS=16 cargo build --release -p lightcraft -p lightcraft-cli這些 POSIX shell 賦值只影響這一條指令,不會變更全域 Cargo 設定或儲存庫的 release profile。
停用 LTO 可能改變效能與二進位檔大小;停用除錯資訊會減少可用的除錯細節。這是建置建議,
並不保證任何機器都有足夠的記憶體。下游打包者應逐一建置大型二進位檔、不要同時進行,並避免在低記憶體
的建置機器上同時使用完整除錯資訊、LTO 與單一程式碼產生單元。自行匯出 profile 設定的
PKGBUILD 可能會覆寫繼承的環境變數;請在本機調整打包腳本或聯絡維護者,而不要假設替
makepkg 加上環境變數前綴就能優先生效。
測試在缺少 GPU、語料庫、craft-fonts 字型或模型時會直接通過而不檢查任何內容(libtest 沒有「已跳過」
這個狀態),所以 cargo xtask ci 會把它們列出來:測試會用 lightcraft_testkit::skip! 記錄跳過原因,
執行結束時會列出機器提供的環境(作業系統、CPU、記憶體、每個後端的 GPU 配接器、語料庫、字型)以及每一項
跳過的原因。它會寫入 target/ci/report.json 和 target/ci/summary.md,後者是可直接貼進 PR 的
Markdown 區塊(--summary-md 會把它印出來);--hardware 還會在每個有實體配接器的後端上執行
GPU 測試。不會上傳任何內容。
中文與日文文字需要共用字型儲存庫,這是一個可選的建置輸入(所有正式發布版都會包含它):
git clone https://github.com/storytold/craft-fonts ../craft-fonts
CRAFT_FONTS_DIR=../craft-fonts cargo run --release -p lightcraft不指定它時,LightCraft 一樣能建置與執行,只是中文和日文文字沒有字形。字型從不提交到 本儲存庫,字型的收錄規範記載在該儲存庫:見 craft-fonts README。
介面語言: 編輯 → 語言(English、简体中文、繁體中文(台灣)、日本語、Português (Brasil)、Español、Deutsch、Русский、Français、Українська、Čeština、ქართული)或 設定 → 一般 → 語言;選擇後立即生效並會保留。詳見 docs/localization.md。
記錄檔: 桌面應用程式會把記錄檔寫到標準錯誤輸出,以及設定資料夾裡的 logs/lightcraft.log
(Linux $XDG_CONFIG_HOME/lightcraft/logs/,預設為 ~/.config/lightcraft/logs/;macOS
~/Library/Application Support/LightCraft/logs/;Windows %APPDATA%\LightCraft\logs\),絕不會寫進照片庫裡。
可攜模式: 在執行檔旁放一個名為 portable.txt(或 LightCraft.portable)的檔案,會把設定
資料夾移到執行檔旁的 LightCraftData。從桌面選單或 Dock 啟動沒有終端機,所以請把這個檔案附在
錯誤回報裡(說明 ▸ 開啟記錄資料夾 會在檔案管理員中顯示它)。每次啟動會把
上一個記錄檔移到 lightcraft.1.log,再上一個移到 lightcraft.2.log,這樣當機那次的記錄檔就能在下次啟動後
保留下來;檔案到 16 MiB 就會停止增長,--version 和 --help 不會寫記錄檔,帶
LIGHTCRAFT_NO_PREFS 執行時只會寫到標準錯誤輸出。預設情況下,LightCraft 自己的 crate 會記錄到 info
層級,其他一切則記錄到 warn。LIGHTCRAFT_LOG=info 或 debug 的行為和以前一樣(LightCraft 自己的 crate
用該層級,其餘只記警告與錯誤;其他值:只記警告與錯誤),並且優先於 RUST_LOG;未設定 LIGHTCRAFT_LOG 時,RUST_LOG 會把預設值換成
env_logger 風格的指令,例如 RUST_LOG=debug 或 RUST_LOG=warn,lightcraft_pipeline=trace(以
* 結尾的指令會涵蓋所有以它開頭的目標,如 lightcraft*=debug)。panic 一樣會記錄在那裡,
並且仍然會寫在暫存資料夾裡的 lightcraft-panics.log。記錄器程式碼位於 apps/lightcraft/src/logging.rs。
網頁版需要 wasm32-unknown-unknown target 以及對應版本的 wasm-bindgen CLI
(cargo xtask web 會印出確切的安裝指令);詳見 docs/web.md。
Nix 會建置桌面應用程式與 lightcraft-cli(Nix 建置永遠包含 craft-fonts 輸入,所以日文
文字有字形):
nix run github:storytold/lightcraft # 桌面應用程式
nix build github:storytold/lightcraft # → ./result/bin/{lightcraft,lightcraft-cli}
nix develop github:storytold/lightcraft # rust 工具鏈 + 原生相依套件 + 字型在 NixOS 上,請從 nix develop 執行 cargo 建置:在它之外,應用程式找不到 libvulkan.so.1,
偵測不到 GPU,會改用 CPU 算繪(啟動時會印出一次提示,說明這樣會慢很多)。nix run 和 nix build
會自行設定好路徑。
在 flake 設定中(NixOS、home-manager、nix-darwin):
# flake.nix
inputs.lightcraft.url = "github:storytold/lightcraft";
# 選用:使用你自己的 nixpkgs,而不是 LightCraft 鎖定的那個
# inputs.lightcraft.inputs.nixpkgs.follows = "nixpkgs";
# 然後在 NixOS 或 home-manager 模組中(`inputs` 在作用範圍內):
nixpkgs.overlays = [ inputs.lightcraft.overlays.default ]; # 讓 `pkgs.lightcraft` 可用
environment.systemPackages = [ pkgs.lightcraft ]; # home-manager:home.packages = [ pkgs.lightcraft ];nix build 會安裝與 .deb/.rpm 相同的 desktop 檔案、hicolor 圖示和 AppStream 中繼資料,並執行
cargo test --workspace 作為其檢查階段(用 pkgs.lightcraft.overrideAttrs { doCheck = false; } 跳過)。
鍵盤: G 格狀檢視 · D 詳細檢視 · E 編輯 · C 裁切 · M 遮色片 · Shift+P 預設集 · \ 原圖 · Y 編輯前/後 · Z 縮放 · J 顯示溢色 · ⌘Z 復原 · ⌘/ 全部快速鍵。
一個引擎優先的 Cargo 工作區,由一群小而經過測試的 crate 組成,並強制分層(cargo xtask layers):geom、
color、raster、tiff → raw、codecs、meta、develop → pipeline → catalog → engine → ui-egui。
egui 前端是一個可替換的 crate;它之下沒有任何東西知道 UI 的存在。mcp 和各個應用程式(lightcraft、
lightcraft-cli)則坐落在 engine 之上。
人類與代理遵循同一套規則,所以請先讀 AGENTS.md。重點如下:
- 淨室。 絕不閱讀 Adobe 的二進位檔或 GPL 的 raw/照片程式碼(darktable、RawTherapee、LibRaw、rawspeed、dcraw……); 只依據公開規格與黑盒觀察來工作。
- 絕不使用 Adobe 資產: 不使用 Adobe 產品的圖示、截圖、預設集、描述檔、LUT 或字型。儲存庫中的每一張 影像、圖示和字型都是原創、公眾領域、創用 CC、OFL 或寬鬆授權的,並在同一次提交中 於 assets/ATTRIBUTION.md 新增條目。新的字型要提交到 storytold/craft-fonts,而不是這裡。
- 純 Rust、強制的 crate 分層、一切皆指令,並且每次提交前
cargo xtask ci都必須通過 (一次提交對應一個任務 ID)。 - 絕不當機。 非測試程式碼要回傳錯誤而不是 panic:不使用
unwrap()、expect()、panic!或unsafe,對任何來自輸入的資料都做受檢的索引存取,並且每一個當機修復都要附一個回歸測試。細節見 AGENTS.md。
有問題、想法,或是想先討論一個 bug?來 Discord。
第一次使用 LightCraft? 從 getartcraft.com 的 LightCraft 頁面下載。那是最簡單的安裝方式。
想要特定的建置版本或格式? 在 GitHub 上,最新發布版包含下面列出的所有建置版本,所有發布版則有更早的版本與其說明。檔名中的 <ver> 是版本號,SHA256SUMS.txt 列出了每個檔案的檢查碼。
| 建置版本 | 安裝程式 | 可攜版 |
|---|---|---|
| x64(64 位元 Intel/AMD) | lightcraft-<ver>-windows-x64.msi |
lightcraft-<ver>-windows-x64-portable.zip |
| arm64(Snapdragon 及其他 ARM PC) | lightcraft-<ver>-windows-arm64.msi |
lightcraft-<ver>-windows-arm64-portable.zip |
| x86(32 位元) | lightcraft-<ver>-windows-x86.msi |
lightcraft-<ver>-windows-x86-portable.zip |
安裝程式與執行檔都有程式碼簽章。安裝程式會詢問安裝位置(預設為
C:\Program Files\LightCraft;升級時會留在你選擇的資料夾),結束時會有一頁確認 LightCraft 已安裝,
並可選擇立即啟動。無訊息安裝:msiexec /i lightcraft-<ver>-windows-x64.msi /qn INSTALLFOLDER="D:\Apps\LightCraft\"。
| 建置版本 | 檔案 | 備註 |
|---|---|---|
| 應用程式,通用版(Apple 晶片 + Intel) | lightcraft-<ver>-macos-universal.dmg |
已簽章並經過公證 |
| 命令列工具,通用版 | lightcraft-cli-<ver>-macos-universal.zip |
已簽章並經過公證 |
| 格式 | x86_64 | aarch64(ARM64) | 備註 |
|---|---|---|---|
| AppImage | lightcraft-<ver>-linux-x86_64.AppImage |
lightcraft-<ver>-linux-aarch64.AppImage |
隨處可執行;用 AppImageUpdate(.zsync 檔案)自我更新 |
| Flatpak | lightcraft-<ver>-linux-x86_64.flatpak |
lightcraft-<ver>-linux-aarch64.flatpak |
沙箱化;flatpak install --user <file> |
| Debian/Ubuntu | lightcraft-<ver>-linux-x86_64.deb |
lightcraft-<ver>-linux-aarch64.deb |
|
| Fedora/RHEL/openSUSE | lightcraft-<ver>-linux-x86_64.rpm |
lightcraft-<ver>-linux-aarch64.rpm |
|
| 壓縮檔 | lightcraft-<ver>-linux-x86_64.tar.gz |
lightcraft-<ver>-linux-aarch64.tar.gz |
解壓到任意位置即可使用 |
RISC-V(riscv64):lightcraft-<ver>-linux-riscv64.tar.gz,僅提供壓縮檔(glibc 2.39 或更新版本,例如 Ubuntu 24.04+)。
在 Wayland 桌面環境中,LightCraft 會在可用時透過 XWayland 執行,因為只有 X11 支援
視窗的檔案拖放;設定 LIGHTCRAFT_WAYLAND=1 可改用原生 Wayland(更清晰的小數縮放,但無法拖放)。
| 建置版本 | 檔案 |
|---|---|
| x86_64 | lightcraft-<ver>-freebsd-x86_64.tar.gz |
| 建置版本 | 檔案 | 備註 |
|---|---|---|
| 靜態網站 | lightcraft-web-<ver>.zip |
可在現代瀏覽器中執行;可託管在任何靜態伺服器上 |
LightCraft 是 Crafting Apps 之一:來自 ArtCraft 團隊的免費開源創作工具, 每一個都用 Rust 從零開始撰寫,每一個都能獨立使用。
| 應用程式 | 用途 | 程式碼 | 了解更多 | |
|---|---|---|---|---|
| PhotoCraft | 影像編輯:圖層、遮色片、文字和真正的 PSD 檔案 | GitHub | 網站 | |
| VectorCraft | 向量插畫 | GitHub | 網站 | |
| FilmCraft | 影片剪輯、調色與聲音 | GitHub | 網站 | |
| LightCraft | 照片庫與 raw 顯影 · 你現在在這裡 | GitHub | 網站 | |
| PdfCraft | 閱讀、整理與保護 PDF | GitHub | 網站 | |
| EffectCraft | 動態圖形與視覺特效 | GitHub | 網站 | |
| DesignCraft | 版面編排與出版 | GitHub | 網站 |
還有 ArtCraft 本身,我們為想要真正掌控創作的人打造的 AI 影像與影片工作室。
我們的 Discord 是各種創作者聚集的地方:畫畫的人、拍照的人、做動畫的人、剪片子的人、 排版的人,還有仍在摸索自己喜歡做什麼的人。分享你在做的東西, 尋求幫助,告訴我們哪裡壞了,或者告訴我們你希望這些工具能做到什麼。 不管你用什麼媒材,也不管你做了多久,這裡都歡迎你。
discord.gg/artcraft · getartcraft.com · The Crafting Apps · LightCraft
LightCraft 採用 MIT 或 Apache-2.0 雙重授權,任你選擇。 Copyright (c) 2026 ArtCraft Team and the LightCraft contributors。必要的聲明見 NOTICE。
隨附的字型、圖示、影像與其他資產保留各自的開放授權;每一項都在 assets/ATTRIBUTION.md 中列出了作者、來源與授權。
展示用照片皆為公眾領域作品,取自 Wikimedia Commons:安瑟·亞當斯,《提頓山脈與蛇河》 (1942,美國國家檔案館);桃樂絲·蘭格,《移民母親》(1936,美國國會圖書館);比爾·安德斯/NASA, 《地出》(1968);NASA,《藍色大理石》(1972)。示範照片庫由 LightCraft 程式產生。介面字型: Inter(SIL OFL 1.1)。使用 craft-fonts 建置的版本(所有正式發布版) 還會內嵌其中文與日文字型(Noto Sans CJK SC、BIZ UDPGothic、BIZ UDMincho、Shippori Mincho;SIL OFL 1.1),列於其 ATTRIBUTION.md 中。所有圖示皆為原創。
docs/brand/ 中的 ArtCraft 名稱、字標與標誌是
ArtCraft 團隊的商標,不在本授權範圍內。它們只能以未經修改的形式,作為
本儲存庫與 LightCraft 的一部分,依 docs/brand/LICENSE-brand.txt 使用。
分支與修改版本必須移除它們。
Adobe、Photoshop、Illustrator、Premiere Pro、Lightroom、Acrobat、After Effects 與 InDesign 是 Adobe Inc. 在美國及/或其他國家的商標或註冊商標。LightCraft 是一個獨立的開源專案,與 Adobe Inc. 沒有任何關係,也未獲其贊助或認可;這些名稱僅用於說明它所相容的工作流程。
由 ArtCraft 團隊與社群製作。
照片庫、工具與預設集面板可以重新分組、拆分、浮動於應用程式視窗內、關閉與重新開啟。工具面板會保留目前的編輯/裁切/遮色片模式;照片檢視區與底片顯示窗格則維持在一起。拖曳面板標題到某個目標邊緣或另一個標題上即可調整。右鍵選單提供「浮動面板」、「移至群組」與「關閉面板」。既有的面板切換按鈕會在上次儲存的位置重新開啟面板;「重設面板配置」則會還原應用程式的版面配置。浮動面板會保持在目前的應用程式視窗之內。










{"method": "engine.execute", "params": {"command": "photo.flag", "params": {"flag": "pick"}}} {"method": "engine.execute", "params": {"command": "develop.set", "params": {"values": {"light.highlights": -45, "light.shadows": 38}}}} {"method": "engine.execute", "params": {"command": "mask.add", "params": {"kind": "radial", "center": [0.62, 0.4], "rx": 0.2, "ry": 0.14}}} {"method": "ui.clickWidget", "params": {"id": "slider:effects.clarity"}} // 依名稱操作任意控制項 {"method": "ui.pointer", "params": {"events": [{"kind":"down","x":0.2,"y":0.3}, {"kind":"up","x":0.4,"y":0.3}]}} {"method": "ui.screenshot", "params": {"path": "after.png"}}