Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
4061b72
minor ui fix
skipperoo Mar 9, 2026
e7e249b
adding tiny dng writer and opencv
skipperoo Mar 9, 2026
b419518
adding tiny dng writer and opencv
skipperoo Mar 9, 2026
ae70b2c
workflow
skipperoo Mar 9, 2026
4052326
wip: changed log parameter and started implementing stitche
skipperoo Mar 11, 2026
c679093
wip: wired up, stitching fails
skipperoo Mar 11, 2026
e4d85cc
wip: wired up, stitching fails
skipperoo Mar 11, 2026
8a04095
wip: the panorama works, but the dng is not compatible with libraw
skipperoo Mar 16, 2026
b15da4a
wip: the panorama works, but the dng is not compatible with libraw
skipperoo Mar 16, 2026
8938370
wip: the panorama works, but the dng is not compatible with libraw
skipperoo Mar 16, 2026
af95a25
wip: almost ok, missing dng thumbnail
skipperoo Mar 16, 2026
c35f44d
fixed: dng thumbnail
skipperoo Mar 17, 2026
f35a78b
almost ok, need to fix tones targeting in frag and ImageDeveloper and…
skipperoo Mar 17, 2026
539c07a
CI
skipperoo Mar 17, 2026
7b7c2f3
CI
skipperoo Mar 17, 2026
5c64d9b
CI
skipperoo Mar 17, 2026
dc2bd21
local builds
skipperoo Mar 17, 2026
f95b684
styling. need to fix contextmenu and make it more consistent
skipperoo Mar 17, 2026
d5fd24f
fix: darker tones behave better
skipperoo Mar 31, 2026
da30d97
fix: log level name confict in windows builds
skipperoo Apr 1, 2026
f6ee450
fix: typo
skipperoo Apr 1, 2026
0af2360
fix: new tone editing pipeline
skipperoo Apr 1, 2026
29ac48c
Release v0.2.0
skipperoo Apr 1, 2026
b2e9801
cleanup
skipperoo Apr 3, 2026
8c3be10
Added SIMD support for export and histogram update
skipperoo Apr 3, 2026
f73864c
readme
skipperoo Apr 8, 2026
d1097bc
minor fixes
skipperoo Apr 9, 2026
653282a
minor fixes
skipperoo Apr 9, 2026
ec2224c
minor fixes
skipperoo Apr 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 11 additions & 7 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,13 @@ jobs:
if: runner.os == 'Windows'
uses: actions/cache@v4
with:
path: C:\vcpkg\installed
key: vcpkg-${{ runner.os }}-libraw-vulkan
restore-keys: vcpkg-${{ runner.os }}-
path: |
C:\vcpkg\installed
C:\vcpkg\downloads
# Hashes the workflow file itself. If you change the install step below, the cache resets automatically.
key: vcpkg-${{ runner.os }}-${{ hashFiles('.github/workflows/build.yml') }}
restore-keys: |
vcpkg-${{ runner.os }}-

- name: Cache CMake build
uses: actions/cache@v4
Expand All @@ -59,16 +63,16 @@ jobs:
libxcb-cursor0 libxcb-xinerama0 libxcb-xinput0 libxcb-icccm4 \
libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-shape0 \
libwayland-client0 libwayland-cursor0 libwayland-egl1 libxkbcommon-x11-0 \
libwayland-dev wayland-protocols libwayland-server0 \
imagemagick
libwayland-dev wayland-protocols libwayland-server0 libopencv-dev \
imagemagick libtiff-dev
wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage
chmod +x linuxdeploy-x86_64.AppImage linuxdeploy-plugin-qt-x86_64.AppImage

- name: Install Dependencies (Windows)
if: runner.os == 'Windows'
run: |
vcpkg install libraw:x64-windows vulkan:x64-windows
vcpkg install libraw:x64-windows vulkan:x64-windows opencv4:x64-windows tiff:x64-windows

- name: Configure CMake
shell: bash
Expand Down Expand Up @@ -110,7 +114,7 @@ jobs:
# Tell the Qt plugin where to find QML files to scan for dependencies
export QML_SOURCES_PATHS="${{ github.workspace }}/content"
# Explicitly request extra platform plugins for better compatibility
export EXTRA_QT_PLUGINS="platforms,wayland-graphics-integration-client,wayland-shell-integration,imageformats"
export EXTRA_QT_PLUGINS="platforms,wayland-graphics-integration-client,wayland-shell-integration,imageformats,styles,controls,quickcontrols2"

# Run linuxdeploy
./linuxdeploy-x86_64.AppImage --appdir AppDir -e build_dir/Photon -d Photon.desktop -i assets/icons/photon.png --plugin qt --output appimage
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ CMakeLists.txt.user*
.rcc/
.uic/
/build*/
/dist/
/research/
testphoton
tmp
Testing
70 changes: 51 additions & 19 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.16)

project(Photon VERSION 0.1.1 LANGUAGES CXX)
project(Photon VERSION 0.2.0 LANGUAGES CXX)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

Expand All @@ -21,14 +21,18 @@ find_package(Vulkan REQUIRED)
if(WIN32)
# Use find_package for vcpkg compatibility on Windows
find_package(LibRaw REQUIRED)
find_package(OpenCV REQUIRED)
find_package(TIFF REQUIRED)
add_compile_definitions(WIN32_LEAN_AND_MEAN)
add_compile_definitions(NOMINMAX)
else()
find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBRAW REQUIRED libraw)
pkg_check_modules(OPENCV REQUIRED opencv4)
pkg_check_modules(TIFF REQUIRED libtiff-4)
endif()

qt_standard_project_setup(REQUIRES 6.8)
qt_standard_project_setup(REQUIRES 6.10)

qt_add_executable(Photon
src/main.cpp
Expand All @@ -45,6 +49,8 @@ qt_add_executable(Photon
src/engine/VulkanComputeContext.cpp
src/engine/VulkanComputeContext.h
src/engine/patch_search.comp
src/engine/Panorama.cpp
src/engine/Panorama.h
src/components/RawViewport.cpp
src/components/RawViewport.h
src/components/ToneLutProvider.h
Expand Down Expand Up @@ -114,6 +120,8 @@ qt_add_qml_module(Photon
src/engine/GpuChromaFilter.h
src/engine/ImageDeveloper.cpp
src/engine/ImageDeveloper.h
src/engine/Panorama.cpp
src/engine/Panorama.h
src/engine/VulkanComputeContext.cpp
src/engine/VulkanComputeContext.h
src/managers/AppStateManager.cpp
Expand Down Expand Up @@ -183,6 +191,8 @@ qt_add_qml_module(Photon
assets/icons/tube.svg
assets/icons/trash.svg
assets/icons/download.svg
assets/icons/panorama.svg
assets/icons/hdr.svg
assets/icons/folder.svg
assets/icons/home.svg
assets/icons/eye.svg
Expand All @@ -206,14 +216,18 @@ set_target_properties(Photon PROPERTIES

if(WIN32)
target_link_libraries(Photon
PRIVATE Qt6::Quick Qt6::QuickControls2 Qt6::Gui Qt6::ShaderTools Qt6::Concurrent Qt6::GuiPrivate
PRIVATE Qt6::Quick Qt6::QuickControls2 Qt6::Gui Qt6::ShaderTools Qt6::Concurrent Qt6::GuiPrivate
PRIVATE ${LibRaw_LIBRARIES}
PRIVATE ${OpenCV_LIBRARIES}
PRIVATE ${TIFF_LIBRARIES}
PRIVATE Vulkan::Vulkan
)
else()
target_link_libraries(Photon
PRIVATE Qt6::Quick Qt6::QuickControls2 Qt6::Gui Qt6::ShaderTools Qt6::Concurrent Qt6::GuiPrivate
PRIVATE ${LIBRAW_LIBRARIES}
PRIVATE ${OPENCV_LIBRARIES}
PRIVATE ${TIFF_LIBRARIES}
PRIVATE Vulkan::Vulkan
)
endif()
Expand All @@ -234,6 +248,7 @@ target_include_directories(Photon PRIVATE
${CMAKE_CURRENT_BINARY_DIR}
$<$<NOT:$<BOOL:${WIN32}>>:/usr/include/qt6/QtGui/6.10.1>
$<$<NOT:$<BOOL:${WIN32}>>:/usr/include/qt6/QtGui/6.10.1/QtGui>
$<$<NOT:$<BOOL:${WIN32}>>:${OPENCV_INCLUDE_DIRS}>
)

# Ensure QML types are registered before main
Expand Down Expand Up @@ -268,23 +283,40 @@ install(DIRECTORY content/ DESTINATION ${CMAKE_INSTALL_BINDIR}/content)
install(DIRECTORY assets/ DESTINATION ${CMAKE_INSTALL_BINDIR}/assets)

# Install vcpkg DLLs on Windows
if(WIN32)
# if(WIN32)
# Find LibRaw DLL based on build configuration
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
file(GLOB LIBRAW_DLL "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/bin/rawd.dll")
else()
file(GLOB LIBRAW_DLL "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin/raw.dll")
endif()
if(LIBRAW_DLL)
install(FILES ${LIBRAW_DLL} DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()

# Find and install all vcpkg DLLs (but not raw.dll again)
file(GLOB VCPKG_DLLS "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin/*.dll")
if(VCPKG_DLLS)
list(REMOVE_ITEM VCPKG_DLLS "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin/raw.dll")
install(FILES ${VCPKG_DLLS} DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
# if(CMAKE_BUILD_TYPE STREQUAL "Debug")
# file(GLOB LIBRAW_DLL "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/bin/rawd.dll")
# else()
# file(GLOB LIBRAW_DLL "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin/raw.dll")
# endif()
# if(LIBRAW_DLL)
# install(FILES ${LIBRAW_DLL} DESTINATION ${CMAKE_INSTALL_BINDIR})
# endif()
#
# # Find and install all vcpkg DLLs (but not raw.dll again)
# file(GLOB VCPKG_DLLS "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin/*.dll")
# if(VCPKG_DLLS)
# list(REMOVE_ITEM VCPKG_DLLS "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin/raw.dll")
# install(FILES ${VCPKG_DLLS} DESTINATION ${CMAKE_INSTALL_BINDIR})
# endif()
#endif()

if(WIN32)
# 1. Determine the correct vcpkg bin folder based on build type
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(VCPKG_BIN_DIR "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/bin")
else()
set(VCPKG_BIN_DIR "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin")
endif()

# 2. Grab ALL DLLs from that folder (this handles LibRaw, OpenCV, and any others automatically)
file(GLOB VCPKG_DLLS "${VCPKG_BIN_DIR}/*.dll")

# 3. Install them
if(VCPKG_DLLS)
install(FILES ${VCPKG_DLLS} DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
endif()

if(WIN32)
Expand Down
76 changes: 76 additions & 0 deletions Dockerfile.linux
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# Dockerfile for Linux AppImage build (Ubuntu 22.04)
FROM ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive

# Install build tools and dependencies
RUN apt-get update && apt-get install -y \
build-essential \
cmake \
git \
wget \
curl \
python3 \
python3-pip \
libraw-dev \
libvulkan-dev \
libfuse2 \
libgl1-mesa-dev \
libxcb-cursor0 \
libxcb-xinerama0 \
libxcb-xinput0 \
libxcb-icccm4 \
libxcb-image0 \
libxcb-keysyms1 \
libxcb-render-util0 \
libxcb-shape0 \
libwayland-client0 \
libwayland-cursor0 \
libwayland-egl1 \
libxkbcommon-x11-0 \
libxkbcommon-dev \
libxkbcommon-x11-dev \
libxcb-xkb-dev \
libfontconfig1-dev \
libfreetype6-dev \
libx11-xcb-dev \
libwayland-dev \
wayland-protocols \
libwayland-server0 \
libopencv-dev \
imagemagick \
libtiff-dev \
file \
&& rm -rf /var/lib/apt/lists/*

# Install aqtinstall for Qt installation
RUN pip3 install aqtinstall

# Install Qt 6.10.1 (matches build.yml)
RUN aqt install-qt linux desktop 6.10.1 linux_gcc_64 -m qtshadertools --outputdir /opt/qt

# Set Qt environment variables
ENV PATH="/opt/qt/6.10.1/gcc_64/bin:${PATH}"
ENV QT_DIR="/opt/qt/6.10.1/gcc_64"

# Download and extract linuxdeploy tools
WORKDIR /tools
RUN wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage && \
wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage && \
chmod +x linuxdeploy-x86_64.AppImage linuxdeploy-plugin-qt-x86_64.AppImage && \
./linuxdeploy-x86_64.AppImage --appimage-extract && \
mv squashfs-root linuxdeploy-extracted && \
./linuxdeploy-plugin-qt-x86_64.AppImage --appimage-extract && \
mv squashfs-root linuxdeploy-plugin-qt-extracted && \
rm linuxdeploy-x86_64.AppImage linuxdeploy-plugin-qt-x86_64.AppImage

# Symlink binaries to /usr/local/bin for easy access
RUN ln -s /tools/linuxdeploy-extracted/usr/bin/linuxdeploy /usr/local/bin/linuxdeploy && \
ln -s /tools/linuxdeploy-plugin-qt-extracted/usr/bin/linuxdeploy-plugin-qt /usr/local/bin/linuxdeploy-plugin-qt

# Copy source code and build script
WORKDIR /app
COPY . .
RUN chmod +x build_internal.sh

CMD ["/app/build_internal.sh"]
58 changes: 58 additions & 0 deletions Dockerfile.windows
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Dockerfile for Windows build using MSVC 2022
# This MUST be run on a Windows host with Windows Containers enabled
FROM mcr.microsoft.com/windows/servercore:ltsc2022

# Set shell to powershell for easier setup
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

# Install Visual Studio 2022 Build Tools
RUN Invoke-WebRequest -Uri https://aka.ms/vs/17/release/vs_buildtools.exe -OutFile vs_buildtools.exe; \
Start-Process -FilePath vs_buildtools.exe -ArgumentList '--quiet', '--norestart', '--nocache', \
'--add', 'Microsoft.VisualStudio.Workload.VCTools', \
'--add', 'Microsoft.VisualStudio.Component.VC.ATLMFC', \
'--add', 'Microsoft.VisualStudio.Component.Windows11SDK.22000' -Wait; \
Remove-Item -Force vs_buildtools.exe

# Install Chocolatey to manage other tools
RUN Set-ExecutionPolicy Bypass -Scope Process -Force; \
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; \
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

# Install CMake, Git, and Python
RUN choco install -y cmake git python3

# Install aqtinstall for Qt
RUN pip install aqtinstall

# Install Qt 6.10.1 (matches build.yml)
RUN aqt install-qt windows desktop 6.10.1 win64_msvc2022_64 -m qtshadertools --outputdir C:\Qt

# Install and bootstrap vcpkg
RUN git clone https://github.com/microsoft/vcpkg.git C:\vcpkg; \
C:\vcpkg\bootstrap-vcpkg.bat

# Set up work directory
WORKDIR C:\app
COPY . .

# Build and Package script
# This script mirrors the build.yml steps
RUN @' \
$env:PATH = \"C:\Qt\6.10.1\msvc2022_64\bin;C:\Program Files\CMake\bin;C:\Program Files\Git\cmd;C:\vcpkg;\" + $env:PATH; \
# Install dependencies via vcpkg \
vcpkg install libraw:x64-windows vulkan:x64-windows opencv4:x64-windows tiff:x64-windows; \
# Configure and Build \
mkdir build_win; cd build_win; \
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake; \
cmake --build . --config Release -j $env:NUMBER_OF_PROCESSORS; \
# Package \
mkdir install; \
cmake --install . --config Release --prefix install; \
cd install\bin; \
& \"C:\Qt\6.10.1\msvc2022_64\bin\windeployqt.exe\" --release --qmldir ..\..\..\content --no-compiler-runtime Photon.exe; \
# Final Copy to dist (will be mapped via volume) \
mkdir C:\app\dist\windows\Photon; \
xcopy /E /I /Y C:\app\build_win\install\* C:\app\dist\windows\Photon\; \
'@ | Out-File -FilePath C:\app\build_internal.ps1 -Encoding ascii

CMD ["powershell", "-File", "C:\\app\\build_internal.ps1"]
Loading
Loading