Skip to content

Releases: RajwanYair/ExplorerLens.io

ExplorerLens v40.0.1 — Procyon

Choose a tag to compare

@RajwanYairRajwanYair released this 24 May 17:06

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)

Choose a tag to compare

@RajwanYairRajwanYair released this 14 May 17:29

Full Changelog: v39.9.0...v40.0.0

ExplorerLens v39.9.0 — Betelgeuse

Choose a tag to compare

@RajwanYairRajwanYair released this 14 May 12:58

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.yml workflow (target EngineCatch2Tests was never built)
  • ADR-010 status corrected: Proposed (Catch2 migration planned for v40.0.0+, not yet implemented)
  • BUILD_CATCH2_TESTS CMake 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

Choose a tag to compare

@RajwanYairRajwanYair released this 14 May 04:04

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

Choose a tag to compare

@RajwanYairRajwanYair released this 14 May 03:40

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

Choose a tag to compare

@RajwanYairRajwanYair released this 13 May 19:55

Full Changelog: v39.5.0...v39.6.0

ExplorerLens v39.5.0 — Betelgeuse

Choose a tag to compare

@RajwanYairRajwanYair released this 13 May 14:01

Full Changelog: v39.4.0...v39.5.0

ExplorerLens v39.4.0 — Betelgeuse

Choose a tag to compare

@RajwanYairRajwanYair released this 13 May 13:45

Full Changelog: v39.3.0...v39.4.0

ExplorerLens v39.3.0 — Betelgeuse

Choose a tag to compare

@RajwanYairRajwanYair released this 13 May 13:33

Full Changelog: v39.2.0...v39.3.0

ExplorerLens v39.2.0 Betelgeuse

Choose a tag to compare

@RajwanYairRajwanYair released this 23 Apr 17:53

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 to
LENSShell.dll or LENSManager.exeno 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.hIBindStatusCallback cancel propagation; BindCallbackPolicy CONTINUE/CANCEL, DecodeTokenView integration (H36/Phase 2)
S314 Core d72c38eb Engine/Core/OOMKillGuard.hSetProcessWorkingSetSizeEx 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 to
LENSShell.dll or LENSManager.exeno 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.hstd::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"

  • S291LensRestApiEndpointContract.h — 7-endpoint REST API table (H11/H22)
  • S292SqlitePHashIndexContract.h — perceptual hash index for rename-aware cache (H14)
  • S293CrashTelemetryConsentContract.h — opt-in crash telemetry, DISABLED default (H2)
  • S294ArchiveFileBadgeOverlayContract.h — archive cover art badge overlay (H5)
  • S295MtlsRestAuthContract.h — mTLS auth contract for REST server, DISABLED default (S12)
  • S296EngineDllAbiContract.h — Engine DLL ABI table v0x00010000, 8 exports (B1)
  • S297VulkanResizePipelineContract.h — Vulkan 1.1.0+ resize pipeline (Phase 6)
  • S298DbusThumbnailerContract.h — FreeDesktop DBus thumbnailer (DISABLED on Windows, H18)
  • S299PluginCatalogSchemaContract.h — plugin catalog JSON schema (Phase 7)
  • S300ssim-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 + JpegTurboDecoder interface with DCT-scale fast-path (2–4× vs WIC)
  • S223RawEmbeddedPreviewDecoder wrapping LibRaw::unpack_thumb() — 50–200× faster than full RAW decode
  • S224NOTICE file added: LGPL compliance for libheif, libde265, LibRaw
  • S225 – README status section corrected; Windows-only platform scope explicitly documented
  • S226publish-packages.yml YAML indent fixed; Maven + RubyGems confirmed removed
  • S227 – Catch2 wave 5: StdExpectedContractTests.cpp — 25 tests for std::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 to
LENSShell.dll or LENSManager.exeno re-tag or re-upload required.

Sprint Area Summary
S231 CLI Engine/Core/LensFormatsCommand.hlens formats --json catalogue (schema lens.formats.v1).
S232 Core Engine/Core/NodiscardMacros.hLENS_NODISCARD_EXPECTED / LENS_NODISCARD_RESULT macros.
S233 COM Engine/Core/COMBoundaryGuard.h...
Read more