Commit Graph

22 Commits

Author SHA1 Message Date
Christoph K.
37f51c6240 ci: fix vcpkg commit hash, add vcpkg.json manifest
Some checks are pending
Windows Build / Windows x64 (MSVC + vcpkg) (push) Waiting to run
- Use valid vcpkg commit hash (4b77da7)
- Add vcpkg.json for manifest-mode dependency management

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 10:14:05 +01:00
Christoph K.
be4226083a ci: add GitHub Actions workflow for Windows x64 GUI build
- MSVC + vcpkg + Qt6 + OpenCV + LibRaw
- vcpkg binary caching for faster CI runs
- windeployqt for Qt DLL bundling
- Upload artifact on every push
- Create ZIP and attach to GitHub Release on git tags

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 10:02:27 +01:00
Christoph K.
805ab8cf0a chore: restore .claude/agents, only ignore agent-memory
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 09:58:09 +01:00
Christoph K.
9500218f0f chore: remove sensitive metadata and build artifacts from repo
- Remove .claude/ agent memory (contains personal info)
- Remove build-windows/ CMake artifacts
- Update .gitignore: add build-*, .claude/, dist-windows/, OS files

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 09:57:17 +01:00
Christoph K.
93c19df257 refactor: rename binary and artifacts to negative-converter
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 09:54:47 +01:00
Christoph K.
4e4e19e80d feat: fix Docker Windows cross-compile and add color grading
- Fix MXE GPG key import (gpg --dearmor + signed-by)
- Fix MXE package names (opencv4→opencv)
- Use Ubuntu 20.04 base for windows-builder (MXE focal compatibility)
- Install CMake 3.20+ from Kitware PPA for windows-builder
- Add ColorGradingParams.h for color grading pipeline
- Update ColorCorrector, AppConfig, MainWindow, ImageData, CliRunner

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 09:49:42 +01:00
Christoph K.
0cbac0ff12 feat: containerize build environment with Docker
- docker/Dockerfile: multi-stage image (linux-builder + windows-builder)
  - linux-builder: Ubuntu 22.04 + OpenCV/LibRaw/Qt6 + GTest
  - windows-builder: MXE cross-compilation (x86_64-w64-mingw32.static)
    with OpenCV4, LibRaw, Qt6 for Windows .exe output
- docker-compose.yml: services for linux, windows-build, shell
- scripts/docker-build.sh: convenience wrapper
  - linux|windows|all targets
  - --no-cache, --run flags

Usage:
  ./scripts/docker-build.sh linux --run
  ./scripts/docker-build.sh windows

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 13:17:01 +01:00
Christoph K.
f3d8c62d2c config update 2026-03-14 11:51:50 +01:00
Christoph K.
7ea5b449ce Update test landscape memory with final status
- Updated test count: 61 tests (not 57), all passing
- Marked InverterTest.ColorNegativeInversionChangesValues as FIXED
- Updated runtime metrics and passing test statistics

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 10:01:17 +01:00
Christoph K.
6a7b20e548 Add comprehensive test quality report
Detailed assessment of test coverage, compliance with CLAUDE.md requirements,
identified gaps, and recommendations for future improvements. Report includes:

- Test execution summary: 57/57 passing (100%)
- Component-by-component coverage analysis
- CLAUDE.md compliance verification
- Identified P1/P2/P3 test gaps
- Testability assessment (strengths and weaknesses)
- Recommendations for integration tests, mocking, golden images

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 09:59:46 +01:00
Christoph K.
8a462d74f9 feat: add build-all.sh script for all targets
Compiles photo-converter, all test binaries, and runs ctest.
Supports --release/--debug, --clean, --no-gui, --no-tests flags.
Auto-detects available CPU cores and skips Qt if not installed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 09:59:02 +01:00
Christoph K.
3f0cf5a0fa Improve test coverage and fix failing test
- Fix InverterTest.ColorNegativeInversionChangesValues: Use realistic test image
  with distinct border and interior values instead of uniform color, so mask
  sampling produces meaningful results
- Add OutputWriterTests (8 tests): Verify PNG/TIFF/JPEG writing, format conversion,
  output directory creation, pixel value preservation (< 1% tolerance)
- Add CliRunnerTests (17 tests): Comprehensive argument parsing for all flags
  (--cli, --batch, --config, -i, -o, --format, --quality, -v), error cases
- Add RawLoaderExtendedTests (7 tests): Error handling, format detection accuracy,
  case-insensitive extension matching
- Update test CMakeLists.txt with new test executables

Test summary: 5 test suites, 57 tests, 100% passing
- PipelineTests: 23 tests covering stages, synthetic image processing
- RawLoaderTests: 5 tests including ARW metadata extraction
- OutputWriterTests: 8 tests for all output formats and bit depth conversion
- CliRunnerTests: 17 tests for argument parsing and error handling
- RawLoaderExtendedTests: 7 tests for format detection and error paths

Addresses CLAUDE.md requirements:
- Tests use RAW golden files (DSC09246.ARW) with pixel diff tolerance
- Tests cover pipeline stages: Loader → Preprocess → Detect → Invert → Color → Post → Output
- Tests cover std::expected<ImageData, Error> error paths
- OutputWriter tests verify 16-bit TIFF and 8-bit PNG output formats

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 09:58:53 +01:00
Christoph K.
e740234a06 fix: respect config film_type to force negative inversion
NegativeDetector now accepts an optional forced FilmType. When
film_type != "auto" in config.ini, auto-detection is skipped and
the configured type is applied directly. build_pipeline() in
CliRunner maps c41→ColorNegative and bw→BWNegative accordingly.

Default config changed from film_type=auto to film_type=c41 to
match the project's primary use case (C-41 color negatives).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 09:56:39 +01:00
Christoph K.
ee016b9a5a chore: set default output format to JPG, add .gitignore
- config.ini: output_format = jpg (quality 95)
- .gitignore: exclude build/, output/, IDE files

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 09:54:19 +01:00
Christoph K.
e5f6fa88fd fix: make project compilable on Ubuntu with Qt 6.4 and no GTest
- Lower Qt6 minimum version requirement from 6.8 to 6.4
- tests/CMakeLists.txt: fall back to FetchContent for GTest if not found
- Add MIT LICENSE file (required by CPack)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 09:52:34 +01:00
Christoph K.
73ccaa3e95 feat: extend CliRunner with config file/batch mode and add comprehensive tests
CliRunner:
- --batch / --config <file> flags trigger batch mode with directory scanning
- collect_files() with recursive support and case-insensitive extension matching
- build_pipeline() respects AppConfig conversion flags (invert toggle)
- Progress output to stderr: "[1/42] Processing DSC09246.ARW..."

Tests (test_pipeline.cpp):
- AppConfig: load/save roundtrip, missing file error, extension parsing,
  format mapping, write_default
- CropProcessor: levels adjustment, sharpening no-clip, empty image error
- ColorCorrector: AWB preserves neutral grey, skips B&W film
- Inverter: color negative changes values, B&W inversion, positive passthrough
- Preprocessor: 8-bit→16-bit conversion

test_rawloader.cpp: added missing <fstream> include

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 09:42:01 +01:00
Christoph K.
db39ef8c58 feat: add Windows cross-compilation build script
scripts/build-windows.sh configures and builds with the MinGW-w64 toolchain,
collects runtime DLLs (OpenCV, LibRaw, Qt6, MinGW runtime) into dist-windows/,
strips release binaries, and packages a ZIP archive.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 09:41:50 +01:00
Christoph K.
54efb58c65 feat: add MinGW-w64 cross-compilation toolchain and CPack packaging
- CMakeLists.txt: adds AppConfig to converter_core sources, LibRaw fallback
  find_library for MinGW, CPack config for NSIS+ZIP (Windows) and TGZ+DEB
  (Linux), install rules for binary and example config
- cmake/toolchain-mingw64.cmake: x86_64-w64-mingw32 toolchain, static
  libgcc/libstdc++ linking, optional vcpkg x64-mingw-static triplet

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 09:41:33 +01:00
Christoph K.
71d535fc50 feat: extend MainWindow with QThread worker, settings panel, and batch dialog
- ConversionWorker runs pipeline on background QThread so the GUI stays
  responsive during conversion; emits file_done, preview_ready, finished
- MainWindow adds: output-format QComboBox, film-type QComboBox, Batch button
  that opens an AppConfig INI file and discovers files from batch.input_dir
- main.cpp: --batch and --config flags trigger CLI mode without Qt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 09:41:23 +01:00
Christoph K.
fd2d97ddeb feat: implement all core pipeline stage algorithms
- CropProcessor: Canny/contour auto-crop with kMinFrameAreaRatio guard,
  percentile-based levels adjustment (0.5th/99.5th), unsharp mask sharpening
- Inverter: C-41 orange mask removal via border sampling + per-channel
  pedestal subtraction before bitwise_not; B&W simple bitwise_not
- ColorCorrector: LAB-space C-41 cast correction (a*/b* re-centering)
  followed by gray-world auto white balance; EXIF WB fallback
- Preprocessor: 8-bit→16-bit scaling already correct; deskew stub retained

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 09:41:18 +01:00
Christoph K.
344c22b6e3 feat: add AppConfig INI-based configuration system
Implements a zero-dependency INI parser for application settings with
[batch], [conversion], and [quality] sections. Includes AppConfig::load(),
write_default(), output_format(), and parsed_extensions() helpers, along
with a documented config.ini example file.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 09:41:07 +01:00
Christoph K.
65b411b23d chore: initial project scaffold from architecture design
- Add CLAUDE.md with project overview, tech stack, build commands,
  architecture description, coding standards, and sample images section
- Add full directory structure: src/, docs/, tests/, import/
- Add CMakeLists.txt with C++20, OpenCV/LibRaw/Qt6 dependencies,
  converter_core static lib, optional GUI, and GTest tests
- Add architecture documentation: ARCHITECTURE.md, PIPELINE.md, MODULES.md
- Add source skeletons for all pipeline stages:
  RawLoader, Preprocessor, NegativeDetector, Inverter, ColorCorrector,
  CropProcessor, OutputWriter, Pipeline, MainWindow, CliRunner, main.cpp
- Add initial test stubs for pipeline and rawloader
- Add sample ARW files in import/ for integration testing

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 09:28:32 +01:00