WQV-Viewer is a PyQt6 desktop application and companion NeoSR trainer built for the Casio WQV wrist cameras. It decodes Palm backups, previews captures, upscales them with configurable pipelines, and ships a training toolchain for producing new Real-ESRGAN style weights tuned to wristcam footage.
- Palm-first parser: loads WQVLink/WQVColor databases, raw monochrome dumps, individual
CASIJPG*.PDBfiles, exported JPEGs, and standalone PNG/JPEG shots while preserving capture metadata. - Color awareness: when
WQVColorDB.PDBis opened next to its companionCASIJPG*.PDBfiles the viewer stitches in the original colour JPEGs; missing companions trigger readable placeholder thumbnails plus diagnostics so you know what is absent. - Dual-pane GUI: thumbnail grid, metadata pane, original/upscaled previews, zoom shortcuts, and asynchronous workers keep the UI responsive during heavy AI jobs.
- Configurable pipelines: combine Pillow resamplers with Real-ESRGAN/NeoSR checkpoints, choose execution order, device policy (auto GPU fallback), and save/load named pipeline presets directly from the toolbar.
- Load diagnostics: the parser collects warnings (missing CAS files, truncated chunks, etc.) and exposes them through Help → View Load Diagnostics… so issues are never silent.
- Exports with provenance: batch export runs the active pipeline, writes PNGs plus JSON sidecars, deduplicates filenames, and reports progress with cancel controls.
- Trainer toolchain:
wqv-upscale-trainerfabricates WQV-style degradations, manages splits, trains RRDB/NeoSR models, logs to TensorBoard, and emits deployable checkpoints ready for the viewer.
- Python 3.9 or newer with pip available on your PATH.
- Desktop platform with Qt 6 support (Windows, macOS, or modern Linux).
- NVIDIA CUDA GPU recommended for Real-ESRGAN acceleration, but CPU mode is available.
- Sufficient disk space for model weights (
models/realesrganandmodels/custom). - For WQV-3/WQV-10 colour sessions, place the matching
CASIJPG*.PDBfiles next toWQVColorDB.PDB. The viewer can also open aCASIJPGarchive directly if you only need a single JPEG.
-
Clone the repository and open a shell inside
WQV-Viewer. -
Install the project in editable mode (this pulls in PyQt6, Torch, Real-ESRGAN, and pytest):
python -m pip install -e .[dev]
-
(Optional) Verify that PyTorch detects your GPU:
python -c "import torch; print(torch.cuda.is_available())".
Offline installs: download the Real-ESRGAN weights you need and place them under
models/realesrganbefore launching the viewer. The viewer will skip network downloads when the files already exist.
Prefer a containerized environment? Follow the noVNC-enabled workflow in readme_wqv_docker.md. Warning!, this will a big 40GB+ container because of GPU support.
Run the desktop application from the project root:
python -m wqv_viewer- Open a Palm database (
File → Open WQVLinkDB…or drag & drop). KeepCASIJPG*.PDBfiles next toWQVColorDB.PDBso colour thumbnails light up.- Need to inspect loose PNG/JPEG captures or compare against contemporary photos? Use
File → Open Image…or drop up to a few dozen files directly onto the window; each image lands in the thumbnail tray with its own metadata entry.
- Need to inspect loose PNG/JPEG captures or compare against contemporary photos? Use
- Navigate the thumbnails: multi-select, inspect metadata, and rely on zoom shortcuts to inspect originals/upscaled previews.
- Configure the pipeline using the conventional + AI panels, then save the combo as a preset using the toolbar icons for quick recall.
- Monitor diagnostics in the status bar—warnings enable the View Load Diagnostics… action so you can review missing CAS companions or other anomalies.
- Export with
File → Export Selected…to generate PNG/JSON pairs or delete Palm records (monochrome archives only) using the context menu.
That’s the day-to-day workflow; everything else lives in MANUAL_VIEWER.md.
- Use
File → Open Image…or drag/drop PNG/JPEG files when you only have loose shots instead of Palm databases. The viewer batches them into the thumbnail tray, caps oversized thumbnails to keep the UI responsive, and remembers the last directory so iterative comparisons stay quick. - JPEGs are decoded via Pillow first; if a Casio-specific
DBLKshim is detected the loader automatically retries with the Palm decoder and surfaces a status-bar hint ("Palm decoder used for…") so you know why metadata looks different. - Imported files are treated like any Palm record: metadata panels populate with filename/time, you can run the same upscaling pipelines, export results, and drag-select alongside Palm-originated captures.
- Viewer Manual: exhaustive coverage of loading, navigation, diagnostics, presets, exporting, and database hygiene.
- Trainer Manual: dataset prep, CLI options, monitoring, and deployment of new checkpoints.
- Real-ESRGAN Plus 2x and 4x (classic RRDBNet models).
- Real-ESRGAN Sber 2x, 4x, and 8x (ai-forever RRDBNet weights for aggressive upscaling).
- General x4v3 and General x4v3 WDN (SRVGG weights with optional denoise blend control).
- Anime x4plus 6B and AnimeVideo v3 (tailored for stylised footage but useful for crisp wristcam lines).
- RealESRGAN general-purpose weights live under
models/realesrganand can be refreshed manually if new upstream releases appear.
models/custom/wqv_neosr_x4.pthis a trainer-produced RRDB variant tuned on WQV monochrome material for 4x enlargements.models/custom/wqv_neosr_x8.pthextends the same recipe to 8x upscaling by chaining an extra NeoSR upsample stage.- Both models were trained with high-resolution imagery sourced from the Flickr2K dataset.
- Both weights are auto-discovered on startup and appear in the AI dropdown as
Custom: wqv_neosr_x4 (x4)andCustom: wqv_neosr_x8 (x8). Select them whenever you want a wristcam-biased baseline before or after conventional resampling.
- Drop additional
.pthfiles intomodels/custom. Include the target scale (x2,x4, orx8) in the filename so the loader can infer supported scales. - Restart the viewer to pick up new weights. Each file is listed under a
Custom:label based on its stem so you can tell variants apart. - Stale copies in
models/realesrganare cleaned up automatically when their custom counterpart disappears, keeping the directory tidy.
wqv-upscale-trainercan now seed the generator from any RRDB-style deployable checkpoint, including the bundled Real-ESRGAN files (models/realesrgan/*.pth) or your own exports undermodels/custom.- Pass
--init-weights path/to/RealESRGAN_x4plus.pthto reuse those weights as the starting point for fine-tuning. The trainer auto-detects RRDB parameters stored inside the file; if a legacy checkpoint lacks metadata, fall back to--init-arch rrdbto force RRDB loading. - The resolved workspace config (
training_config.json) captures both fields so scripted runs can replay the same warm-start without repeating CLI flags.
Run the automated tests from the project root:
python -m pytestThe suite covers the parser, pipeline helpers, and a headless Qt smoke test (QT_QPA_PLATFORM=offscreen) using the sample assets under tests/data.
- GPU fallback in status bar: the viewer automatically retries on CPU when the GPU driver rejects a kernel launch; check your CUDA installation if this happens unexpectedly.
- Missing Qt platform plugin: ensure
python -m pip install -e .[dev]completed successfully and that you are running within the same environment. - Model not listed in the AI dropdown: confirm the
.pthfile name containsx2,x4, orx8and that it lives inmodels/custom. - Trainer cannot import TensorBoard: install it explicitly with
python -m pip install tensorboardwhen you pass--tensorboard.
WQV-Viewer builds upon the research shared in the community project WQV_PDB_Tools and the outstanding Real-ESRGAN ecosystem maintained at xinntao/Real-ESRGAN. All trademarks belong to their respective owners; please review upstream licenses when redistributing model weights.
- Archived enthusiast write-up on WQV cameras (pages.zoom.co.uk/epayne)
- Archived Casio WQV download portal
- Casio WQV Link software v1.1 for Palm OS
- Casio WQV Color for Palm OS v2.2
- Distributed under the Apache License 2.0.

