Releases: jhangyu/halcyon
Release list
v1.0.10
Highlights
Linux is now a first-class desktop target: the system-trash, "Open With" and memory-pressure bridges are registered natively, and deleting a photo falls back to an in-folder recycle bin wherever a system trash bridge is unavailable. Build and release integrity gained several checks, and the native decoder package moved to ceyx v0.1.24.
✨ Added
- Linux: registered the
halcyon/trash,halcyon/open_withand memory-pressure method channels, plus desktop MIME type associations - Per-PR CI build matrix grown from two macOS legs to four
🛠 Fixed & Improved
- Deleting a photo now falls back to the in-folder recycle bin (
.trash/) when the system trash bridge is absent, instead of failing - Windows: the decoder's OpenMP runtime (
libomp140.x86_64.dll) is now fetched, checksum-verified and placed alongside the decoder. The decoder has always imported it; until now it silently relied on the DLL already being present from a machine-wide Visual Studio or Visual C++ redistributable install - The native-library pin now records why an artifact was or was not placed, and classifies shared-path artifacts belonging to another architecture correctly
- Build-time pin preflight: member-set equality is asserted, and the FFI export gate no longer accepts a stale result
- The fetch-native gate now also runs on the Linux CI leg
⚙️ Internal / Build
- ceyx native decoder bumped v0.1.23 → v0.1.24 (both halves of the pin — the checksum pin file and the workflow checkout ref — moved together)
- ceyx v0.1.24 removes the public RAW diagnostics API. Verified to be a no-op for Halcyon: there are zero references to it anywhere in the app or its tests
- ceyx v0.1.24 also removes the lcms2 dependency, so the macOS library set is one file smaller
- Completed the
photo_selector_flutter→halcyonrename on Linux, deduplicated the export isolate closures, and cleaned up stale comments and README wording
⚠️ Known limitations
- The Windows library set is not self-contained. This release closes one of the two missing runtime dependencies (the OpenMP runtime, above); the remaining one is the Microsoft Visual C++ runtime (
VCRUNTIME140.dll/VCRUNTIME140_1.dll), whichlibomp140.x86_64.dllitself imports and which is still not shipped. A Windows machine without a Visual C++ redistributable installed can therefore still fail to load the decoder. This gap is pre-existing, not new in this release - ceyx v0.1.24 makes the decode pool's buffer-pool field non-nullable with a default. The app absorbs this correctly at runtime, but it silently invalidated the premise of one regression test (
pool_wiring_test's R6-AC2), whose assertions can no longer fail. That guard against a silent pooled-route regression is currently disarmed and is scheduled for repair; the sibling assertion in the same file (R6-AC3, the shrink-to-trim hook) is unaffected and still binds
版本重點
Linux 成為正式支援的桌面平台:系統垃圾桶、「開啟方式」與記憶體壓力三組原生橋接皆已註冊,且在缺少系統垃圾桶橋接的環境中,刪除照片會改用資料夾內的回收區。建置與發佈流程新增多項完整性檢查,原生解碼套件同時升級至 ceyx v0.1.24。
✨ 新增
- Linux:註冊
halcyon/trash、halcyon/open_with與記憶體壓力三組方法通道,並加上桌面 MIME 類型關聯 - 每次 PR 的 CI 建置矩陣由兩個 macOS 項目擴充為四個
🛠 修正與改善
- 系統垃圾桶橋接不存在時,刪除照片改為退回資料夾內回收區(
.trash/),不再直接失敗 - Windows:解碼器所需的 OpenMP 執行環境(
libomp140.x86_64.dll)現在會一併抓取、驗證校驗和並放置到解碼器旁。解碼器一直都會載入它,先前只是默默依賴目標機器上已安裝的 Visual Studio 或 Visual C++ 可轉散發套件提供 - 原生函式庫的版本鎖定檔新增「是否已放置及其原因」欄位,並正確分類屬於其他架構的共用路徑產物
- 建置前的版本鎖定預檢:新增成員清單一致性斷言,FFI 匯出檢查不再採信過期結果
- 原生函式庫抓取檢查現在也會在 Linux 的 CI 項目上執行
⚙️ 內部/建置
- ceyx 原生解碼套件由 v0.1.23 升級至 v0.1.24(版本鎖定的兩個部分——校驗和鎖定檔與工作流程的 checkout 參考點——同步更新)
- ceyx v0.1.24 移除了公開的 RAW 診斷 API。經查證對 Halcyon 沒有任何影響:程式碼與測試中皆無任何引用
- ceyx v0.1.24 同時移除 lcms2 相依套件,因此 macOS 的函式庫組合少了一個檔案
- 完成 Linux 上
photo_selector_flutter→halcyon的更名、合併重複的匯出隔離區程式碼,並清理過期註解與 README 用字
⚠️ 已知限制
- Windows 的函式庫組合並非自足。本次釋出補齊了兩個缺漏執行環境中的一個(即上述的 OpenMP 執行環境);另一個仍缺的是 Microsoft Visual C++ 執行環境(
VCRUNTIME140.dll/VCRUNTIME140_1.dll),它正是libomp140.x86_64.dll自身所需載入的對象,目前仍未一併發佈。因此未安裝 Visual C++ 可轉散發套件的 Windows 機器仍可能無法載入解碼器。此缺口既有存在,並非本次新增 - ceyx v0.1.24 將解碼池的緩衝區池欄位改為不可為空並帶有預設值。應用程式在執行期正確吸收了這項變更,但它悄悄使某個回歸測試(
pool_wiring_test的 R6-AC2)的前提失效,該測試的斷言已不可能失敗。這道防止解碼池路徑靜默退化的防線目前形同失效,已排入修復;同檔案中的另一項斷言(R6-AC3,收縮後釋放記憶體的掛鉤)不受影響,仍然有效
v1.0.9
Highlights
Updated the native decoder package with stronger download-integrity checks, and fixed a memory-release timing coupling issue.
🛠 Fixed & Improved
- Memory release (working-set trim) now waits until the decode pool has actually finished shrinking before firing, avoiding a timing mismatch
- Added a build-time checksum comparison: a mismatched or corrupted native decoder download now triggers an automatic re-fetch
⚙️ Internal / Build
- ceyx native decoder bumped to v0.1.22 (pool idle-shrink), then to v0.1.23
- Added exception handling and tests for pin-mismatch cases
版本重點
更新原生解碼套件並強化下載完整性檢查,同時修正記憶體釋放時機的耦合問題。
🛠 修正與改善
- 記憶體釋放(working-set trim)改為等到解碼池真正收縮完成後才觸發,避免時機錯位
- 新增建置時的校驗和比對機制,原生解碼庫版本不符或下載毀損時會自動重新抓取
⚙️ 內部/建置
- ceyx 原生解碼套件升級至 v0.1.22(記憶體池閒置自動收縮),再升級至 v0.1.23
- 新增版本不符時的例外處理與對應測試
v1.0.8
Highlights
Image cache strategy now retains only the resolution actually needed, cutting memory footprint significantly, and a system memory-pressure auto-downgrade mechanism was added.
✨ Added
- System memory-pressure detection: under pressure, the cache budget and far-band retention automatically shrink
- A per-kind payload capture instrument to help diagnose memory usage
🛠 Fixed & Improved
- Image cache now retains only decoded pixels, no longer double-retaining a window-resolution copy — lowers memory footprint
- Fixed a case where an evicted full-size image could fail to republish for display
- Sidebar thumbnails now evict the duplicate low-res tile once the full-size image is ready
⚙️ Internal / Build
- ceyx native decoder bumped to v0.1.21
- Refreshed README project intro and screenshots
- CI log-upload steps now continue-on-error instead of failing the whole run
版本重點
圖片快取策略調整為只保留必要解析度,大幅降低記憶體占用,並加入系統記憶體壓力自動降載機制。
✨ 新增
- 新增系統記憶體壓力偵測,壓力大時自動縮減快取預算與遠端縮圖保留範圍
- 新增依相片種類分類的資料量統計工具,方便診斷記憶體使用狀況
🛠 修正與改善
- 圖片快取只保留已解碼像素,不再重複保留視窗解析度版本,降低記憶體占用
- 修正部分情況下已被清除的全尺寸圖片無法重新顯示的問題
- 側欄縮圖在全尺寸圖片就緒後,自動淘汰重複的低解析度縮圖
⚙️ 內部/建置
- ceyx 原生解碼套件升級至 v0.1.21
- 更新 README 專案介紹與截圖
- CI 上傳紀錄步驟改為失敗不中斷整個流程
v1.0.7
Highlights
Updated the native decoder package and cleaned up legacy decode-pool toggle code; no user-visible new features.
⚙️ Internal / Build
- ceyx native decoder bumped to v0.1.19, then to v0.1.20
- Removed dead decode-pool kill-switch code
- CI's decode-capability symbol check now points at the renamed function
版本重點
更新原生解碼套件並清理過時的解碼池切換程式碼,不含使用者可見的新功能。
⚙️ 內部/建置
- ceyx 原生解碼套件升級至 v0.1.19,隨後再升級至 v0.1.20
- 移除已停用的解碼池開關(kill-switch)舊程式碼
- CI 針對解碼能力的符號檢查對應到新的函式名稱
v1.0.6
Highlights
Native orientation-correcting decode is now live in production, and performance-measurement tooling accuracy was improved.
✨ Added
- The orientation-correcting decoder is now wired into the production path (replacing the earlier experimental wiring)
🛠 Fixed & Improved
- Fixed a measurement gap in the performance-analysis tool for full-frame redraws and zero-submit cases
⚙️ Internal / Build
- ceyx native decoder bumped to v0.1.17
版本重點
原生方向校正解碼功能正式上線,並補強效能量測工具的準確度。
✨ 新增
- 原生方向校正解碼器正式接入正式版本(取代先前的實驗性接線)
🛠 修正與改善
- 修正效能分析工具在全畫面重繪與零提交情境下的量測缺口
⚙️ 內部/建置
- ceyx 原生解碼套件升級至 v0.1.17
v1.0.5
Highlights
Added native orientation-correcting decode support, and fixed build/memory-release issues on Intel Macs.
✨ Added
- DNG decoding now applies orientation correction natively: photos come out of decode already correctly rotated per their EXIF orientation, no extra rotation step needed
🛠 Fixed & Improved
- Fixed a dangling-reference issue in the macOS memory-release suppression logic
⚙️ Internal / Build
- Added a macOS Intel (x64) CI leg with decoder architecture and symbol assertions
- Hardened the staged-decoder architecture check to avoid using a library built for the wrong architecture
版本重點
新增原生方向校正解碼支援,並修正部分 Intel Mac 的建置與記憶體釋放問題。
✨ 新增
- DNG 解碼支援原生方向校正:相片會依 EXIF 方向直接解出正確朝向,不需額外旋轉步驟
🛠 修正與改善
- 修正 macOS 記憶體釋放抑制邏輯遺漏的參照問題
⚙️ 內部/建置
- 新增 macOS Intel(x64)CI 建置,含解碼庫架構與符號驗證
- 強化 staged 解碼庫的架構檢查,避免誤用錯誤架構的函式庫
v1.0.4
Highlights
Core image-pipeline refactor to cut memory usage and duplicate decoding, plus CI switched to a "compile-only" mode.
🛠 Fixed & Improved
- Image pipeline moved to unified payload ownership management, reducing races and potential memory leaks
- Worker-thread counts for each stage (encode, thumbnail derivation) are now derived from a single source tied to the user's decode-width setting
- Added a per-frame publish byte-quota to prevent bursts of data from causing jank
- Fixed a possible crash from an EXIF notification firing after a photo selection was disposed
- Sidebar thumbnail encoding now reuses a persistent worker thread, speeding up sidebar thumbnail generation
⚙️ Internal / Build
- CI switched to compile-and-package only; the full test suite no longer runs in CI (user decision)
- ceyx native decoder bumped to v0.1.16
- Image-pipeline test files consolidated (60 files merged down to 15)
版本重點
圖片處理管線核心重構,降低記憶體用量與重複解碼,並將 CI 改為「僅編譯」模式。
🛠 修正與改善
- 圖片處理管線改為統一的資料所有權管理,減少競態與潛在記憶體洩漏
- 依使用者設定的解碼路數,統一推導各階段(編碼、縮圖產生)的工作執行緒數量
- 新增每畫面發佈資料量配額,避免瞬間大量資料湧入造成卡頓
- 修正切換相片後、視窗即將關閉前可能發生的 EXIF 通知崩潰問題
- 縮圖編碼改用常駐工作執行緒,加快側欄縮圖產生速度
⚙️ 內部/建置
- CI 改為僅編譯與封裝,不再於 CI 中執行完整測試套件(使用者裁定)
- ceyx 原生解碼套件升級至 v0.1.16
- 圖片管線測試檔案大量整併(60 個檔案整併為 15 個)
v1.0.3.5
Highlights
Added three switchable interface themes (Gallery, Darkroom, Paper), significantly tuned image-publish scheduling and memory-release timing during browsing, and turned on automated release publishing.
✨ Added
- Three new desktop/mobile interface themes: Gallery, Darkroom, and Paper, each with its own filmstrip, EXIF caption corner, and action-menu layout
- New Appearance settings tab to switch layout theme and light/dark/system mode
- CI now auto-creates a GitHub release from the version number after a green run (no more manual releases)
🛠 Fixed & Improved
- Image-publish scheduling is now idle-priority and frame-budget-paced, keeping fast browsing smooth instead of janky
- Fixed occasional duplicate decodes and a race condition when rapidly switching photos
- Fixed keyboard navigation in Darkroom/Paper themes not auto-scrolling the filmstrip to the currently selected photo
- Fixed the memory-release (working-set trim) mechanism not firing in some cases
⚙️ Internal / Build
- Windows CI test repairs and stabilization
- ceyx native decoder bumped to v0.1.14
- Substantial performance-diagnostics tooling and test hardening
版本重點
新增三種可切換的介面主題(藝廊、暗房、相紙),大幅優化瀏覽時的圖片發佈排程與記憶體釋放時機,並開始自動化版本發佈流程。
✨ 新增
- 新增三種桌面/行動版介面主題:藝廊(Gallery)、暗房(Darkroom)、相紙(Paper),各自有專屬的縮圖列、EXIF 角標與操作選單佈局
- 新增外觀設定分頁,可切換版面主題與淺色/深色/跟隨系統
- CI 測試綠燈後自動依版本號建立發佈(不再需要手動發版)
🛠 修正與改善
- 圖片發佈排程改為閒置優先、依畫面預算節流,快速瀏覽時更順暢不卡頓
- 修正快速切換相片時偶發的重複解碼與競態問題
- 修正鍵盤導覽在暗房/相紙主題下未自動捲動至目前選取相片的問題
- 修正記憶體釋放機制在部分情況下未生效的問題
⚙️ 內部/建置
- Windows CI 測試修復與穩定化
- ceyx 原生解碼套件升級至 v0.1.14
- 大量效能診斷工具與測試補強
v1.0.3
Highlights
Hardened integrity verification for the macOS native decoder library, and simplified parallel-decode configuration.
🛠 Fixed & Improved
- Added a three-stage check that verifies the re-signed macOS decoder library is still intact and usable
- Removed automatic parallel-decode capability probing; the user now sets 1–8 lanes directly
⚙️ Internal / Build
- Build now asserts that a locally-compiled decoder library exports the required FFI symbols
- Pinned ceyx v0.1.10
版本重點
強化 macOS 原生解碼函式庫的完整性驗證,並簡化平行解碼設定。
🛠 修正與改善
- 新增三段式驗證,確保重新簽章後的 macOS 解碼庫仍完好可用
- 移除平行解碼能力自動偵測,改由使用者自行設定 1–8 路
⚙️ 內部/建置
- 建置時檢查本機編譯的解碼庫是否正確輸出必要的介面函式
- 釘選 ceyx v0.1.10
v1.0.2
Highlights
A large feature and cleanup release: a brand-new tabbed Settings window (Performance/Memory, Export, Appearance), multi-format export, customizable keyboard shortcuts, across-the-board image pipeline performance work, and the CI build system rewritten in Python.
✨ Added
- Brand-new tabbed Settings window: Performance & Memory, Export format/quality, Appearance theme
- Export photos in six formats (with EXIF preserved), with adjustable export quality and size
- Import support for AVIF (via libheif) and JXL
- Customizable keyboard shortcut bindings
- Adjustable parallel decode width (1–8), auto-estimated from available memory and CPU core count
🛠 Fixed & Improved
- Fixed Sony ARW embedded thumbnails failing to extract
- Fixed the app icon on Windows/Linux/iOS (previously only macOS was correct)
- Raised the image cache budget ceiling (512/384/256 MiB) for smoother browsing of large sets
- Fixed cross-platform physical memory reads (removed the macOS-only channel that left other platforms blind)
- Eliminated a race that caused duplicate decodes of the same full-size image across threads
- Sidebar thumbnails now derive from the shared quality-normalized cache, speeding up display
⚙️ Internal / Build
- CI build system rewritten in Python, replacing the previous scattered shell/PowerShell scripts
- ceyx native decoder bumped repeatedly (v0.1.3 → v0.1.7), now fetched as a full tarball with a lockfile cross-check
- Substantial test coverage additions and cleanup
版本重點
大型功能與整理版本:全新分頁式設定視窗(效能/記憶體、匯出、外觀)、多格式匯出、可自訂鍵盤快捷鍵、圖片處理管線效能全面優化,並將 CI 建置系統重寫為 Python。
✨ 新增
- 全新分頁式設定視窗:效能與記憶體、匯出格式與品質、外觀主題
- 支援六種相片匯出格式(含 EXIF 保留),可調整匯出品質與尺寸
- 匯入支援 AVIF(透過 libheif)與 JXL
- 可自訂鍵盤快捷鍵綁定
- 可調整平行解碼路數(1–8),依可用記憶體與 CPU 核心數自動估算合理上限
🛠 修正與改善
- 修正 Sony ARW 內嵌縮圖無法擷取的問題
- 修正 Windows/Linux/iOS 應用程式圖示錯誤(先前僅 macOS 正確)
- 提升圖片快取容量上限(512/384/256 MiB),大量瀏覽更流暢
- 修正跨平台讀取實體記憶體大小的方式(移除僅限 macOS 的作法,其他平台先前讀不到)
- 消除多執行緒同時處理同一張全尺寸圖片時的重複解碼問題
- 側欄縮圖改由共用畫質快取衍生,加快顯示速度
⚙️ 內部/建置
- CI 建置系統重寫為 Python,取代原本分散的 shell/PowerShell 腳本
- ceyx 原生解碼套件多次升級(v0.1.3 → v0.1.7),改為完整下載並用鎖定檔交叉驗證完整性
- 大量測試案例補強與整理