FICture2 is a high-performance image viewer built with DirectX for smooth rendering and navigation. It is designed to handle large texture files and provide fast, efficient image comparison and browsing.
Key Features:
Support for multiple image formats, including DDS textures.
Thumbnail preview for quick navigation.
Accurate handling of DDS BCn formats (BC1/BC3/BC4/BC5/BC6H/BC7) with proper alpha channel support.
Archive browsing capability for accessing images within compressed files.
Side-by-side comparison mode for up to four images, ideal for A/B testing and conflict resolution.
Folder-to-folder sync feature that automatically pairs files with the same name.
Audience & Benefit:
Ideal for game modders and texture artists who work extensively with DDS textures. FICture2 provides a lightweight, fast tool for inspecting and comparing textures without the need for heavy frameworks or complex setups. Its performance-first design ensures near-instant startup and smooth navigation, making it an essential companion for modding workflows. It can be installed via winget for easy integration into your development environment.
FICture2 is an ultra-lightweight, high-performance image viewer and comparison tool built specifically for game modders and texture artists.
It aims for a sub-1MB executable with near-instant startup — no splash screen, no heavy frameworks, no delay.
Double-click a texture and you're already comparing it.
> FICture2 is an acronym for Floyd's Image Compare miniaTURE 2.
New: DDS mip inspection — Ctrl + [ / Ctrl + ] step mip levels; right-click Mip Level picks a level. Current mip and source dimensions show in the info bar
New: Channel isolation — R / G / B / A show one channel as grayscale; N restores RGBA (D3D path)
New: Alpha Channel override — right-click chooses Auto / Transparency / Opaque (data). Encoding (straight/premultiplied) is kept separate from usage so data-bearing alpha no longer darkens colors by mistake
New: Image Information — press I (or use the context menu) for path, format, mip, alpha, channel, and view state
New: Compare up to 8 viewers in an equal-width grid (5–6 panes: 2×3; 7–8 panes: 2×4)
New: Open Recent (MRU) from the right-click menu, with Clear Recent Files
New: Save Pane Screenshot from the composed offscreen frame — not blocked by overlapping windows
New: BSA archive browsing alongside ZIP / 7Z / RAR / BA2; archive readers are cached for snappier large-pack browsing
New: Thumbnail-strip horizontal scrollbar when the strip overflows
Improved: Path / info bar tooltips; right-click the path to copy it
Changed: Hotkeys — navigation toggle is now Alt + N, sampling quality is Alt + Q, alpha checkerboard is Alt + A (N is used to restore RGBA after channel isolation)
Why FICture2 exists
Most image viewers claim to support DDS — but in reality:
BCn formats are often decoded incorrectly
Alpha channels are mishandled or ignored
Mip levels are flattened or forced
Performance collapses on large texture folders
FICture2 was built because no existing lightweight tool handled DDS BCn textures correctly and fast enough for real modding workflows.
Proper DDS & BCn support (not “partial” support)
Native DDS support via DirectXTex
Correct decoding of:
BC1 / BC3 / BC4 / BC5 / BC6H / BC7
Accurate alpha channel handling
No forced recompression
No incorrect color-space shortcuts
What you see in FICture2 is what the engine actually gets.
Fast image viewing
Fast loading of large DDS textures
Optimized thumbnail generation for massive mod folders
Smooth zoom & pan with mouse-centric controls
Designed for inspection, not editing
Image compare mode (side-by-side)
Compare 2–8 images simultaneously
Perfect for A/B testing multiple texture replacements
Split-view comparison with synchronized navigation
Folder-to-folder sync (compare mode)
When comparing two folders:
Selecting an image in one panel automatically selects the same filename in the other
Ideal for:
Vanilla vs modded textures
Competing retextures
Conflict resolution
Built for Vortex Mod Manager users
Automatic side-by-side comparison of conflicted files
Files with the same filename are paired automatically
We keep the submodule clean and do not commit libarchive build outputs or local patches, so you must build it yourself:
Ensure the submodule exists: git submodule update --init --recursive
Run the script: build-libarchive-minimal.ps1
For details and the exact CMake flags used, see docs/libarchive_integration.md.
Run
Launch the built exe from x64\Release\FICture2.exe
Or run from a terminal:
FICture2.exe "C:\path\to\image.dds"
Quick start
Run with a file parameter:
FICture2.exe "C:\path\to\image.dds"
Session restore is skipped; the given file is opened.
On exit, the current viewer layout becomes the saved session (a prior multi-pane session is replaced).
Run with no parameters:
If a previous session exists with at least one path that still resolves: restores viewers + folders/images + splitters.
Missing session paths are skipped and the surviving viewers are compacted left-to-right.
If every remembered path is gone (or no session): opens the first supported image found in the current user's Pictures folder.
Closing during the first moments of startup (before restore/IPC handoff finishes) saves window placement only — it does not overwrite the previous session with a blank layout.
Window placement: restored size/position is clamped so the whole window stays inside the nearest monitor work area.
Features
Thumbnail strip + main image optimized for DDS-heavy folders
Horizontal scrollbar appears when the strip overflows (drag to scroll)
Folder navigation inside the thumbnail strip (includes .. “up” item)
Archive browsing: ZIP / 7Z / RAR / BA2 / BSA (images and folders)
Archive readers are cached so browsing large BA2/BSA packs stays responsive
missing paths are dropped on restore; an all-dead session falls through to Pictures
early close before handoff preserves the previous session file list
IPC compare strategy (single instance assist):
if another instance is already running and you launch a file:
if filenames match: first instance enters compare mode; second instance exits
if filenames differ: second instance runs independently
additional Explorer opens while a compare is already in progress are queued and applied as soon as capacity frees up (instead of getting stuck)
boot-queued IPC opens are drained once before the session becomes eligible to save
Open Recent: right-click menu lists recently viewed images (persisted in the INI); includes Clear Recent Files
Save Pane Screenshot: right-click menu saves a PNG of the current main-image pane from the composed offscreen frame (independent of desktop occlusion; suggested filename next to the open file)
Path / info bar:
hover the path for the full path tooltip; right-click the path to copy it
truncated info text shows a tooltip on hover
Drag & drop (main image region):
Left 3/4 drop zone: replace the current ImageBrowser folder/image with the dropped path (red overlay while dragging)
Right 1/4 drop zone: insert a new ImageBrowser to the right and open the dropped path there (green overlay while dragging)
Overlays paint above the compare chrome so the tint stays visible across panes
Multi-select drag & drop: drop multiple images/folders/archives to open up to 8 viewers
Unsupported files show an X cursor and cannot be dropped
File associations: register or unregister supported image types from the context menu (per-user / HKCU only; menu label toggles based on current state)
Explorer DDS thumbnails: register/unregister the thumbnail provider from the context menu (admin prompt)
First-run file association prompt (per-user / HKCU only)
Hotkeys
Global
Esc: exit application
Thumbnail list / navigation (focused ImageBrowser)
Left / Right: move selection (includes folders and images)
Home / End: jump to start / end of list
PgUp / PgDn: page step selection
Enter: activate selected item
folder: navigate into folder
..: navigate up
image: show in main view
Backspace: navigate up (same as ..)
Alt + Up: navigate up (Explorer-style)
Alt + N: toggle navigation items visibility globally (folders + ..) across all ImageBrowser instances
Alt + Q: toggle sampling quality (low/high)
Alt + A: toggle alpha checkerboard
Ctrl + O: open file dialog, replace current viewer image/folder context
Ctrl + Shift + O: open file dialog, create a new viewer (up to 8 total); layout rebuilds to equal widths
Main image view (focused ImageBrowser)
R / G / B / A: isolate a channel as grayscale; N: restore RGBA
I: Image Information dialog
<: rotate the current image 90° left
>: rotate the current image 90° right
Ctrl + [: previous DDS mip level
Ctrl + ]: next DDS mip level
Mouse controls (main image)
Mouse wheel: zoom in/out (smooth spring animation)
Shift + wheel: ±10% per notch
Wheel: ±50% per notch
Zoom is pointer-based: the pixel under the mouse stays fixed during zoom.
Left mouse drag: pan
Max zoom: 5000%
Drag & drop (main image)
Drag an image file/folder onto a main image view:
Left 3/4: replace current view (folder/image) — red overlay while dragging
Right 1/4: insert a new ImageBrowser on the right and open there — green overlay while dragging
Multiple files/folders/archives can be dropped at once (up to 8 viewers total)
Unsupported files show an X cursor and are rejected
Register / unregister file associations: right-click the main image area and choose Register File Associations or Unregister File Associations... (per-user / HKCU; label follows current state)
> If you want a speed-first profile again, revert the above to /O2, /Ob2, /GS, and FavorSizeOrSpeed=Speed.
Submodules
FD2D: https://github.com/floyd68/FD2D
ImageCore: https://github.com/floyd68/ImageCore
DirectXTex (external): tracked as a submodule under external/DirectXTex
License
This project is licensed under the MIT License - see the LICENSE file for details.
Copyright (c) 2024 EunSuk, Lee (이은석, floyd)
Troubleshooting
Submodules are empty / missing files: run git submodule update --init --recursive.
Build fails due to locked exe: close the running FICture2.exe instance.
DDS decode performance: see ImageCore/README.md for pipeline details and tuning points.
Network Activity
Does FICture2 connect to the internet?
FICture2 itself does NOT initiate any network connections. The application code contains no network APIs, HTTP requests, or telemetry.
However, Windows may make network requests when FICture2 runs due to system-level security features:
Certificate Validation: Windows validates digital signatures of system components (WIC, COM, DirectX)
SmartScreen Filter: Windows checks application reputation
Windows Defender: Real-time cloud-based protection
Windows Update: Component update checks
Reducing Network Activity (v1.1+)
FICture2 v1.1+ uses static runtime linking (/MT) to eliminate dependency on VC Runtime DLLs (vcruntime140.dll, msvcp140.dll). This reduces one major source of Windows certificate validation network requests.
Optimized app.manifest:
Minimal dependencies
Windows 10/11 compatibility declarations
Maximum compatibility (Windows 10 1809+)
Remaining network activity comes from Windows system services only (WIC, DirectX, Common Controls validation). This is standard behavior for all Windows applications using system imaging components.
For advanced users who need to further reduce network activity (e.g., air-gapped systems), see: