Releases: RajwanYair/ExplorerLens.io
Release list
ExplorerLens v40.0.1 — Procyon
ExplorerLens v40.0.1 — Procyon
Phase 2 GPU Stubs: DXVA2 JPEG, D3D11 Device Manager, Vulkan Resize Pipeline (S311–S320)
New Files
- Engine/GPU/D3D11DeviceManager.cpp (S319) — Phase 2 D3D11 device manager stub; \IsReady()\ returns \alse\ until S330+ activates the real COM device path
- Engine/GPU/DXVA2JpegDecodeContract.h (S312) — DXVA2 hardware JPEG decode contract; falls back to WIC/libjpeg-turbo when DXVA2 GPU not available
- Engine/GPU/Dxva2JpegSession.h (S313) — DXVA2 session wrapper stub
- Engine/GPU/Dxva2SurfacePool.h (S314) — DXVA2 surface pool contract stub
- Engine/GPU/GpuVendorRoutingContract.h (S315) — Vendor routing contract stub (NVDEC/QuickSync/AMF)
- Engine/GPU/VulkanResizePipelineContract.h (S316) — Vulkan resize pipeline contract stub
Build System
- Engine/CMakeLists.txt (S320) — Add \configure_file\ for \Version.h.in; single source of truth reduces version-bearing files from 21 → ≤5; register \D3D11DeviceManager.cpp\ in ENGINE_SOURCES
Code Quality
- \CancelAwareBindCallback::ShouldCancel()\ — default parameter for ergonomic call sites
- \LastCachedBitmapContract::Fetch()\ — default
equestedSide=256u\ - MSVC v145 zero-warnings build maintained
Build: MSVC cl.exe 19.50 (v145 toolset) · Tests: 4877 passing · Codename: Procyon
v40.0.0 — Phase 1: Discipline Restoration Complete (Procyon)
Full Changelog: v39.9.0...v40.0.0
ExplorerLens v39.9.0 — Betelgeuse
ExplorerLens v39.9.0 — Betelgeuse
Phase 4 — Depth & Safety, Sprint 1 (S381–S389)
This release implements the first sprint of Phase 4, laying the infrastructure for hardware JPEG decode, out-of-process isolation, Explorer metadata integration, UBSAN CI cleanliness, Chocolatey distribution, shared-memory IPC, EXIF property mapping, OpenCL resize, and corpus expansion to 500 CC0 files.
New Headers (9)
| Sprint | File | Phase 4 Goal |
|---|---|---|
| S381 | Engine/GPU/Dxva2JpegSession.h |
DXVA2 HW JPEG decode session with SW fallback |
| S382 | Engine/Core/ProcessIsolationConfig.h |
Out-of-process decoder isolation config (H36) |
| S383 | Engine/Core/IPropertyStoreAdapter.h |
IPropertyStore EXIF adapter for Explorer details pane (H46) |
| S384 | Engine/Core/UbsanSuppressProfile.h |
UBSAN suppression profile registry for CI clean |
| S385 | Engine/Core/ChocolateyPackageConfig.h |
Chocolatey package manifest and publish config |
| S386 | Engine/Core/SharedMemoryChannel.h |
Shared memory IPC for out-of-process thumbnail transfer (H45) |
| S387 | Engine/Core/ExifPropertyBag.h |
EXIF tag to Windows Property Store key mapping table |
| S388 | Engine/Core/OpenClResizePath.h |
OpenCL 1.2 GPU resize fallback when D3D11 unavailable (H17) |
| S389 | Engine/Core/CorpusExpansionPhase4.h |
Corpus expansion tracker to 500 CC0 files |
Test Coverage
- +9 new TEST() suites wired via S390 across 5 test infrastructure files
- Total: 5108 unit tests — 100% pass rate maintained
Maintenance (this tag)
- Shell init: self-contained
.vscode/scripts/Initialize-ExplorerLens.ps1(<200 ms startup, no external dependencies) - Removed dead
catch2-tests.ymlworkflow (targetEngineCatch2Testswas never built) - ADR-010 status corrected: Proposed (Catch2 migration planned for v40.0.0+, not yet implemented)
BUILD_CATCH2_TESTSCMake option removed (was defined but never wired to a target)- SHA256SUMS now covers all 5 release assets
Downloads
| File | Description |
|---|---|
ExplorerLens-39.9.0-x64.zip |
Portable release package (x64) |
lens.exe |
Command-line tool (register, generate, cache, doctor) |
LENSManager.exe |
GUI configuration utility |
ExplorerLens-39.9.0-SBOM.json |
Software Bill of Materials |
SHA256SUMS.txt |
SHA256 checksums for all 5 assets |
verification-report-39.9.0.json |
Build verification report |
ExplorerLens v39.8.0 — Betelgeuse
ExplorerLens v39.8.0 — Betelgeuse
Phase 3 Complete — S372–S380: Quality & Polish Sprint (final)
What's New
| Sprint | Component | Description |
|---|---|---|
| S372 | IccProfileApplicator | End-to-end ICC profile application via lcms2 (H12/H30 Phase 3 exit criterion) |
| S373 | DarkModeSystemEvent | WM_SETTINGCHANGE handler for system dark mode toggle |
| S374 | PerMonitorDpiConfig | Per-Monitor V2 DPI awareness config for LENSManager high-DPI |
| S375 | EvSigningPipeline | EV code signing CI pipeline — Azure Key Vault + TSA timestamp |
| S376 | WinGetPublishConfig | WinGet manifest builder + automated PR submit (ADR A26) |
| S377 | FontPreviewPipeline | FreeType→thumbnail TTF/OTF font preview end-to-end pipeline |
| S378 | DllSymbolAuditor | DLL exported symbol auditor targeting <2,500 KB (Phase 3 goal) |
| S379 | SimdLanczosKernel | SIMD AVX2 Lanczos-3 resize kernel; 8-lane float32 parallelism |
| S380 | CorpusManifestBuilder | Corpus manifest builder for 300 CC0 test files (Phase 3 target) |
Test Coverage
- 5,099 unit tests (100% pass rate)
- +9 new TEST() bodies in EngineTests_Platform.cpp
Phase 3 Milestones Completed
- H12/H30: ICC profile apply end-to-end
- H41: SIMD AVX2 Lanczos resize kernel
- A26: WinGet manifest publish pipeline
- S11: EV code signing CI pipeline
- Corpus expansion manifest builder (300 CC0 target)
- Font preview pipeline (TTF/OTF)
- DLL size audit infrastructure
Codename: Betelgeuse
ExplorerLens v39.7.0 — Betelgeuse
ExplorerLens v39.7.0 — Betelgeuse
Sprint S362–S370: Phase 3 Quality & Polish (continued)
9 new Engine headers, 9 new tests — 5090 total (100% pass rate)
| Sprint | Component | Purpose |
|---|---|---|
| S362 | IccProfileStore.h |
ICC profile in-process cache for lcms2 pipeline (H12/H30) |
| S363 | LazyLibraryLoader.h |
Deferred LoadLibrary for libheif/libjxl/libavif/libraw/mupdf (H43) |
| S364 | FreeTypeCachePolicy.h |
FreeType FTC_Manager cache sizing policy for font preview (Phase 3) |
| S365 | SsimCorpusBaseline.h |
SSIM corpus baseline management, raises gate 0.95 to 0.97 (Phase 3) |
| S366 | DecoderAuditCollector.h |
Per-decoder error telemetry, ranked failure table (H48) |
| S367 | SlsaProvenanceBuilder.h |
SLSA Level 2 provenance bundle builder for release artifacts (H32) |
| S368 | FormatFamilyDispatcher.h |
5-family format dispatch table: IMAGE/MODERN/CAMERA/DOCUMENT/MEDIA (ADR A32) |
| S369 | ThumbCacheWarmer.h |
Thumbnail cache pre-warming on first install, IDLE priority (H47) |
| S370 | WicFormatNegotiator.h |
WIC encoder/decoder capability query for passthrough-first routing (H24) |
Test Coverage
- 5090 unit tests (100% pass rate)
- 9 new TEST() bodies in
EngineTests_Platform.cpp
ExplorerLens v39.6.0 — Betelgeuse
Full Changelog: v39.5.0...v39.6.0
ExplorerLens v39.5.0 — Betelgeuse
Full Changelog: v39.4.0...v39.5.0
ExplorerLens v39.4.0 — Betelgeuse
Full Changelog: v39.3.0...v39.4.0
ExplorerLens v39.3.0 — Betelgeuse
Full Changelog: v39.2.0...v39.3.0
ExplorerLens v39.2.0 Betelgeuse
ExplorerLens v39.2.0 — Betelgeuse
Session 18 addendum (S311–S320) — 10 additional commits pushed to main.
Session 18 — S311–S320 · ROADMAP v7.0 Phase 2 First GPU Pixels
Header-only / contract-only follow-up on top of v39.2.0. No runtime change toLENSShell.dll or LENSManager.exe — no re-tag or re-upload required.
| Sprint | Area | Commit | Summary |
|---|---|---|---|
| S311 | GPU | 0796784a |
Engine/GPU/D3D11DeviceManager.h — D3D11 device init contract; D3D11FeatureLevel enum, D3D11DeviceConfig/Info/ManagerStatus, TDR recovery with kMaxTDRResets=3, kMaxAdaptersToTry=8 |
| S312 | GPU | 9a454639 |
Engine/GPU/DXVA2JpegDecodeContract.h — DXVA2 JPEG hardware-decode contract; surface pool depth=4, stub returns HARDWARE_UNAVAILABLE until Phase 2 wiring |
| S313 | Core | 0c837923 |
Engine/Core/CancelAwareBindCallback.h — IBindStatusCallback cancel propagation; BindCallbackPolicy CONTINUE/CANCEL, DecodeTokenView integration (H36/Phase 2) |
| S314 | Core | d72c38eb |
Engine/Core/OOMKillGuard.h — SetProcessWorkingSetSizeEx OOM kill protection; emergency bailout region 64 MB, RAII Arm/Release, kAbsoluteMaxWorkingSetBytes=256 GB |
| S315 | Pipeline | 62382312 |
Engine/Pipeline/LastCachedBitmapContract.h — async placeholder thumbnail; returns last-cached bitmap immediately while fresh decode runs; PlaceholderBitmapKind enum (H7/Phase 2) |
| S316 | Pipeline | a00b47d0 |
Engine/Pipeline/ReadaheadIOContract.h — parallel I/O readahead N=8 ring-buffer contract; ReadaheadSlotState enum, kDefaultSlotCount=8, kMaxSlotCount=32 (H9/Phase 2) |
| S317 | GPU | f1a994d8 |
Engine/GPU/D3D11TextureBlitPipeline.h — first real GPU pixels; D3D11 staging texture upload + bilinear/Lanczos compute shader resize; kMaxTextureDimension=16384, kStagingTexturePitchAlignment=256 |
| S318 | Decoders | 8fbb6aad |
Engine/Decoders/LibJpegTurboEncodeWrapper.h — libjpeg-turbo encode replaces stb_image_write JPEG path; EXPLORERLENS_LIBJPEG_TURBO_AVAILABLE=0 Phase 2 gate; kDefaultQuality=85, kMaxDimension=65535 |
| S319 | Decoders | c65ecd08 |
Engine/Decoders/LibSpngDecodeWrapper.h — libspng decode replaces stb_image PNG path; EXPLORERLENS_LIBSPNG_AVAILABLE=0 Phase 2 gate; SpngColorType enum, kMaxSpngDimension=1 048 576 |
| S320 | Test | 684c51f7 |
Wire S311–S319 into Engine build: 9 #include lines in EngineTestsIncludes.h, 9 extern void in EngineTestsExterns.h, 9 RUN_TEST() in EngineTests.cpp, 9 TEST() bodies in EngineTests_Platform.cpp; update baseline.json comment to "Phase 2 GPU pixels" |
Session 18 Build/Test Stats
- Tests: ~5,054 unit tests (+9 from S320) · 100% pass rate (build-only; no runtime regression)
- Build: 0 errors · 0 warnings · MSVC v145 C++23
Session 17 addendum (S301–S310) — 10 additional commits pushed to main.
Session 17 — S301–S310 · ROADMAP v7.0 Phase 1 Foundation Cleanup
Header-only / tooling-only follow-up on top of v39.2.0. No runtime change toLENSShell.dll or LENSManager.exe — no re-tag or re-upload required.
| Sprint | Area | Commit | Summary |
|---|---|---|---|
| S301 | Build | b3781776 |
C++23 upgrade — CMAKE_CXX_STANDARD 23 (ADR A23); enables std::expected, std::flat_map, std::stacktrace, deducing-this |
| S302 | Core | f814c445 |
stb_image audit — StbImageAuditContract.h, 4 TODO sites marked for Phase 2 (S318/S319), libjpeg-turbo + libspng as replacements |
| S303 | Build | 8c6e9786 |
Build-LibJpegTurbo.ps1 — libjpeg-turbo 3.0.4 SIMD JPEG build script (NASM auto-detect, Ninja+CMake, installs to external/image-libs/libjpeg-turbo/) |
| S304 | Build | 932af37c |
Build-LibSpng.ps1 — libspng 0.7.4 ASAN-clean PNG build script (zlib detection, static lib, installs to external/image-libs/libspng/) |
| S305 | Chore | e07aa751 |
Retire 13 dead build scripts — deleted .bat wrappers, Fix-PCH-Corruption.ps1, Find-All-Tools.ps1, Download-Updates.ps1, Update-All-Libraries.ps1, Run-CodeCoverage.ps1, Sign-Binaries.ps1, build-scripts/production/, build-scripts/utilities/ (superseded by Build-MSVC.ps1, vcpkg, CI) |
| S306 | Docs | 21e9283e |
Retire root index.html — replaced with GitHub Pages meta-refresh redirect to docs/ MkDocs site (ROADMAP v7.0 §19) |
| S307 | Core | ef293805 |
Engine/Core/AsyncDecodeToken.h — std::stop_token cancel-aware decode token; AsyncDecodeToken + DecodeTokenView, monotonic request ID, AlreadyCancelled() factory (H36/Phase 2) |
| S308 | Core | b131b0ee |
Engine/Core/EmbeddedJpegExtractor.h — EXIF tag 0x0201/0x0202 embedded-JPEG fast-path for camera RAW; stub returns std::nullopt until TIFF IFD walker wired (H13/Phase 2, ~140→8 ms RAW path) |
| S309 | Codec | 82042274 |
Engine/Codec/IccProfileManager.h — lcms2 ICC colour profile pipeline stub; IccTransformProfile enum, IccProfileInfo struct, EXPLORERLENS_ICC_ENABLED=0 guard, Phase 3 disabled (H32/Phase 3) |
| S310 | Test | f98e5277 |
Wire S302/S307–S309 into Engine build: 4 #include lines in EngineTestsIncludes.h, 4 extern void in EngineTestsExterns.h, 4 RUN_TEST() in EngineTests.cpp, 4 TEST() bodies in EngineTests_Platform.cpp; update baseline.json _updated→2026-04-26 |
Session 17 Build/Test Stats
- Tests: ~5,049 unit tests (+4 from S310) · 100% pass rate (build-only; no runtime regression)
- Build: 0 errors · 0 warnings · MSVC v145 C++23
Session 16 addendum (S291–S300 + ROADMAP v7.0) — 11 additional commits pushed to main.
Session 16 — S291–S300 + ROADMAP v7.0 "Sirius"
- S291 –
LensRestApiEndpointContract.h— 7-endpoint REST API table (H11/H22) - S292 –
SqlitePHashIndexContract.h— perceptual hash index for rename-aware cache (H14) - S293 –
CrashTelemetryConsentContract.h— opt-in crash telemetry, DISABLED default (H2) - S294 –
ArchiveFileBadgeOverlayContract.h— archive cover art badge overlay (H5) - S295 –
MtlsRestAuthContract.h— mTLS auth contract for REST server, DISABLED default (S12) - S296 –
EngineDllAbiContract.h— Engine DLL ABI table v0x00010000, 8 exports (B1) - S297 –
VulkanResizePipelineContract.h— Vulkan 1.1.0+ resize pipeline (Phase 6) - S298 –
DbusThumbnailerContract.h— FreeDesktop DBus thumbnailer (DISABLED on Windows, H18) - S299 –
PluginCatalogSchemaContract.h— plugin catalog JSON schema (Phase 7) - S300 –
ssim-validation.yml— SSIM CI workflow (windows-latest/MSVC, threshold 0.95); wires S291–S299 tests into Engine build - ROADMAP v7.0 "Sirius" — deep-rethink edition: 25-product × 40-dimension competitor matrix, 36 harvested best practices (H1–H36), 28 ADRs (6 new: A23–A28), 10-phase plan to v50.0, explicit kill verdicts (Rust KILL, WTL KILL, stb_image REMOVE), C++23 commit, WinUI 3 commit, v6.0 archived to
docs/archive/ROADMAP_V6.md
Phase 1 foundation sprint (S221–S230) — 10 sprints delivered.
What's New
- S221 – Engine consolidation Phase 1:
CLI/→Core/,Codec/→Decoders/(7 forwarding headers, CMakeLists updated) - S222 – libjpeg-turbo 3.1.0 CMake detection +
JpegTurboDecoderinterface with DCT-scale fast-path (2–4× vs WIC) - S223 –
RawEmbeddedPreviewDecoderwrappingLibRaw::unpack_thumb()— 50–200× faster than full RAW decode - S224 –
NOTICEfile added: LGPL compliance for libheif, libde265, LibRaw - S225 – README status section corrected; Windows-only platform scope explicitly documented
- S226 –
publish-packages.ymlYAML indent fixed; Maven + RubyGems confirmed removed - S227 – Catch2 wave 5:
StdExpectedContractTests.cpp— 25 tests forstd::expected/ HRESULT mapping (ADR-015) - S228 – Catch2 wave 5:
JpegTurboDecoderTests.cpp— 22 tests for S222 decoder interface contract - S229 – Catch2 wave 5:
EmbeddedPreviewTests.cpp— 28 tests for 28 RAW format extensions (S223) - S230 – Version bumped to v39.2.0, 18 version-bearing files updated, tag + release published
Statistics
- Tests: ~5,045 unit tests · 45 Catch2 test files (3 new) · 5 benchmarks · 100% pass rate
- Build: 0 errors · 0 warnings · MSVC v145 (cl 19.50)
- Architecture:
LENSShell.dll(COM IThumbnailProvider) ·LENSManager.exe(GUI config utility)
Downloads
| File | Description | Size |
|---|---|---|
ExplorerLens-39.2.0-Portable.zip |
Portable distribution (DLL + EXE + docs) | ~29 MB |
LENSShell-39.2.0.dll |
Shell extension COM DLL (register with regsvr32) | ~40 MB |
LENSManager-39.2.0.exe |
GUI configuration utility | ~0.5 MB |
SHA256SUMS-39.2.0.txt |
SHA-256 checksums for all artifacts | — |
Quick Install
# Option 1: Register DLL directly
regsvr32 "LENSShell-39.2.0.dll"
# Option 2: Extract portable ZIP and register
Expand-Archive ExplorerLens-39.2.0-Portable.zip
regsvr32 "ExplorerLens-39.2.0-Portable\bin\LENSShell.dll"SHA-256 Checksums
590cd89bff1ea315f588956926761770b51f30de0a6b663b6509839942ec4042 ExplorerLens-39.2.0-Portable.zip
aa0bd5bd42b29d309684a3f1175c0d1b74957d57c4fce995bf925ca1b8e164c8 LENSShell.dll
93187ff253dd430a5dc18c341e2ed18a2906a12ca175bd3bc6ae789ca07331a8 LENSManager.exe
Session 10 Addendum — ROADMAP v6.0 Phase 1 (S231–S240)
Header-only / tooling-only follow-up on top of v39.2.0. No runtime change toLENSShell.dll or LENSManager.exe — no re-tag or re-upload required.
| Sprint | Area | Summary |
|---|---|---|
| S231 | CLI | Engine/Core/LensFormatsCommand.h — lens formats --json catalogue (schema lens.formats.v1). |
| S232 | Core | Engine/Core/NodiscardMacros.h — LENS_NODISCARD_EXPECTED / LENS_NODISCARD_RESULT macros. |
| S233 | COM | Engine/Core/COMBoundaryGuard.h... |