Only this pageAll pages
Powered by GitBook
1 of 79

Luxoria

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

ISSUE_TEMPLATE

.github

[LDA] - (____) ...

Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like A clear and concise description of what you want to happen.

Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered.

Additional context Add any other context or screenshots about the feature request here.

LuxFilter.Benchmark

BenchmarkDotNet.Artifacts

results

[LWA] - (____) ...

Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like A clear and concise description of what you want to happen.

Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered.

Additional context Add any other context or screenshots about the feature request here.

LuxStudio

BenchmarkDotNet.Artifacts

Luxoria.App

Luxoria

Luxoria Desktop Software (Main Release)

| |


Luxoria is a powerful all-in-one photography solution designed to streamline your workflow. Whether you are an individual photographer or part of a team, Luxoria makes it easy to manage and enhance your images, collaborate with clients, and deliver exceptional results.

📸 Introduction

Luxoria offers photographers a comprehensive solution to optimize their image workflow. Our desktop application simplifies the process of importing, organizing, editing, and exporting images, while our web platform enables easy sharing and client feedback. The platform ensures photographers can focus on their creative process while effortlessly managing their projects.

Desktop App Highlights:

  • Import images directly from your camera or storage devices.

  • Organize your photos into albums and collections.

  • Edit with a wide range of powerful editing tools, including AI enhancements.

  • Collaborate with clients to refine and finalize image selections.

Web Platform Highlights:

  • Share images via a web gallery.

  • Allow clients to view and select their favorite photos.

  • Collect feedback directly from clients in real-time.

🛠️ Features

  • Image Importation: Seamless image import from cameras or local storage.

  • Smart Organization: Organize images into albums, collections, or folders based on date, location, camera settings, and more.

  • Advanced Filters: Search and filter images by metadata, including date, location, and camera settings.

  • Editing Tools: Utilize a variety of editing tools such as cropping, color correction, retouching, and AI-powered enhancements.

🚀 Getting Started

  1. Download and Install: Download the Luxoria desktop application from our website and follow the installation steps.

  2. Set Up: Import your first batch of photos and start organizing your library.

  3. Explore Features: Try out the editing tools, filters, and collaborative workflows.

  4. Share with Clients: Upload selected photos to the web platform and invite clients to review and provide feedback.

💡 Why Luxoria?

Luxoria is more than just a photo editing tool, it's a complete photography management platform. From the moment you capture a shot, Luxoria ensures your photos are organized, edited, and shared efficiently. With AI-powered tools, intuitive collaboration features, and an easy-to-use interface, Luxoria is designed for photographers who want to focus on creativity while streamlining their workflow.


📄 License

Luxoria is licensed under the Apache 2.0 License. See the file for more details.


Feel free to contribute or explore the codebase. Luxoria is constantly evolving, and we welcome your feedback and suggestions!

[LDA] - (____) ...

Describe the bug A clear and concise description of what the bug is.

To Reproduce Steps to reproduce the behavior:

  1. Go to '...'

  2. Click on '....'

  3. Scroll down to '....'

Catalyst Demo

To run the Catalyst demo, first install the npm dependencies:

Next, run the development server:

Finally, open in your browser to view the website.

See error

Expected behavior A clear and concise description of what you expected to happen.

Screenshots If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]

  • Browser [e.g. chrome, safari]

  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]

  • OS: [e.g. iOS8.1]

  • Browser [e.g. stock browser, safari]

  • Version [e.g. 22]

Additional context Add any other context about the problem here.

proof-of-consultations-or-collaborations

[LWA] - (____) ...

Describe the bug A clear and concise description of what the bug is.

To Reproduce Steps to reproduce the behavior:

  1. Go to '...'

  2. Click on '....'

  3. Scroll down to '....'

  4. See error

Expected behavior A clear and concise description of what you expected to happen.

Screenshots If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]

  • Browser [e.g. chrome, safari]

  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]

  • OS: [e.g. iOS8.1]

  • Browser [e.g. stock browser, safari]

  • Version [e.g. 22]

Additional context Add any other context about the problem here.

Modules

[LXX] - (____) ...

Describe the bug A clear and concise description of what the bug is.

To Reproduce Steps to reproduce the behavior:

  1. Go to '...'

  2. Click on '....'

  3. Scroll down to '....'

  4. See error

Expected behavior A clear and concise description of what you expected to happen.

Screenshots If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]

  • Browser [e.g. chrome, safari]

  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]

  • OS: [e.g. iOS8.1]

  • Browser [e.g. stock browser, safari]

  • Version [e.g. 22]

Additional context Add any other context about the problem here.

Models

webapp

engagement-in-tech-communities

Proof of consultations or collaborations

See RECAP_20_11_2024, RECAP_12_06_2025, RECAP_03_04_2025, RECAP_03_04_2025_1

KPIs

ImportServiceBenchmark-asm

results

Identifying the right technical problem solvers

Professional Photographers

See 1 & 2 & 3

Feebacks

See 4

Luxoria.Modules

ImportServiceBenchmark-asm

clear-licensing-position

Documenting Contributions

Brisque Score Nuget

https://www.nuget.org/packages/Luxoria.Algorithm.BrisqueScore, See : 1, 2

+2700 Downloads as of 22/06/2025

Luxoria SDK

https://www.nuget.org/packages/Luxoria.SDK#readme-body-tab, See : 3

Luxoria Algorithm YoLo Detect Model in .NET

https://www.nuget.org/packages/Luxoria.Algorithm.YoLoDetectModel, See : 4

GrabCut Implementation (v1.0.0 / v1.0.1)

https://www.nuget.org/packages/Luxoria.Algorithm.YoLoDetectModel, See : 5

Luxoria (Front-End) LuxPortal Public Docker Image

https://hub.docker.com/r/luxoria/luxstudio (+736 Downloads)

LuxStudio (Back-End) LuxAPI Public Docker Image

https://hub.docker.com/r/luxoria/luxapi (+539 Downloads)

Repository

https://github.com/LuxoriaSoft/Luxoria (+971 commits)

An average of 25 unique visitors per 15 days

Online Luxoria Dev. documentation

https://docs.luxoria.bluepelicansoft.com

Issues

gonogo-review

mandatory

research-documentation

identifying-the-right-technical-problem-solvers

[LXX] - (____) ...

Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like A clear and concise description of what you want to happen.

Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered.

Additional context Add any other context or screenshots about the feature request here.

C

B

tools

results

documenting-contributions

npm install
npm run dev
http://localhost:3000

Export to multiple formats with one-click options.

  • Collaboration Tools: Work directly with clients to review and approve images. Gather input via comments, selections, or ratings.

  • Export Flexibility: Export images to multiple formats like JPEG, PNG, TIFF, or PDF with adjustable quality settings.

  • Web Sharing: Share albums with clients through a custom web platform for easy viewing and feedback.

  • Feedback Mechanism: Clients can provide individualized feedback, ensuring the final deliverables meet expectations.

  • Download / Releases
    Documentation
    Contribute
    LICENSE

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people

    • Being respectful of differing opinions, viewpoints, and experiences

    • Giving and gracefully accepting constructive feedback

    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind

    • Trolling, insulting or derogatory comments, and personal or political attacks

    • Public or private harassment

    • Publishing others' private information, such as a physical or email address, without their explicit permission

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [email protected]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the , version 2.0, available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.

    Community Impact Guidelines were inspired by .

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    Luxoria UI Manual Test Protocol

    Description

    This document defines the manual test protocol for building and validating Luxoria.App and its associated modules and components on three target architectures: x64, x86, and ARM64. Each module LuxImport, LuxFilter, LuxEditor, LuxExport, LuxStudio and the standard component Marketplace is built and tested individually. Developers are responsible for executing and documenting all feature tests.

    Scope

    • Build validation for Luxoria.App on x64, x86, ARM64.

    • Module assembly and feature verification for each module and the Marketplace component.

    • Manual test cases executed by module developers.

    Prerequisites

    • Source code checkout of Luxoria repository (latest main branch).

    • Visual Studio 2022 + WinUI Developpement Tool

    • Windows App 10/11/1X SDK

    • Windows 10/11

    Build and Verification Procedures

    1. Open VS 2022

    2. Load Luxoria.App.sln

    3. Run Luxoria.App

    4. Build each module such as

    • LuxImport

    • LuxFilter

    • LuxEditor

    • LuxExport

    1. Execute each testing requirements (see below for specifications)

    Testing Specifications

    LuxImport

    TEST 1:

    Open an existing Collection : OK

    TEST 2:

    Open a new folder, then create a new name and click on import : OK

    Success : A pop-up is being displayed after the importation has been completed

    Luxfilter

    TEST 1:

    Check Brisque Algorithm Click on Save / Sync : OK

    TEST 2:

    Check CLIP Model Click on Save / Sync: OK

    TEST 3:

    Select another model/algorithm Click on Save / Sync : OK

    LuxEditor

    TEST 1:

    Tricks some parameters : OK

    TEST 2:

    Tricks some parameters Crop image : OK

    TEST 3:

    Tricks some parameters Crop the image Use the layer system Crop image : OK

    LuxExport

    TEST 1:

    Export as PNG : OK

    TEST 2:

    Export as other format Usage of watermark : OK

    TEST 3:

    Export as other format Usage of watermark (icon) Usage of naming template : OK

    LuxExport + LuxStudio

    TEST 1:

    Connect to Studio : OK

    TEST 2:

    Connect to Studio : OK Export to studio : OK

    Bugs / Issues

    For any bug found, please create an issue here : https://github.com/LuxoriaSoft/Luxoria/issues

    LuxAPI

    Requirements

    • Docker (min. 27.4.0)

    • Docker Compose

    Installation

    1. Clone the repository

    2. Run docker-compose up in the LuxStudio directory

    3. Run dotnet tool install --global dotnet-ef in the LuxAPI directory

    Luxoria Documentation

    Introduction

    This is the official documentation for the Luxoria project.

    How to use

    To use this documentation, simply navigate to the desired section, please navigate in the selected section to find the desired information.

    Are you ready for development ?

    If you are ready to start developing, please follow the .

    Good practices

    • Always use the latest version of the documentation.

    • If you find any errors, please report them.

    • If you have any suggestions, please let us know.

    • If you want to contribute, please follow the .

    Contributing

    If you want to contribute to this documentation, please follow the .

    LuxEditor

    The Standard Editing Module


    ✨ Features

    • Non-Destructive Editing Every change is stored as adjustments/layers, your originals stay untouched.

    pull_request_template

    Name: Luxoria - Pull Request Title: [L__] - (____) ... Assignees:


    Description

    Provide a brief summary of the changes in this PR, including any context necessary for understanding it.


    ImportServiceBenchmark-report-github

    Method
    Mean
    Error
    StdDev

    Engagement in Tech Communities

    Newly issue on OpenCV GrabCut Implementation

    https://github.com/opencv/opencv/issues/27058

    See 1

    LuxFilter.Benchmark.FilterServiceBenchmark-report-default

    BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.2894) Apple Silicon, 6 CPU, 6 logical and 6 physical cores .NET SDK 9.0.102 [Host] : .NET 9.0.1 (9.0.124.61010), Arm64 RyuJIT AdvSIMD DEBUG DefaultJob : .NET 9.0.1 (9.0.124.61010), Arm64 RyuJIT AdvSIMD

    Method
    Mean
    Error
    StdDev
    Gen0
    Completed Work Items
    Lock Contentions
    Allocated

    Research Documentation

    Scientific Published Papers

    Specific Panoptic Segmentation

    LuxImport

    The Standard Importation Module


    ✨ Features

    • One-Click Collection Initialization Import entire folders to quickly build your photo database.

    Vue 3 + TypeScript + Vite

    This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 <script setup> SFCs, check out the to learn more.

    Learn more about the recommended Project Setup and IDE Support in the .

    Meeting Recap

    Date & Time: 20 November 2024 5PM06

    Attendees:

    • Romain B

    • Luxoria Team


    LuxFilter.Benchmark.FilterServiceBenchmark-report-github

    Method
    Mean
    Error
    StdDev
    Gen0
    Completed Work Items
    Lock Contentions
    Allocated
    LuxStudio

    Run dotnet ef migrations add InitialCreate in the LuxAPI directory

  • Run dotnet ef database update in the LuxAPI directory

  • Run dotnet run in the LuxAPI directory

  • Issue about the integration of OpenCV 4.10.9#5 on VCPKG

    https://github.com/microsoft/vcpkg/issues/44310

    See 2

    Question / Idea about ApplicationIcon for WinUI3

    https://github.com/microsoft/WindowsAppSDK/issues/5212

    See 3

    Qyuestion about the way to create an UI in WinUI3 (+ Asked again)

    https://github.com/microsoft/microsoft-ui-xaml/issues/6299#issuecomment-2630463213 https://github.com/microsoft/microsoft-ui-xaml/discussions/8670#discussioncomment-12039153

    See : 4 & 5

    Interessing Discussions or Sources to resolve issues

    https://github.com/microsoft/microsoft-ui-xaml/discussions https://github.com/mono/SkiaSharp/discussions

    https://ieeexplore.ieee.org/document/10176247 6, 7

  • https://openaccess.thecvf.com/content_CVPR_2019/papers/Liu_An_End-To-End_Network_for_Panoptic_Segmentation_CVPR_2019_paper.pdf 8

  • GrabCut Foreground Segmentation

    • https://pub.ista.ac.at/~vnk/papers/grabcut_siggraph04.pdf 10

    Benchmarks / Benchmarks conducted to compare different technologies

    • Benchmarking Technologies See Benchmark.pdf

    • LuxImport Performance Benchmark LuxImport Result

    • LuxFilter Performance Benchmakk LuxFilter Result

    Conclusions drawn from this technology watch

    • For technologies : See TECH_STACKS.pdf

    • For dependencies : See DEPENDENCIES.pdf

    1. Executive Summary

    The team reviewed storage strategies for our LuxStudio Solution. We initially considered migrating from a document-DB approach to a traditional file-system model. However, after evaluating long-term modularity, performance, and maintainability, we unanimously agreed to pursue a bucket-style database solution using MinIO.


    2. Discussion Points

    Current Storage Model

    • LuxStudio assets are presently stored in a document-oriented database.

    • Concerns were raised about scalability and operational complexity.

    File-System Migration Proposal

    • Pros:

      • Simplifies backup and direct file access.

    • Cons:

      • Limited scalability in distributed environments.

      • Potential performance bottlenecks under heavy I/O loads.

    Bucket-Style DB (MinIO) Evaluation

    • Modularity:

      • MinIO’s S3-compatible API allows plug-and-play integration with existing cloud-native tooling.

    • Performance:

      • Distributed, erasure-coded clusters ensure high throughput and fault tolerance.

    • Sustainability:

      • Easier maintenance and upgrades via rolling updates.

      • Broad community and commercial support.


    3. Decision

    Adopt a bucket-style object storage solution using MinIO for all LuxStudio asset storage moving forward.


    4. Next Steps & Action Items

    • Prototype MinIO deployment (single-node) and validate core APIs.

    • Benchmark read/write performance against existing document-DB setup.

    • Draft architecture diagram and integration plan with LuxStudio

    • Review security and backup strategies for MinIO cluster

    Focusing on what is best not just for us as individuals, but for the overall community

    Other conduct which could reasonably be considered inappropriate in a professional setting

    Contributor Covenant
    Mozilla's code of conduct enforcement ladder
    script setup docs
    Vue Docs TypeScript Guide
    Desktop
    WebApp
    development guidelines
    contribution guidelines
    contribution guidelines

    LuxImport.Benchmark

    0.100 ns

    -

    -

    -

    -

    ComputeSharpness

    1,247,542,131.41 ns

    4,759,688.559 ns

    3,974,555.516 ns

    94000.0000

    -

    -

    396981440 B

    ComputeBrisque

    167,962,263.89 ns

    936,623.349 ns

    731,253.903 ns

    -

    -

    -

    1296 B

    ComputeResolution

    18.65 ns

    0.113 ns

    9,645.05 μs

    23,840.17 μs

    BenchmarkLoadAssets

    8,870,859.5 μs

    526,318.08 μs

    1,535,294.66 μs

    
    BenchmarkDotNet v0.14.0, Windows 11 (10.0.22631.4751/23H2/2023Update/SunValley3)
    Apple Silicon, 4 CPU, 4 logical and 4 physical cores
    .NET SDK 9.0.102
      [Host]     : .NET 9.0.1 (9.0.124.61010), Arm64 RyuJIT AdvSIMD
      DefaultJob : .NET 9.0.1 (9.0.124.61010), Arm64 RyuJIT AdvSIMD
    
    

    BenchmarkIsInitialized

    204.7 μs

    2.38 μs

    2.11 μs

    BenchmarkInitializeDatabase

    199.3 μs

    2.29 μs

    2.14 μs

    BenchmarkIndexCollectionAsync

    487,436.6 μs

    -

    -

    ComputeSharpness

    1,247,542,131.41 ns

    4,759,688.559 ns

    3,974,555.516 ns

    94000.0000

    -

    -

    396981440 B

    ComputeBrisque

    167,962,263.89 ns

    936,623.349 ns

    731,253.903 ns

    -

    -

    -

    1296 B

    ComputeResolution

    18.65 ns

    0.113 ns

    0.100 ns

    -

    -

    
    BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.2894)
    Apple Silicon, 6 CPU, 6 logical and 6 physical cores
    .NET SDK 9.0.102
      [Host]     : .NET 9.0.1 (9.0.124.61010), Arm64 RyuJIT AdvSIMD DEBUG
      DefaultJob : .NET 9.0.1 (9.0.124.61010), Arm64 RyuJIT AdvSIMD
    
    
  • Core Adjustments White balance (Temperature/Tint), Exposure, Contrast, Highlights/Shadows, Whites/Blacks.

  • Presence & Color Control Texture, Dehaze, Vibrance, Saturation for quick pop without overcooking.

  • Pro Tone Curve Intuitive curve editor (RGB & channels) for precise tonal shaping.

  • Crop & Layers Fast cropping plus layer-based workflows for organized edits.

  • Subject Recognition (Mask-Ready) Kickstart local edits with one-click subject detection.

  • Presets & Quick Culling One-click looks, star/flag tools, and a film-strip for rapid review.

  • Inline EXIF/Metadata Viewer See camera data while you edit, no context switching.

  • Reset & Compare, Undo/Redo Confidence to experiment, with instant safety nets.

  • Clean, Focused UI Editor, Crop, Layers, Export tabs, everything where you expect it.


  • 📂 How It Works

    1. Open Pick photos from your Collection Importer (LuxImport)

    2. Filter Thanks to LuxFilter, apply filters (quality, scores, ranking, etc.) to select the best subset

    3. Adjust Start with Basic (WB, Tone, Presence), then refine with Curve or Layers.

    4. Mask Manual masks for targeted edits.

    5. Export Send to Export with your preferred format and quality settings.


    📌 Coming Soon

    • Customizable shortcuts and a lightweight plugin API


    📄 License

    Luxoria and all standard modules are licensed under the Apache 2.0 License. See the LICENSE for details.

    Source Code


    Feel free to contribute or open issues - LuxEditor evolves with your feedback!

    PIC1
    PIC2
    Checklist

    Type of Change


    Related Issues

    Fixes #<issue_number> Closes #<issue_number>


    How Has This Been Tested?

    Provide a brief description of how you tested your changes. Include details about the environment and test cases used.


    Screenshots (If Applicable)

    Attach any screenshots that help illustrate the changes made in this PR.


    Additional Context

    Add any additional information or context about the PR here.


    Automatic Sync with File System Detects new photos added or removed from your folders and updates the database instantly.

  • Real-Time Change Tracking Keeps your collection fully aligned with the source folders, so your database always reflects the latest state.

  • Scalable for Large Libraries Optimized to handle thousands of photos without slowing down.

  • Clean & Intuitive Interface Minimal, elegant UI designed for both speed and usability.


  • 📂 How It Works

    1. Initialize Select a folder containing your photos. LuxImport automatically builds your database.

    2. Stay Synced Add, delete, or modify photos in your folder. LuxImport keeps track automatically.

    3. Enjoy Always access a clean, updated photo library with zero manual effort.


    📌 Coming Soon

    • Advanced tagging & metadata support

    • Multi-source importation (using multiple folders, NAS, OneDrive, direct from camera)

    📄 License

    Luxoria and all standard modules are licensed under the Apache 2.0 License. See the LICENSE file for more details.

    Source Code


    Feel free to contribute or explore the codebase. Luxoria is constantly evolving, and we welcome your feedback and suggestions!

    M
    SonarQube Cloud

    Meeting Recap

    Date & Time: 3 April 2025 2PM

    Attendees:

    • Yoo, Y

    • Noah GOSCINIAK


    1. Executive Summary

    Yoo, Young Joon shared expert insights on modern computer vision segmentation techniques. Key recommendations included U-Net variants and Fully Convolutional Network (FCN) deep learning models to address our image segmentation needs.


    2. Discussion Points

    Computer Vision Segmentation Overview

    • Importance of precise pixel-level classification for our use cases (e.g., medical imagery, scene understanding).

    U-Net Family of Models

    • Architecture: Encoder–decoder with skip connections for fine-grained feature recovery.

    • Variants:

      • U-Net++ (nested U-Net) for richer multi-scale feature fusion.

      • Attention U-Net to focus on relevant spatial regions.

    Fully Convolutional Networks (FCNs)

    • Core Idea: Replace fully connected layers with convolutional layers for end-to-end segmentation.

    • Notable Models:

      • FCN-8s for coarse-to-fine upsampling.

      • DeepLab (atrous convolutions + CRF) for sharper boundaries.

    Model Selection Criteria

    • Data Volume & Annotation Quality

    • Compute Resources & Inference Latency

    • Target Application Requirements (e.g., boundary precision vs. speed)


    3. Decision

    Evaluate and prototype both a U-Net variant and an FCN-based model on our dataset to compare accuracy, speed, and resource utilization.


    4. Next Steps & Action Items

    Set up data pipeline and preprocess images for segmentation tasks Implement baseline U-Net and run initial training/validation Implement baseline FCN-8s (and DeepLab if resources allow) Compare metrics (IoU, pixel accuracy, inference time) Review results with Yoo, Young Joon and refine model selection

    Contributing at Luxoria

    Introduction

    This is the official documentation for the Luxoria project.

    • How to contribute

    • Development guidelines

    Are you ready for development ?

    If you are ready to start developing, please follow the .

    How to contribute

    To contribute to this documentation, please follow the steps below:

    Step 1: Fork the repository

    • Click on the Fork button at the top right corner of the repository.

    Step 2: Clone the repository

    • Clone the repository to your local machine using the following command:

    Step 3: Create a new branch

    • Create a new branch using the following command:

    Step 4: Make changes

    • Make the necessary changes to the documentation.

    Step 5: Commit changes

    • Commit the changes using the following command:

    Step 6: Push changes

    • Push the changes to the repository using the following command:

    Step 7: Create a pull request

    • Create a pull request from your forked repository to the original repository.

    Meeting Recap

    Date & Time: June 19, 2025 · 18:00

    Attendees:

    • Léo F

    • Whole Luxoria Team


    1. Executive Summary

    Initiated the LuxStudio refactor to enhance user experience and operational robustness. Key focus areas include UI improvements, English language fixes, automated Kubernetes deployments via CircleCI, and strengthened user security with hCaptcha and a two-step registration form.


    2. Discussion Points

    UI & Usability Enhancements

    • Revamp layouts and controls for clearer workflows

    • Improve responsiveness and accessibility standards

    • Standardize component library for consistency

    English Language Fixes

    • Audit existing UI text for grammar and clarity

    • Implement i18n framework to simplify future translations

    • Review error messages and tooltips for user-friendly wording

    Automated Deployment (Kubernetes + CircleCI)

    • Define Kubernetes manifests (Deployments, Services, Ingress) under k8s/

    • Create CircleCI pipeline:

      • Build Docker image on merge to main

    User Security & Registration Workflow

    • Embed hCaptcha on signup and login forms

    • Design double-form registration:

      1. User enters email & password

      2. System sends temporary code via email


    3. Decision

    Move forward with the full refactor as outlined, prioritizing UI polish and deployment automation in parallel, followed by security enhancements.


    4. Next Steps & Action Items

    Draft UI mockups and component spec Perform UI text audit and integrate i18n library Define Kubernetes manifests and CircleCI config prototype Implement hCaptcha on auth pages and build registration flow Conduct end-to-end tests (UI, deployment, registration security) Update user documentation and release notes

    LuxFilter

    The Smart Filtering Module

    PIC1

    ✨ Features

    • AI-Powered Filters Apply filters like Brisque (image quality), CLIP (semantic search), Resolution, and Sharpness to automatically evaluate assets.

    • Quality & Ranking Each filter generates scores you can use to rate, flag, or organize your collection.

    • Non-Destructive Evaluation Filtering only tags or scores items – your original assets remain unchanged.

    • Forward Sync Send selected and scored assets forward into other modules (e.g., LuxEditor, LuxExport) with one click.

    • Integrated Ratings & Flags View and manage ratings, flags, and filter scores in a dedicated side panel.

    • Simple Save & Sync Persist results for future sessions or sync directly with the workspace.


    📂 How It Works

    1. Import Bring in your media from LuxImport or other connected modules.

    2. Filter Explorer Run AI-driven filters (Brisque, CLIP, Resolution, Sharpness) to evaluate asset quality.

    3. Review Scores Check Rating, Flags, and Scores in the right-side panel to identify the best candidates.


    📌 Coming Soon

    • More filter algorithms (noise, color harmony, aesthetics)

    • Batch filter pipelines with presets

    • Exportable filter profiles


    📄 License

    Luxoria and all standard modules are licensed under the Apache 2.0 License. See the for details.

    LuxEditor

    The Standard Editing Module

    PIC1
    PIC2

    ✨ Features

    • Non-Destructive Editing Every change is stored as adjustments/layers, your originals stay untouched.

    • Core Adjustments White balance (Temperature/Tint), Exposure, Contrast, Highlights/Shadows, Whites/Blacks.

    • Presence & Color Control Texture, Dehaze, Vibrance, Saturation for quick pop without overcooking.

    • Pro Tone Curve Intuitive curve editor (RGB & channels) for precise tonal shaping.

    • Crop & Layers Fast cropping plus layer-based workflows for organized edits.

    • Subject Recognition (Mask-Ready) Kickstart local edits with one-click subject detection.

    • Presets & Quick Culling One-click looks, star/flag tools, and a film-strip for rapid review.

    • Inline EXIF/Metadata Viewer See camera data while you edit, no context switching.

    • Reset & Compare, Undo/Redo Confidence to experiment, with instant safety nets.

    • Clean, Focused UI Editor, Crop, Layers, Export tabs, everything where you expect it.


    📂 How It Works

    1. Open Pick photos from your Collection Importer (LuxImport)

    2. Filter Thanks to LuxFilter, apply filters (quality, scores, ranking, etc.) to select the best subset

    3. Adjust Start with Basic (WB, Tone, Presence), then refine with Curve or Layers.

    4. Mask Manual masks for targeted edits.


    📌 Coming Soon

    • Customizable shortcuts and a lightweight plugin API


    📄 License

    Luxoria and all standard modules are licensed under the Apache 2.0 License. See the for details.


    Feel free to contribute or open issues - LuxEditor evolves with your feedback!

    Luxoria Standard Modules (LuxStd Modules)

    Overview

    Luxoria Standard Modules (LuxStd Modules) are a collection of core modules designed to provide essential functionalities within the Luxoria ecosystem. These modules follow a standardized architecture, ensuring seamless integration, extensibility, and interoperability with other Luxoria components.

    Characteristics of LuxStd Modules

    • Modular Design: Each module follows a plug-and-play architecture.

    • Event-Driven: Modules communicate through event-based interactions using IEventBus.

    • Extensible: Can be enhanced with additional features without breaking compatibility.

    List of LuxStd Modules

    1. LuxImport

    • Handles the importation, indexing, and management of digital asset collections.

    • Processes large datasets with asynchronous operations and progress tracking.

    2. LuxFilter

    • Provides a filtering pipeline for processing and scoring digital assets.

    • Uses a modular filtering algorithm framework with weighted execution.

    3. LuxExport

    • Provides advanced export functionalities for asset collections.

    • Supports multi-format output, custom file naming, and export conflict resolution.

    Conclusion

    LuxStd Modules form the backbone of the Luxoria ecosystem, ensuring a robust, scalable, and modular approach to handling digital assets. Their event-driven and extensible design makes them ideal for a wide range of applications within the system.

    Meeting Recap

    Date & Time: 12 June 2025 6PM

    Attendees:

    • Léo F

    • Whole Luxoria Team


    1. Executive Summary

    Our current distribution process requires users to manually download a GitHub release, unzip it, and move files into Program Files. To streamline deployment and improve user experience, we have decided to develop a native executable installer.


    2. Discussion Points

    Current Installation Process

    • Navigate to our GitHub repository’s “Releases” page

    • Download the .zip archive of the latest version

    • Extract contents locally

    • Manually move the application folder into C:\Program Files\…

    Pain Points

    • Multiple manual steps prone to user error

    • No version-check or upgrade path

    • Lack of automated shortcut creation and uninstaller

    • Support overhead for installation issues

    Proposed Installer Solution

    • Executable Installer

      • Bundle binaries, assets, and dependencies

      • Automate directory placement under Program Files

      • Create Start menu/desktop shortcuts


    3. Decision

    Proceed with designing and building a native Windows executable installer for our application.


    4. Next Steps & Action Items

    Research and select an installer framework (e.g., NSIS, Inno Setup, MSI) Develop a prototype executable installer Conduct cross-environment testing (Windows versions & permissions) Update documentation and publish installer on GitHub Releases

    Tailwind Plus License

    Personal License

    Tailwind Labs Inc. grants you an on-going, non-exclusive license to use the Components and Templates.

    The license grants permission to one individual (the Licensee) to access and use the Components and Templates.

    You can:

    • Use the Components and Templates to create unlimited End Products.

    Development at Luxoria

    Development Guidelines

    To contribute to this project, please follow the guidelines below to ensure consistency and quality in our development process.

    Gitflow Workflow

    LuxFilter Technical Documentation

    Overview

    LuxFilter is a modular filtering system designed for processing and scoring digital assets efficiently. It integrates with the Luxoria ecosystem and provides a pipeline-based approach to apply filtering algorithms to image data.

    Features

    LuxImport Technical Documentation

    Overview

    LuxImport is a modular system designed for importing, indexing, and managing digital collections efficiently. It integrates with the Luxoria ecosystem and provides functionalities for handling structured asset collections.

    Features

    LuxStudio

    The Collaboration & Delivery Module


    ✨ Features

    • Real-Time Client Collaboration Share galleries instantly and receive feedback, or comments in one web-enabled space.

    Pros & Cons:

      • Excellent performance with limited data.

    • – Higher memory footprint; may require patch-based training.

    Pros & Cons:

      • Simpler architecture & faster inference.

    • – Can struggle with small object segmentation without additional post-processing.

    Push to container registry
  • Apply rolling updates to staging and production clusters

  • Integrate health-checks and rollback strategies

  • User submits code to complete account activation

  • Log and monitor failed attempts for anomaly detection

  • (Optional) Add to PATH or create desktop shortcuts

  • Provide an uninstaller entry in Control Panel

  • Potential Tools

    • NSIS, Inno Setup, Windows Installer (MSI)

    • Consider cross-platform options if needed in future

  • We follow the Gitflow branching model for managing development. This involves using separate branches for features, bugfixes, hotfixes, and releases.
    1. Main Branches:

      • main: Contains the production-ready code.

      • develop: Used as an integration branch for features, bugfixes, and hotfixes before releases.

    2. Supporting Branches:

      • feat/*: For new features.

      • bugfix/*: For resolving bugs found during development.

      • hotfix/*: For urgent fixes in the production code.

    Branch Naming Convention

    Use the following prefixes for your branch names to maintain consistency:

    • feat/FEATURE_NAME: For new features.

    • bugfix/BUG_NAME: For bug fixes during development.

    • hotfix/HOTFIX_NAME: For critical fixes applied directly to main.

    Commit Messages

    Use the following structure for writing clear, informative commit messages:

    • Format: <type>: <description>

    • Types:

      • feat: For new features (e.g., feat: Add image editing tool).

      • bugfix: For bug fixes (e.g., bugfix: Fix alignment issue).

      • hotfix: For critical bug fixes (e.g., hotfix: Fix crash on startup).

    Add a brief description after the type, and make sure your message is concise and descriptive.

    Pull Requests

    Each feature, bugfix, or hotfix should be accompanied by a pull request (PR). The steps are:

    1. Open a PR targeting the develop branch.

    2. Assign a reviewer for code review.

    3. Ensure the PR passes all automated checks and tests.

    4. Provide a detailed description of what was changed and why.

    Code Reviews

    Every PR must undergo a code review before merging:

    • Reviewers should carefully check the changes for quality, readability, and correctness.

    • Provide constructive feedback.

    • Approve the PR if it meets the necessary standards.

    Merging

    Once your pull request has been reviewed and approved:

    1. Ensure all checks pass before merging.

    2. Merge into develop (or main in the case of hotfixes).

    3. Delete the branch after merging to keep the repository clean.

    Versioning

    We use Semantic Versioning for releases:

    • Major: Incompatible API changes or large-scale changes.

    • Minor: New features or functionality.

    • Patch: Bug fixes or minor updates.

    Follow this versioning structure when preparing release branches.

    Documentation

    Make sure the documentation is updated for each new feature, bugfix, or hotfix:

    • Update docs for in-depth documentation.

    • Update README.md for general project information.

    • Use DEVELOPMENT.md for developer guidelines.

    • Use CONTRIBUTING.md for contribution guidelines.

    • Update CHANGELOG.md with the history of changes.

    • Keep the LICENSE.md up-to-date with any changes in licensing.

    Testing Policy

    All code changes must adhere to the Luxoria Unit Testing Policy to ensure high coverage, quality, and maintainability of the codebase.

    Additional Guidelines

    • Testing: Ensure all code changes are properly tested.

    • Code Style: Follow project-specific coding standards to maintain uniformity.

    By following these guidelines, you help maintain a smooth and efficient development process at Luxoria.

    Seamless Image Sharing Send selections to clients via LuxStudio, no manual exports or separate uploads needed.
  • Integrated Feedback Loop Clients can flag favorites, leave notes, or approve images directly in the app, streamlining the review process.

  • Support for Multiple Formats Share and export in JPEG, PNG, TIFF, RAW, and more, all configured from within the platform.

  • Unified Workflow Ecosystem Works hand-in-hand with LuxImport, LuxEditor, LuxFilter, and LuxExport to provide a full, end-to-end photo workflow, in one app.

  • Client-Centered UI Designed for intuitive use, clients don’t need training; they simply open, comment, and approve.

  • Cross-Platform Desktop App Works on your preferred OS, ensuring both editors and clients get a smooth native experience.


  • 📂 How It Works

    1. Collaborate After editing, initiate a client gallery in LuxStudio and share a link or invite directly.

    2. Review & Comment Clients open the gallery in their web interface, indicate favorites, add comments, or approve.

    3. Sync Feedback Responses sync back into Luxoria, allowing you to incorporate revisions or finalize selections.

    4. Finalize & Export Confirm approved images and send them to Export module for batch export or delivery in desired formats.


    📌 Coming Soon

    • Detailed permission controls (viewer vs. editor)

    • Branding options for client-facing gallery pages


    📄 License

    Luxoria and all standard modules are licensed under the Apache 2.0 License. See the LICENSE for full details.

    Source Code


    Experience a frictionless creative-to-client loop, LuxStudio brings collaboration to the heart of your photo workflow.

    conventional commits
    Asynchronous Processing
    : Designed for high performance with non-blocking operations.
  • Logging & Error Handling: Implements structured logging via ILoggerService for debugging and diagnostics.

  • Read More
    Read More
    Read More
    development guidelines

    Modular filtering pipeline with weighted algorithms

  • Event-driven architecture for processing notifications

  • Parallelized execution for optimized performance

  • Error handling for robust processing


  • Architecture

    Core Components

    LuxFilter Module

    • Implements IModule

    • Handles initialization, execution, and shutdown

    • Provides logging for module actions

    PipelineService

    • Manages the execution of filtering algorithms

    • Tracks progress and scores

    • Uses concurrency for efficiency

    IFilterAlgorithm

    • Defines a standard interface for filtering algorithms

    • Implements a scoring method based on image analysis


    Implemented Filtering Algorithms

    Image Quality Algorithms

    • ResolutionAlgo: Evaluates the resolution of an image.

    • SharpnessAlgo: Measures the sharpness level in an image.

    Perceptual Metrics Algorithms

    • BrisqueAlgo: Uses the BRISQUE metric to assess perceptual quality.


    How to Use

    Prerequisites

    • Ensure that the Luxoria ecosystem is installed and configured properly.

    • Your project should reference the necessary LuxFilter libraries.

    • Implement and register IEventBus for event-driven interactions.

    Installation

    1. Clone or download the LuxFilter module.

    2. Add the project reference in your Luxoria-based application.

    3. Implement IModule interface in your module system.

    Running the Module

    1. Initialize the module using Initialize().

    2. Configure the filtering pipeline using AddAlgorithm().

    3. Pass image data through the Compute() function.

    Example Usage


    Initialization

    • Subscribes to filtering events

    • Initializes logger and context

    Filtering Process

    1. Pipeline Configuration

    • Uses AddAlgorithm(IFilterAlgorithm algorithm, double weight) to add algorithms

    • Ensures the total weight of all algorithms does not exceed 1.0

    2. Image Processing

    • Processes images using Compute(IEnumerable<(Guid, SKBitmap)> bitmaps)

    • Applies each algorithm in the workflow to every image

    3. Score Computation

    • Each image receives a final score based on weighted algorithm outputs

    • Results are returned as (Guid, double) tuples


    Event Handling

    Score Computation Event

    • Notifies when an image has been processed and scored

    Pipeline Completion Event

    • Notifies when the pipeline has finished executing


    Error Handling & Logging

    • Uses ILoggerService for structured logs

    • Exception handling ensures robust error reporting

    • Logs execution times for performance analysis


    Performance Optimizations

    • Uses parallel processing for scoring

    • Implements concurrent data structures for thread safety

    • Optimized event-driven execution to reduce overhead


    Future Enhancements

    • Dynamic algorithm tuning for real-time adjustments

    • Support for additional image formats

    • Graphical visualization of scores


    Conclusion

    LuxFilter provides a scalable and efficient filtering pipeline for processing images in the Luxoria ecosystem. Its modular design, event-driven execution, and parallel processing capabilities make it an ideal choice for large-scale image scoring and analysis.

    Event-driven architecture with IEventBus integration

  • Asynchronous operations for improved performance

  • Modular and scalable design

  • Progress tracking through event notifications

  • Parallel processing for asset loading


  • Architecture

    Core Components

    LuxImport Module

    • Implements IModule

    • Handles initialization, execution, and shutdown

    • Listens to OpenCollectionEvent and triggers import process

    ImportService

    • Manages the actual import process

    • Tracks progress and sends updates via event notifications

    • Loads assets into memory

    ManifestRepository

    • Handles metadata storage and retrieval

    • Ensures collection initialization and integrity

    LuxConfigRepository

    • Stores per-asset configuration

    • Manages LuxCfg models in .lux/assets

    ImageDataHelper

    • Loads image assets efficiently

    • Uses SkiaSharp for image decoding


    How to Use

    Prerequisites

    • Ensure that the Luxoria ecosystem is installed and configured properly.

    • Your project should reference the necessary LuxImport libraries.

    • Implement and register IEventBus for event-driven interactions.

    Installation

    1. Clone or download the LuxImport module.

    2. Add the project reference in your Luxoria-based application.

    3. Implement IModule interface in your module system.

    Running the Module

    1. Initialize the module using Initialize().

    2. Subscribe to the OpenCollectionEvent.

    3. When an import request is triggered, LuxImport processes the collection.

    4. Once completed, CollectionUpdatedEvent is published.

    Example Usage


    Initialization

    • Subscribes to OpenCollectionEvent

    • Initializes logger and context

    Import Process

    1. Collection Validation

    • Checks if the collection path is valid and initialized

    2. Indexing & Asset Processing

    • Reads metadata from manifest.json

    • Hashes and stores asset references

    • Uses parallel processing for efficiency

    3. Asset Loading

    • Loads assets into memory

    • Uses ImageDataHelper for efficient decoding

    4. Completion & Event Publishing

    • Publishes CollectionUpdatedEvent upon successful import


    Event Handling

    OpenCollectionEvent Listener

    • Triggers collection import

    • Sends progress updates

    CollectionUpdatedEvent Publisher

    • Notifies the system of import completion


    Error Handling & Logging

    • Uses ILoggerService for structured logs

    • Exception handling ensures robust error reporting


    Performance Optimizations

    • Uses parallel processing in LoadAssets

    • Minimizes blocking I/O operations

    • Implements batch logging to prevent log spam


    Future Enhancements

    • Cache system for faster re-imports

    • Support for more file formats

    • UI integration for progress monitoring


    Conclusion

    LuxImport is designed for efficient, modular asset importation and indexing within the Luxoria ecosystem. Its event-driven design and asynchronous processing make it highly scalable and reliable.

    git clone REPOSITORY_URL
    git checkout -b BRANCH_NAME
    git add .
    git commit -m "COMMIT_MESSAGE"
    git push origin BRANCH_NAME
    var luxFilter = new LuxFilter();
    luxFilter.Initialize(eventBus, context, logger);
    luxFilter.Execute();
    public void Initialize(IEventBus eventBus, IModuleContext context, ILoggerService logger)
    public event EventHandler<(Guid, double)> OnScoreComputed;
    public event EventHandler<TimeSpan> OnPipelineFinished;
    var luxImport = new LuxImport();
    luxImport.Initialize(eventBus, context, logger);
    luxImport.Execute();
    public void Initialize(IEventBus eventBus, IModuleContext context, ILoggerService logger)
    _eventBus.Subscribe<OpenCollectionEvent>(HandleOnOpenCollectionAsync);
    _eventBus?.Publish(new CollectionUpdatedEvent(collectionName, collectionPath, assets));
    Forward & Sync Save results or push filtered selections to downstream modules.
    LICENSE
    Source Code

    Export Send to Export with your preferred format and quality settings.

    LICENSE
    Source Code
  • Modify the Components and Templates to create derivative components and templates. Those components and templates are subject to this license.

  • Use the Components and Templates to create unlimited End Products for unlimited Clients.

  • Use the Components and Templates to create End Products where the End Product is sold to End Users.

  • Use the Components and Templates to create End Products that are open source and freely available to End Users.

  • You cannot:

    • Use the Components and Templates to create End Products that are designed to allow an End User to build their own End Products using the Components and Templates or derivatives of the Components and Templates.

    • Re-distribute the Components and Templates or derivatives of the Components and Templates separately from an End Product, neither in code or as design assets.

    • Share your access to the Components and Templates with any other individuals.

    • Use the Components and Templates to produce anything that may be deemed by Tailwind Labs Inc, in their sole and absolute discretion, to be competitive or in conflict with the business of Tailwind Labs Inc.

    Example usage

    Examples of usage allowed by the license:

    • Creating a personal website by yourself.

    • Creating a website or web application for a client that will be owned by that client.

    • Creating a commercial SaaS application (like an invoicing app for example) where end users have to pay a fee to use the application.

    • Creating a commercial self-hosted web application that is sold to end users for a one-time fee.

    • Creating a web application where the primary purpose is clearly not to simply re-distribute the components (like a conference organization app that uses the components for its UI for example) that is free and open source, where the source code is publicly available.

    Examples of usage not allowed by the license:

    • Creating a repository of your favorite Tailwind Plus components or templates (or derivatives based on Tailwind Plus components or templates) and publishing it publicly.

    • Creating a React or Vue version of Tailwind Plus and making it available either for sale or for free.

    • Create a Figma or Sketch UI kit based on the Tailwind Plus component designs.

    • Creating a "website builder" project where end users can build their own websites using components or templates included with or derived from Tailwind Plus.

    • Creating a theme, template, or project starter kit using the components or templates and making it available either for sale or for free.

    • Creating an admin panel tool (like or ) that is made available either for sale or for free.

    In simple terms, use Tailwind Plus for anything you like as long as it doesn't compete with Tailwind Plus.

    Personal License Definitions

    Licensee is the individual who has purchased a Personal License.

    Components and Templates are the source code and design assets made available to the Licensee after purchasing a Tailwind Plus license.

    End Product is any artifact produced that incorporates the Components or Templates or derivatives of the Components or Templates.

    End User is a user of an End Product.

    Client is an individual or entity receiving custom professional services directly from the Licensee, produced specifically for that individual or entity. Customers of software-as-a-service products are not considered clients for the purpose of this document.

    Team License

    Tailwind Labs Inc. grants you an on-going, non-exclusive license to use the Components and Templates.

    The license grants permission for up to 25 Employees and Contractors of the Licensee to access and use the Components and Templates.

    You can:

    • Use the Components and Templates to create unlimited End Products.

    • Modify the Components and Templates to create derivative components and templates. Those components and templates are subject to this license.

    • Use the Components and Templates to create unlimited End Products for unlimited Clients.

    • Use the Components and Templates to create End Products where the End Product is sold to End Users.

    • Use the Components and Templates to create End Products that are open source and freely available to End Users.

    You cannot:

    • Use the Components or Templates to create End Products that are designed to allow an End User to build their own End Products using the Components or Templates or derivatives of the Components or Templates.

    • Re-distribute the Components or Templates or derivatives of the Components or Templates separately from an End Product.

    • Use the Components or Templates to create End Products that are the property of any individual or entity other than the Licensee or Clients of the Licensee.

    • Use the Components or Templates to produce anything that may be deemed by Tailwind Labs Inc, in their sole and absolute discretion, to be competitive or in conflict with the business of Tailwind Labs Inc.

    Example usage

    Examples of usage allowed by the license:

    • Creating a website for your company.

    • Creating a website or web application for a client that will be owned by that client.

    • Creating a commercial SaaS application (like an invoicing app for example) where end users have to pay a fee to use the application.

    • Creating a commercial self-hosted web application that is sold to end users for a one-time fee.

    • Creating a web application where the primary purpose is clearly not to simply re-distribute the components or templates (like a conference organization app that uses the components or a template for its UI for example) that is free and open source, where the source code is publicly available.

    Examples of use not allowed by the license:

    • Creating a repository of your favorite Tailwind Plus components or template (or derivatives based on Tailwind Plus components or templates) and publishing it publicly.

    • Creating a React or Vue version of Tailwind Plus and making it available either for sale or for free.

    • Creating a "website builder" project where end users can build their own websites using components or templates included with or derived from Tailwind Plus.

    • Creating a theme or template using the components or templates and making it available either for sale or for free.

    • Creating an admin panel tool (like or ) that is made available either for sale or for free.

    • Creating any End Product that is not the sole property of either your company or a client of your company. For example your employees/contractors can't use your company Tailwind Plus license to build their own websites or side projects.

    Team License Definitions

    Licensee is the business entity who has purchased a Team License.

    Components and Templates are the source code and design assets made available to the Licensee after purchasing a Tailwind Plus license.

    End Product is any artifact produced that incorporates the Components or Templates or derivatives of the Components or Templates.

    End User is a user of an End Product.

    Employee is a full-time or part-time employee of the Licensee.

    Contractor is an individual or business entity contracted to perform services for the Licensee.

    Client is an individual or entity receiving custom professional services directly from the Licensee, produced specifically for that individual or entity. Customers of software-as-a-service products are not considered clients for the purpose of this document.

    Enforcement

    If you are found to be in violation of the license, access to your Tailwind Plus account will be terminated, and a refund may be issued at our discretion. When license violation is blatant and malicious (such as intentionally redistributing the Components or Templates through private warez channels), no refund will be issued.

    The copyright of the Components and Templates is owned by Tailwind Labs Inc. You are granted only the permissions described in this license; all other rights are reserved. Tailwind Labs Inc. reserves the right to pursue legal remedies for any unauthorized use of the Components or Templates outside the scope of this license.

    Liability

    Tailwind Labs Inc.’s liability to you for costs, damages, or other losses arising from your use of the Components or Templates — including third-party claims against you — is limited to a refund of your license fee. Tailwind Labs Inc. may not be held liable for any consequential damages related to your use of the Components or Templates.

    This Agreement is governed by the laws of the Province of Ontario and the applicable laws of Canada. Legal proceedings related to this Agreement may only be brought in the courts of Ontario. You agree to service of process at the e-mail address on your original order.

    Questions?

    Unsure which license you need, or unsure if your use case is covered by our licenses?

    Email us at [email protected] with your questions.

    Luxoria - License Justification

    Last Modification : 22/06/2025


    1. Introduction

    Luxoria is committed to open-source development, fostering innovation, and enabling collaboration within the developer community. After careful consideration, we have chosen the Apache License 2.0 for our repositories due to its balance of permissiveness, protection, and clarity.

    2. Key Reasons for Choosing Apache 2.0

    2.1. Permissive and Business-Friendly

    Apache 2.0 is a permissive open-source license that allows anyone to freely use, modify, and distribute our code. This means individuals and businesses can adopt Luxoria's technologies without worrying about restrictive obligations, making it easier for our software to be widely used and integrated.

    2.2. Patent Protection

    A major advantage of Apache 2.0 over some other permissive licenses (such as MIT or BSD) is its explicit grant of patent rights. Contributors automatically grant a license to any patents they hold related to their contributions, which reduces the risk of patent litigation and provides more legal certainty for users of our software.

    2.3. Contributor and User Protection

    By using Apache 2.0, we ensure that both contributors and users are protected from unexpected legal complications. The license includes:

    • A patent grant ensuring that contributors cannot later sue users for patent infringement based on their contributions.

    • A liability disclaimer, protecting both Luxoria and contributors from legal claims arising from the use of the software.

    2.4. Encourages Open-Source Contributions

    Since Apache 2.0 does not impose copyleft requirements (unlike the GPL), developers and businesses can confidently contribute to Luxoria's repositories without concerns about needing to open-source their proprietary software that incorporates our code.

    2.5. Well-Recognized and Widely Used

    Apache 2.0 is a widely adopted and trusted license in the open-source community. Many large-scale projects, such as Kubernetes, TensorFlow, and Apache Software Foundation projects, use this license, which ensures familiarity and trust among developers and businesses.

    3. Comparison with Other Open-Source Licenses

    Choosing the right open-source license is crucial for defining how a project can be used and shared. Here’s a quick comparison of Apache 2.0 with other common open-source licenses:

    License
    Type
    Patent Protection
    Copyleft Requirement
    Suitability for Businesses

    4. Conclusion

    The Apache License 2.0 aligns with Luxoria’s goals of fostering innovation, collaboration, and broad adoption of our open-source software. Its permissiveness, strong patent protections, and business-friendly terms make it the ideal choice for our repositories.

    By choosing Apache 2.0, we empower developers while ensuring that both contributors and users benefit from a legally sound and transparent licensing framework.


    5. Alignment with Luxoria’s Long-Term Strategy

    Luxoria aims to become a modular and extensible platform, enabling a community of users, contributors, and partners to evolve alongside the project. The use of a permissive license like Apache 2.0 facilitates:

    • Integration into proprietary or commercial products.

    • Collaboration with companies that may not wish to open-source their enhancements.

    • Development of an ecosystem around the project, including plugins, modules, and third-party services.

    6. Legal Clarity and International Applicability

    Apache 2.0 is internationally recognized and offers substantial legal clarity, notably through:

    • Explicit and detailed wording that is understandable to legal teams.

    • Compatibility with diverse legal frameworks (Europe, North America, etc.).

    • Clear management of contributions and associated rights, essential for a multi-contributor project.

    7. Governance and Contribution Model

    The choice of license influences project governance. By opting for Apache 2.0, Luxoria:

    • Avoids debates or friction related to copyleft (often perceived as restrictive).

    • Encourages diverse contributions (code, documentation, plugins) without legal barriers.

    • Retains the option to adopt a Contributor License Agreement (CLA) if needed in the future.

    8. Community Feedback and Precedent

    We have reviewed the practices of similar projects (e.g., Next.js, Vite, Strapi):

    • Many use permissive licenses like MIT or Apache 2.0.

    • Developer feedback indicates that freedom of use without constraints is a key factor for adoption.

    The choice of Apache 2.0 aligns with this community-driven logic.

    9. Risks Considered and Rejected Licenses

    Before finalizing our decision, we evaluated several alternatives:

    • GPLv3: Rejected for its "viral" effect, which is incompatible with our goal of broad distribution, including in closed environments.

    • MIT: Too brief and lacks an explicit patent grant—posing a significant risk for technological innovation.

    • MPL 2.0: Offers a middle ground but is more complex to understand for some contributors.

    For more details on the Apache License 2.0, see: https://www.apache.org/licenses/LICENSE-2.0

    LuxAPI

    Requirements

    • .NET 8

    • PostgreSQL

    • Docker (min. 27.4.0) (optionnel pour déploiement)

    • Docker Compose (optionnel pour déploiement)


    Installation

    1. Cloner le dépôt

    2. Configurer les variables d'environnement

    Crée un fichier .env à la racine du projet et ajoute :

    3. Restaurer les dépendances

    4. Appliquer les migrations

    5. Lancer l'API


    API Endpoints

    Authentication

    Méthode
    Endpoint
    Description

    Collections

    Méthode
    Endpoint
    Description

    Chat (SignalR)

    Hub Address: /hubs/chat

    Méthodes disponibles :

    • SendMessage(collectionId, senderEmail, message) → Envoie un message à tous les clients du groupe

    • JoinCollection(collectionId) → Rejoint un groupe SignalR pour une collection

    • LeaveCollection(collectionId) → Quitte un groupe SignalR


    Running with Docker

    1. Build and run the Docker containers

    2. Accéder à l'API

    📌

    3. Accéder à MinIO

    📌


    Swagger Documentation

    Swagger UI est disponible à l'adresse : 📌


    Luxoria Modules - Event Documentation

    This document describes the various events used in the Luxoria.Modules.Models.Events namespace, their purpose, and technical details.


    List of Events

    1. FilterCatalogEvent - Requests and retrieves a list of available filters.

    2. CollectionUpdatedEvent - Notifies when a collection has been updated.

    3. LogEvent - Sends a log message to the logging system.

    4. RequestWindowHandleEvent - Requests the native window handle.

    5. TextInputEvent - Sends a text input event.


    1. FilterCatalogEvent

    Purpose

    The FilterCatalogEvent is used to request and retrieve a list of available filters asynchronously.

    Technical Details

    • Namespace: Luxoria.Modules.Models.Events

    • Implements: IEvent

    • Response Handling: Uses TaskCompletionSource<List<(string Name, string Description, string Version)>> to handle asynchronous responses.

    Event Flow

    1. A component publishes the event.

    2. A subscriber (e.g., a filter manager) listens and provides the filter list.

    3. The event’s TaskCompletionSource is completed with the filter list.

    4. The publisher receives the list.

    Code Example


    2. CollectionUpdatedEvent

    Purpose

    The CollectionUpdatedEvent notifies subscribers when a collection has been updated.

    Technical Details

    • Namespace: Luxoria.Modules.Models.Events

    • Implements: IEvent

    • Properties:

    Event Flow

    1. A module publishes this event after updating a collection.

    2. Subscribers (e.g., UI components) react to the update.

    Code Example


    3. LogEvent

    Purpose

    The LogEvent is used to send log messages for debugging or monitoring purposes.

    Technical Details

    • Namespace: Luxoria.Modules.Models.Events

    • Implements: IEvent

    • Properties:

    Event Flow

    1. Any component can publish this event to log information.

    2. A logger service listens for this event and processes the message.

    Code Example


    4. RequestWindowHandleEvent

    Purpose

    The RequestWindowHandleEvent allows a component to request the native window handle.

    Technical Details

    • Namespace: Luxoria.Modules.Models.Events

    • Implements: IEvent

    • Properties:

    Event Flow

    1. A component publishes this event with a callback.

    2. A subscriber (e.g., the main window) calls the callback with the window handle.

    Code Example


    5. TextInputEvent

    Purpose

    The TextInputEvent is used to transmit a text input from one component to another.

    Technical Details

    • Namespace: Luxoria.Modules.Models.Events

    • Implements: IEvent

    • Properties:

    Event Flow

    1. A component publishes this event with a text message.

    2. A subscriber processes the text input.

    Code Example


    Conclusion

    This document outlines the core events used in Luxoria's event-driven architecture. Each event plays a crucial role in communication between components, improving modularity and scalability.

    LICENSE

    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

    1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.

      "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.

    2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.

    3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.

    4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:

      (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.

    5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.

    6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.

    7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.

    8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.

    9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.

    END OF TERMS AND CONDITIONS

    APPENDIX: How to apply the Apache License to your work.

    Copyright 2024 Luxoria

    Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

    Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

    LuxImport

    LuxImport is a image collection management system designed for efficient indexing, asset organization, and metadata handling. It provides capabilities for importing, processing, and managing image datasets, making it an ideal solution for large-scale photography and media applications.

    Architecture

    LuxImport follows a modular architecture to ensure scalability, maintainability, and high performance. The key components are:

    1. Core Components

    • ImportService: Handles the import process, including asset hashing, metadata extraction, and database initialization.

    • Manifest Repository: Manages the manifest file that keeps track of indexed assets.

    • LuxConfig Repository: Stores configuration settings related to collections and assets.

    • FileHasherService: Computes unique hashes for images to prevent duplication.

    2. Data Flow

    1. Initialization: The system checks whether the target collection exists and initializes it if necessary.

    2. Indexing: Images are scanned, hashed, and added to the database with relevant metadata.

    3. Storage & Retrieval: Indexed assets are stored with reference to their respective manifest files.

    4. Loading Assets: Assets are loaded from storage and processed based on application requirements.

    3. Technologies Used

    • .NET 9: Primary Framework.

    • BenchmarkDotNet: Used for performance benchmarking.

    • System.Threading.Tasks: Ensures efficient async processing.

    • Concurrent Collections: Optimizes parallel data processing.


    Testing

    LuxImport includes a robust testing strategy to ensure stability and correctness.

    1. Unit Tests

    • Covers core functionalities such as:

      • Initialization of import service.

      • Manifest file creation and retrieval.

      • File hashing and metadata extraction.

    2. Integration Tests

    • Verifies the interaction between different modules.

    • Tests how the ImportService handles large datasets.

    3. Performance Tests

    • Uses BenchmarkDotNet to measure execution time, memory allocation, and threading behavior.

    • Ensures that asset indexing, loading, and retrieval are optimized for large datasets.

    4. Edge Case Handling

    • Ensures stability with:

      • Empty folders

      • Corrupt image files

      • Large-scale imports


    Benchmarking

    Performance is a key focus of LuxImport. The system is benchmarked to analyze indexing and retrieval efficiency.

    1. Benchmark Strategy

    • Uses BenchmarkDotNet to measure:

      • Execution time per operation.

      • Memory allocations and garbage collection pressure.

      • Threading efficiency and lock contention.

    2. Benchmark Scenarios

    • Initialization: Measures the time required to set up a new collection.

    • Indexing: Evaluates performance when scanning and hashing assets.

    • Database Operations: Tests manifest file read/write performance.

    • Asset Loading: Benchmarks retrieval times for indexed images.

    3. Sample Benchmark Results

    Result is in microseconds (μs). You can find detailed benchmark results in the LuxImport.Benchmark/BenchmarkDotNet.Artifacts folder. The provided benchmark results are for reference only and may vary based on the system configuration. It has been tested on an Apple Silicon M2 chip on Parallels Desktop.

    With 3 different collections, 50, 100, and 200 images, the benchmark results are as follows:

    Go to the for more details.

    LuxExport

    The Standard Export Module

    PIC1

    ✨ Features

    • Multi-Format Output Export photos in JPEG, PNG, BMP, GIF, WebP, AVIF, TIFF, and more.

    • Flexible Export Destinations Choose between Hard Drive and Web export modes, each with tailored options.

    • Custom File Naming Define filename patterns with dynamic tags like {name}, {date}, {counter}, and metadata fields. Preview filenames instantly before export.

    • Conflict Handling Decide how existing files are managed: Overwrite, Rename, or Skip.

    • Subfolder Support Automatically organize exports into subfolders for cleaner project structure.

    • Advanced File Settings Adjust format, quality, color space (sRGB, etc.), and optional file size limits for precision control.

    • Watermarking (Web Export) Add text watermarks with adjustable opacity for branding and content protection.

    • Presets for Reuse Save and load export presets to streamline repetitive workflows.

    • Real-Time Progress Feedback Track export progress, with the ability to pause or cancel tasks safely.


    📂 How It Works

    1. Select Destination Choose Hard Drive or Web export mode.

    2. Configure Settings Set format, quality, naming pattern, subfolders, and watermark (if applicable).

    3. Preview & Confirm View sample filenames and confirm settings before export.

    4. Export Run the export with live progress tracking and conflict resolution.


    📌 Coming Soon

    • Batch Export Reports Generate logs and summaries of exported files for documentation.

    • Enhanced Metadata Tokens More dynamic options for filename generation.

    • Branding Templates Predefined watermark and naming schemes for professional delivery.


    📄 License

    Luxoria and all standard modules are licensed under the Apache 2.0 License. See the for details.

    Source Code:

    LuxExport Technical Documentation

    Overview

    LuxExport is a modular export system integrated into the Luxoria ecosystem. It allows users to export collections of images in various formats with customizable file naming, export locations, and conflict handling strategies.

    Features

    Luxoria Desktop

    Table of Contents

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

    BSD (3-Clause)

    Permissive

    No

    No

    Similar to MIT, with an added clause preventing use of the project’s name

    GPLv3

    Copyleft

    Yes

    Yes

    Requires derivative works to be open-source, limiting proprietary use

    LGPLv3

    Weak Copyleft

    Yes

    Partial

    Less restrictive than GPL, but still requires some source disclosure

    Apache 2.0

    Permissive

    Yes

    No

    Strong legal protection, business-friendly

    MIT

    Permissive

    No

    No

    Simple and permissive, but lacks patent protection

    Laravel Nova
    ActiveAdmin
    Laravel Nova
    ActiveAdmin
  • SkiaSharp Integration: Used for image processing, including metadata extraction and transformations.

  • SkiaSharp: Handles image processing operations such as metadata extraction and transformations.

    Uses xUnit for testing.

    Benchmark Report

    Development

  • Testing

  • Deployment

  • CI/CD

  • Contributing

  • Luxoria Standard Modules


  • Technical Stack

    • Language: C#

    • Framework: WinUI 3 with .NET 9

    • IDE: Visual Studio 2022 / Rider

    • Version Control: Git

    • CI/CD: GitHub Actions

    • Deployment: .MSIX

    • Testing: xUnit


    Project Structure

    Luxoria Desktop is structured as follows:

    • Luxoria.App: Main project containing the primary application logic.

    • Luxoria.Desktop.Tests: Unit tests for ensuring application stability and correctness.

    • Luxoria.Core: Provides fundamental services, repositories, and models essential for the application.

    • Luxoria.Modules: Manages modular components of the application, including models, interfaces, and services.

    • Luxoria.SDK: Houses shared utilities, services, and interfaces to ensure consistency across modules.

    Luxoria.App

    • Technologies: WinUI 3 with .NET 9

    • Target SDK Version: net9.0-windows10.0.26100.0

    • Minimum Platform Version: 10.0.17763.0

    • Windows SDK Package Version: 10.0.26100.57

    • Main Entry Point: App.xaml / App.xaml.cs

    The application follows a modular architecture where each module is a separate project within the solution, responsible for specific features or functionality.

    Luxoria.Core

    • Technologies: .NET 9.0

    • Target Framework: net9.0

    • Functionality: Contains core services, repositories, and models used across the application.

    Luxoria.Modules

    • Technologies: .NET 9.0

    • Target Framework: net9.0

    • Functionality: Manages modules within the application, ensuring modularization and scalability.

    Each module is developed as a separate project to provide distinct functionalities while maintaining interoperability.

    Luxoria.SDK

    Overview

    Luxoria.SDK provides essential utilities, interfaces, and services to ensure consistency across Luxoria modules. It standardizes logging, file hashing, and module communication, promoting reusability and efficiency.

    Core Components

    Interfaces

    • IFileHasherService: Defines contract for file hashing operations.

    • ILoggerService: Provides structured logging capabilities.

    • ILogTarget: Specifies logging targets for various outputs.

    Models

    • LogLevel: Defines log severity levels for structured logging.

    Services

    • FileHashService: Implements file hashing with multiple algorithms.

    • LoggerService: Provides system-wide and module-specific logging.

    Benefits

    • Code Reusability: Centralizes common functionalities across modules.

    • Scalability: Easily extensible for new services and features.

    • Consistency: Ensures uniformity in logging, file management, and cross-module communication.


    Luxoria Standard Modules (LuxStd Modules)

    Overview

    Luxoria Standard Modules (LuxStd Modules) provide core functionalities within the Luxoria ecosystem. They follow a standardized architecture, ensuring seamless integration, extensibility, and interoperability.

    Key Features

    • Modular Design: Follows a plug-and-play structure.

    • Event-Driven: Utilizes IEventBus for module communication.

    • Extensible: Allows enhancement without breaking compatibility.

    • Asynchronous Processing: Optimized for high-performance and non-blocking operations.

    • Structured Logging & Error Handling: Implements ILoggerService for debugging and diagnostics.

    List of LuxStd Modules

    1. LuxImport

    • Manages importation, indexing, and organization of digital asset collections.

    • Processes large datasets with asynchronous operations and real-time progress tracking.

    2. LuxFilter

    • Provides an advanced filtering pipeline for processing and scoring digital assets.

    • Implements a modular filtering framework with weighted execution for improved accuracy.

    Read More

    • LuxStd Modules Overview

    • LuxImport Technical Documentation

    • LuxFilter Technical Documentation


    Conclusion

    Luxoria Desktop follows a modular architecture, ensuring scalability, maintainability, and high performance. LuxStd Modules serve as the foundation of the ecosystem, providing essential functionalities in an event-driven and extensible manner. The inclusion of Luxoria.SDK ensures consistency across different modules, making development more efficient and streamlined.

    Technical Stack
    Project Structure

    PATCH

    /api/collection/{collectionId}/allowedEmails

    Met à jour les emails autorisés dans la collection

    DELETE

    /api/collection/{id}

    Supprime une collection par ID

    POST

    /api/collection/{collectionId}/upload

    Télécharge des fichiers pour une collection

    POST

    /api/collection/{collectionId}/chat

    Ajoute un message au chat d'une collection

    POST

    /api/auth/login

    Authentifie un utilisateur et retourne un JWT

    POST

    /api/auth/register

    Crée un nouvel utilisateur

    GET

    /api/collection

    Récupère toutes les collections

    GET

    /api/collection/{id}

    Récupère une collection par ID

    POST

    /api/collection

    Crée une nouvelle collection

    PUT

    /api/collection/{id}

    Met à jour une collection par ID

    http://localhost:5269
    http://localhost:9000
    http://localhost:5269/swagger
    CollectionName (string) - The name of the updated collection.
  • CollectionPath (string) - The file path of the collection.

  • Assets (ICollection) - The updated assets in the collection.

  • Message (string) - The log message.
    OnHandleReceived (Action) - Callback to return the window handle.
    Text (string) - The text input.
  • Validation: Ensures the text is not null or empty.

  • You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.

    Multi-format export support using SkiaSharp

  • Customizable file naming with pattern-based presets

  • Conflict resolution options: overwrite, rename, skip

  • Support for subfolder creation and base path selection

  • Live progress display during export operations

  • Modular design and integration with IEventBus


  • Architecture

    Core Components

    LuxExport Module

    • Implements IModule and IModuleUI

    • Handles initialization and shutdown

    • Subscribes to CollectionUpdatedEvent

    • Instantiates and controls the main Export dialog

    ExportViewModel

    • ViewModel for binding export settings to the UI

    • Manages file naming, export paths, format settings, and presets

    ExporterFactory

    • Static factory that returns an IExporter implementation based on ExportFormat

    • Supports JPEG, PNG, BMP, GIF, WEBP, AVIF, and many others

    ExportProgressWindow

    • UI window that displays export progress

    • Handles exporting on a background thread

    • Provides preview and pause/cancel support

    TagResolverManager

    • Resolves tags in naming patterns like {name}, {date}, {counter}, and meta: keys

    • Allows dynamic generation of file names


    How to Use

    Prerequisites

    • Ensure that the Luxoria ecosystem is installed and configured

    • Register the module via your main application’s module loader

    • Implement and provide IEventBus, IModuleContext, and ILoggerService

    Installation

    1. Add the LuxExport module to your Luxoria project.

    2. Connect the module to the UI via smart button configuration.

    3. Load file naming presets from a JSON file.

    Running the Module

    1. Call Initialize() with required dependencies.

    2. Trigger Export via UI interaction.

    3. Choose export location, format, and file naming options.

    4. Launch export via the main button.

    5. View progress in the export window.

    Example Usage


    Initialization

    • Subscribes to CollectionUpdatedEvent

    • Registers UI components

    • Sets up Export dialog

    Export Process

    1. Image Collection Setup

    • Receives image data and metadata from CollectionUpdatedEvent

    • Calls SetBitmaps(...) on the export dialog

    2. Export Configuration

    • Users select format, color space, quality

    • Optionally define size limit and subfolder behavior

    3. File Naming

    • Supports dynamic patterns like {name}_{date}

    • Applies extension casing and resolves conflicts

    4. Export Execution

    • Uses ExporterFactory to get exporter instance

    • Applies settings and writes to disk (or simulated web)

    • Displays progress bar and image preview


    Event Handling

    CollectionUpdatedEvent Listener

    • Receives the updated list of assets

    • Extracts SKBitmap and metadata

    • Passes them to Export dialog


    Error Handling & Logging

    • Uses ILoggerService for structured logging

    • Exceptions during export are caught and logged

    • Displays error messages in the progress window if needed


    Performance Optimizations

    • Export runs on a background thread using Task.Run

    • UI updates dispatched via DispatcherQueue

    • SkiaSharp is used for efficient image encoding


    Future Enhancements

    • Export presets based on project type

    • Metadata filtering before export

    • Batch export reports generation


    Conclusion

    LuxExport provides a flexible and user-friendly way to export images in the Luxoria ecosystem. Its modular structure and advanced export options make it a powerful tool for end-users and developers alike.


    Last updated: April 2025

    git clone https://github.com/ton-repo/LuxAPI.git
    cd LuxAPI
    ConnectionStrings__DefaultConnection=Host=localhost;Port=5432;Database=LuxDB;Username=postgres;Password=yourpassword
    Jwt__Key=your-secret-key
    Jwt__Issuer=https://your-api.com
    Jwt__Audience=https://your-api.com
    Minio__Endpoint=http://localhost:9000
    Minio__AccessKey=your-access-key
    Minio__SecretKey=your-secret-key
    dotnet restore
    dotnet ef database update
    dotnet run
    docker-compose up --build
    var filterEvent = new FilterCatalogEvent();
    await _eventBus.Publish(filterEvent);
    var receivedFilters = await filterEvent.Response.Task;
    var updateEvent = new CollectionUpdatedEvent("MyCollection", "/path/to/collection", assets);
    _eventBus.Publish(updateEvent);
    _eventBus.Publish(new LogEvent("This is a log message."));
    var requestEvent = new RequestWindowHandleEvent(handle => Debug.WriteLine($"Handle: {handle}"));
    _eventBus.Publish(requestEvent);
    _eventBus.Publish(new TextInputEvent("User input text"));
      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.
       http://www.apache.org/licenses/LICENSE-2.0
    var luxExport = new LuxExport();
    luxExport.Initialize(eventBus, context, logger);
    luxExport.Execute();
    public void Initialize(IEventBus eventBus, IModuleContext context, ILoggerService logger)
    _eventBus.Subscribe<CollectionUpdatedEvent>(OnCollectionUpdated);
    LICENSE
    LuxExport on GitHub

    DEPENDENCIES

    Luxoria - Dependencies Justification

    Last Updated: 01/06/2025

    Justification for Dependencies

    In modern application development, selecting the right dependencies is crucial to ensuring performance, reliability, and maintainability. This document outlines the rationale behind the inclusion of SkiaSharp 3.116.1, Luxoria.Algorithm.BrisqueScore (OpenCV 4.10.0 / C++23), and Sentry SDK in our WinUI 3-based application, providing justifications supported by industry standards and research.

    SkiaSharp 3.116.1

    SkiaSharp is a cross-platform 2D graphics library built on Google’s Skia graphics engine, widely adopted in Chrome, Android, and Flutter. It enables high-quality rendering, text shaping, and image processing, making it an essential component for modern UI development.

    Why SkiaSharp for WinUI 3?

    • High-Performance Rendering SkiaSharp supports GPU acceleration and hardware-based optimizations, significantly enhancing real-time rendering performance. Google's documentation states that Skia outperforms software rasterization, making it a preferred choice for applications requiring smooth rendering ().

    • Advanced Drawing Capabilities SkiaSharp provides anti-aliasing, vector graphics, complex path rendering, and blending modes, surpassing WinUI 3’s default rendering capabilities. These features enable the creation of visually compelling and interactive applications ().

    • Cross-Platform Consistency Ensures that graphics rendering remains uniform across Windows, macOS, Linux, iOS, and Android, making it future-proof for cross-platform expansion ().

    Luxoria.Algorithm.BrisqueScore (OpenCV 4.10.0 / C++23)

    The Blind/Referenceless Image Spatial Quality Evaluator (BRISQUE) is a state-of-the-art image quality assessment algorithm that quantifies the perceptual quality of images without requiring a reference image (). OpenCV 4.10.0, optimized with C++23, provides a high-performance computing framework for implementing BRISQUE in real-time applications.

    Why OpenCV 4.10.0 and C++23 for BRISQUE?

    • Easy-to-Use .NET API The Luxoria.Algorithm.BrisqueScore package provides a .NET wrapper around the BRISQUE algorithm, making it accessible for .NET applications. It enables developers to compute image quality scores without a reference image.

    • Cross-Platform Support The package includes precompiled native libraries for x86, x64, and arm64, ensuring compatibility across a wide range of Windows devices.

    • Efficient Image Quality Analysis BRISQUE extracts spatial features and computes perceptual quality scores, making it ideal for automated and real-time quality assessment in photography, medical imaging, and security applications ().

    Sentry SDK

    Sentry is an industry-leading real-time error tracking and performance monitoring tool that helps developers detect, diagnose, and fix issues in production environments. It provides deep .NET and C++ integration, making it an essential component for improving the stability and maintainability of WinUI 3 applications.

    Why Sentry SDK for WinUI 3?

    • Automatic Error Tracking Sentry captures unhandled exceptions, crashes, and memory leaks in real-time, allowing developers to proactively address issues ().

    • Real-Time Alerts & Monitoring Supports configurable alerting for slow response times, crashes, and memory leaks, ensuring high application availability.

    • Contextual Debugging Sentry logs stack traces, breadcrumbs, and system states, providing developers with the full execution context at the time of failure ().

    Conclusion

    By integrating SkiaSharp, Luxoria.Algorithm.BrisqueScore (OpenCV 4.10.0 / C++23), and Sentry SDK, we ensure that our WinUI 3 application is highly performant, visually compelling, and robust in production environments.

    • SkiaSharp enables smooth, high-quality UI rendering, enhancing user experience.

    • Luxoria.Algorithm.BrisqueScore provides advanced image analysis and processing capabilities for vision-based applications.

    • Sentry SDK ensures application stability, reliability, and proactive debugging.

    This technology stack enables us to build scalable, performant, and visually appealing applications that stand out in both functionality and user experience.

    Seamless Integration with WinUI 3 Supports .NET 9 and WinUI 3, making it a natural choice for modern Windows applications. It enables developers to implement rich graphical interfaces while maintaining high performance.

  • Optimized Memory Management Unlike GDI+ or Direct2D, SkiaSharp employs hardware-accelerated rendering techniques that reduce CPU and memory consumption, improving application efficiency and reducing power consumption (Google Skia).

  • Custom Font & Text Shaping SkiaSharp includes Harfbuzz for text shaping, allowing precise typography rendering, including international scripts (Harfbuzz Project).

  • Resizing Performance Comparaison & Benchamarks available at : https://anthonysimmon.com/benchmarking-dotnet-libraries-for-image-resizing/

  • Optimized for Modern Hardware OpenCV 4.10.0 leverages SIMD optimizations, AI-assisted vision processing, and GPU acceleration, offering substantial performance gains over previous versions. C++23 further improves efficiency with enhanced multi-threading and memory management features (ISO C++23).

  • Seamless Interoperability with .NET and WinUI 3 Through P/Invoke, C++/CLI, and WinRT, OpenCV integrates seamlessly with .NET-based applications, allowing for high-performance real-time image processing within WinUI 3 (Microsoft Interop Guide).

  • Extensive Image Processing Features OpenCV provides a comprehensive set of tools for edge detection, noise reduction, object recognition, and image enhancement, essential for automated photography and visual quality control applications (MIT Computer Vision Lab).

  • .NET & C++ Integration Supports both managed (.NET) and unmanaged (C++) code, making it ideal for hybrid applications that require high-performance computing.
  • Cloud-Based or Self-Hosted Flexibility Developers can choose between SaaS-based hosting for scalability or self-hosted solutions for enterprise security.

  • Performance Monitoring & Distributed Tracing Tracks slow function executions, API latency, and database queries, ensuring a smooth user experience (Google Web Performance Guide).

  • Google Skia Docs
    Microsoft Docs
    Mono Project
    Mittal et al., IEEE Transactions on Image Processing
    OpenCV Docs
    Sentry Docs
    Sentry Debugging Guide
    Maintainability Rating
    Vulnerabilities
    Coverage
    Lines of Code
    Security Rating
    Quality Gate Status
    Reliability Rating
    Code Smells

    Testing Policy for Luxoria

    Objective

    The purpose of this testing policy is to establish a clear and robust framework for writing, organizing, and maintaining unit tests for the Luxoria project. This ensures consistent quality, high coverage, and minimal regressions throughout development.

    Please refer to Luxoria UI Manual Test Protocol, to test / assert our Luxoria Desktop Application


    Core Principles

    1. High Coverage:

      • Ensure all critical components and workflows are covered, including normal, edge, and error scenarios.

    2. Test Isolation:

      • Each unit test must run independently of others. External dependencies must be mocked or stubbed.


    Test Structure

    1. Organization

    • Tests should mirror the structure of the source code:

      • Luxoria.Modules → Luxoria.Modules.Tests

    • Each class or module should have a dedicated test file named ClassNameTests.cs.

    2. Naming Conventions

    • Tests should clearly describe their intent using the format:

      • MethodName_StateUnderTest_ExpectedBehavior

      • Example: Subscribe_WithValidHandler_ShouldAddSubscriber

    3. Test Scenarios

    Tests must cover:

    • Standard Cases: Typical input and expected behavior.

    • Edge Cases: Extreme conditions such as null values, empty lists, or large inputs.

    • Error Cases: Behavior when exceptions are expected or invalid data is provided.


    Testing Best Practices

    1. Use of Mocking

    • Use mocking libraries (e.g., Moq) to isolate dependencies.

    • Verify mock interactions to ensure proper communication between components.

    2. Centralized Setup

    • Common dependencies should be initialized in a shared setup method (e.g., constructors or [SetUp] in test frameworks).

    3. Assertions

    • Assertions must be explicit and descriptive to validate expected outcomes:

      • Use Assert.Equal, Assert.NotNull, and Mock.Verify for clarity.

    4. Test-Driven Development (TDD)

    • Write tests before implementing the functionality to capture business requirements effectively.

    5. Handle Exceptional Scenarios

    • Ensure error handling paths are tested. For example:

      • Validate proper exceptions are thrown for invalid inputs.

      • Test fallback mechanisms where applicable.


    Guidelines for Writing Unit Tests

    1. Test File Template

    A unit test file should follow this basic structure:

    2. Examples of Improved Test Cases

    Case 1: Validating Null Handling

    Case 2: Testing State Changes


    Continuous Integration and Testing Automation

    • Use CI tools (e.g., GitHub Actions, Jenkins) to run unit tests automatically on every commit.

    • Track test coverage metrics using tools like coverlet or dotCover.

    • Set thresholds for coverage to prevent regressions (e.g., 80% minimum).


    Review Process

    1. Code Reviews:

      • All new test code must be reviewed by peers to ensure adherence to this policy.

    2. Test Audits:

      • Conduct periodic reviews to identify outdated or redundant tests and improve overall coverage.


    Monitoring and Metrics

    Track the following metrics to ensure test quality:

    • Test Coverage: Percentage of code covered by tests.

    • Test Reliability: Percentage of flaky or unreliable tests.

    • Execution Time: Average time taken for tests to run.


    This policy ensures consistency and scalability for the testing practices in Luxoria. With proper adherence, it will facilitate long-term project stability and maintainability.

    ImportServiceBenchmark-report-github

    Method
    TestCollectionPath
    Mean
    Error
    StdDev
    Median
    Completed Work Items
    Lock Contentions
    Gen0
    Gen1
    Gen2
    Allocated
  • Performance:

    • Tests should execute quickly to support continuous testing during development.

  • Readability:

    • Test code should be self-explanatory, with clear naming conventions and comments where needed.

  • Ease of Maintenance:

    • Tests must be straightforward to update as the code evolves. Avoid excessive coupling between tests and implementation details.

  • Refactoring:

    • Update tests whenever code is refactored to align with new implementations.

  • 212.5 μs

    2.50 μs

    2.34 μs

    212.7 μs

    -

    -

    -

    -

    -

    544 B

    BenchmarkInitializeDatabase

    \Mac\(...)t_200 [31]

    222.3 μs

    1.69 μs

    1.41 μs

    221.9 μs

    -

    -

    -

    -

    -

    544 B

    BenchmarkInitializeDatabase

    \Mac\(...)et_50 [30]

    221.9 μs

    1.64 μs

    1.45 μs

    221.7 μs

    -

    -

    -

    -

    -

    528 B

    BenchmarkIndexCollectionAsync

    \Mac\(...)t_100 [31]

    363,789.4 μs

    7,220.64 μs

    10,355.63 μs

    362,619.7 μs

    1.0000

    -

    -

    -

    -

    835440 B

    BenchmarkIndexCollectionAsync

    \Mac\(...)t_200 [31]

    401,680.5 μs

    8,007.05 μs

    19,940.34 μs

    404,522.2 μs

    1.0000

    -

    -

    -

    -

    835440 B

    BenchmarkIndexCollectionAsync

    \Mac\(...)et_50 [30]

    392,667.6 μs

    7,837.67 μs

    12,656.39 μs

    391,574.4 μs

    1.0000

    -

    -

    -

    -

    872432 B

    BenchmarkIsInitialized

    \Mac\(...)t_100 [31]

    216.9 μs

    4.15 μs

    3.88 μs

    215.5 μs

    -

    -

    -

    -

    -

    544 B

    BenchmarkIsInitialized

    \Mac\(...)t_200 [31]

    215.8 μs

    2.21 μs

    1.85 μs

    215.7 μs

    -

    -

    -

    -

    -

    544 B

    BenchmarkIsInitialized

    \Mac\(...)et_50 [30]

    218.9 μs

    4.38 μs

    6.14 μs

    216.2 μs

    -

    -

    -

    -

    -

    528 B

    BenchmarkLoadAssets

    \Mac\(...)t_100 [31]

    2,746,052.2 μs

    115,195.76 μs

    330,518.24 μs

    2,627,569.7 μs

    140.0000

    -

    8000.0000

    7000.0000

    5000.0000

    46234408 B

    BenchmarkLoadAssets

    \Mac\(...)t_200 [31]

    2,688,051.4 μs

    100,639.20 μs

    282,203.13 μs

    2,655,953.1 μs

    134.0000

    1.0000

    10000.0000

    8000.0000

    7000.0000

    46710912 B

    BenchmarkLoadAssets

    \Mac\(...)et_50 [30]

    2,843,692.2 μs

    100,855.93 μs

    274,386.03 μs

    2,781,623.8 μs

    132.0000

    -

    8000.0000

    7000.0000

    4000.0000

    46168160 B

    BenchmarkInitializeDatabase

    \Mac\(...)t_100 [31]

    using Xunit;
    using Moq;
    using Luxoria.Modules;
    
    namespace Luxoria.Modules.Tests
    {
        public class ClassNameTests
        {
            private readonly ClassName _classUnderTest;
    
            public ClassNameTests()
            {
                _classUnderTest = new ClassName();
            }
    
            [Fact]
            public void MethodName_StateUnderTest_ExpectedBehavior()
            {
                // Arrange
                var mockDependency = new Mock<IDependency>();
                // Set up dependencies
    
                // Act
                var result = _classUnderTest.MethodUnderTest();
    
                // Assert
                Assert.NotNull(result);
            }
        }
    }
    [Fact]
    public void Subscribe_NullSubscriber_ShouldThrowArgumentNullException()
    {
        // Arrange
        Action<LogEvent> nullSubscriber = null;
    
        // Act & Assert
        Assert.Throws<ArgumentNullException>(() => _eventBus.Subscribe(nullSubscriber));
    }
    [Fact]
    public void Unsubscribe_NonexistentSubscriber_ShouldNotThrow()
    {
        // Arrange
        var mockSubscriber = new Mock<Action<LogEvent>>();
    
        // Act & Assert
        _eventBus.Unsubscribe(mockSubscriber.Object); // Should not throw
    }
    
    BenchmarkDotNet v0.14.0, Windows 11 (10.0.22631.4751/23H2/2023Update/SunValley3)
    Apple Silicon, 6 CPU, 6 logical and 6 physical cores
    .NET SDK 9.0.102
      [Host]     : .NET 9.0.1 (9.0.124.61010), Arm64 RyuJIT AdvSIMD
      DefaultJob : .NET 9.0.1 (9.0.124.61010), Arm64 RyuJIT AdvSIMD
    
    
    Bugs
    Duplicated Lines (%)

    TECH_STACKS

    Luxoria - Technical Stacks Justification

    Last Updated: 01/06/2025

    Summary

    Comparison of WinUI 3 with .NET to Other UI Frameworks

    1. Introduction

    WinUI 3 with .NET 9.0 is a modern UI framework developed by Microsoft, designed for building high-performance, native Windows applications. It is the evolution of UWP and WPF, offering a more advanced and optimized approach to Windows app development. This document provides an extensive comparison of WinUI 3 with alternative solutions, including WPF, Electron.js, JavaFX, and Qt, focusing on their strengths, weaknesses, and best use cases.

    WinUI 3 is also built with modularity in mind, allowing developers to create applications that are scalable, maintainable, and easy to integrate with other Windows and .NET components. The separation of UI and business logic is enhanced through MVVM (Model-View-ViewModel) support, ensuring better maintainability and testability.

    2. Overview of WinUI 3 with .NET 9.0

    WinUI 3 is designed to offer a seamless experience for Windows developers. It allows deep integration with Windows APIs, providing a native feel and optimized performance. Unlike WPF, which relies on older DirectX 9 technology, WinUI 3 is built on DirectX 12, enabling more efficient rendering, smoother animations, and better resource utilization.

    Key Advantages

    • Modern Fluent Design System for sleek and responsive UI

    • Hardware-accelerated graphics powered by DirectX 12

    • Deep integration with Windows APIs, ensuring robust system interactions

    • Full support for .NET 9.0, providing improved performance and maintainability

    3. WinUI 3 vs. WPF

    WinUI 3 Advantages

    • Uses DirectX 12, offering faster, smoother graphics rendering

    • Built-in support for modern Fluent UI, making applications visually appealing

    • Better long-term support from Microsoft, as WPF is in maintenance mode

    • More optimized memory usage, resulting in improved performance on low-resource systems

    WPF Advantages

    • Works on Windows 7, 8, and 10, while WinUI 3 is Windows 10/11 only

    • More established ecosystem with extensive documentation and community support

    • Better suited for legacy applications that need to maintain compatibility with older systems

    • Supports WinForms integration

    4. WinUI 3 vs. Electron.js

    WinUI 3 Advantages

    • Uses native Windows APIs, ensuring superior performance compared to Electron’s web-based rendering

    • Lower memory footprint, as Electron runs a full Chromium instance for every app

    • Better modularity, allowing developers to optimize individual components without overhead

    • More seamless OS integration, allowing direct access to Windows features like system tray, notifications, and file management

    Electron.js Advantages

    • Cross-platform compatibility (Windows, macOS, Linux)

    • Leverages web development skills, making it more accessible for developers coming from web backgrounds

    • Large ecosystem of JavaScript libraries and frameworks

    • Faster prototyping, as it allows rapid UI development with web tools

    5. WinUI 3 vs. JavaFX / Swing

    WinUI 3 Advantages

    • Better performance, as JavaFX relies on OpenGL and Swing is outdated

    • Easier access to Windows system APIs, allowing for deeper system integration

    • More modern UI components, enhancing user experience

    • More energy-efficient, reducing CPU usage compared to Java-based solutions

    JavaFX / Swing Advantages

    • Cross-platform support, running on Windows, macOS, and Linux

    • Good choice for Java-based enterprise applications, particularly those that already leverage Java backend systems

    • Strong JVM ecosystem, making it an attractive option for Java developers

    6. WinUI 3 vs. Qt (C++/QML)

    WinUI 3 Advantages

    • Better Windows integration, ensuring native Windows UI and behavior

    • More accessible to .NET developers, making it a better choice for those already using Microsoft technologies

    • No licensing costs, making it a more affordable option for businesses and developers compared to Qt, which requires commercial licenses for enterprise use. Open-source adoption is encouraged, allowing for widespread use without financial constraints. Additionally, WinUI 3 benefits from Microsoft's ecosystem, ensuring continuous updates and support.

    Qt Advantages

    • Cross-platform compatibility (Windows, Linux, macOS, iOS, Android)

    • Superior performance for CPU-intensive applications, as it is built in C++

    • More established for industrial applications, particularly in fields like automotive and medical software

    7. Conclusion

    WinUI 3 with .NET 9.0 emerges as the best choice for building modern Windows applications. With its high performance, deep Windows integration, modularity, and modern Fluent UI, it provides a superior alternative to older frameworks like WPF and JavaFX.

    While WPF remains relevant for legacy applications, its maintenance mode status makes it a less viable option for future-proof development. Electron.js is ideal for web developers looking to create cross-platform applications but suffers from high memory usage and security concerns. JavaFX and Swing are better suited for Java-based projects, though they lack modern UI capabilities. Qt remains a strong contender for cross-platform development, particularly in performance-intensive applications.

    Final Recommendation

    For Windows-first applications requiring a modern UI, modularity, and superior performance, WinUI 3 with .NET 9.0 is the best option. However, if cross-platform support is a strict requirement, Qt or Electron.js might be preferable, depending on the specific needs of the application.

    Luxoria - Technical LuxStudio Stacks Justification

    Version 1.0 Last Updated: 01/02/2025

    Technical Stack: Frontend & Security

    1. Introduction

    The choice of technologies for the frontend and security is based on several criteria: performance, maintainability, user experience, and ease of integration with the backend.

    For this project, we opted for Vue.js + TypeScript with DaisyUI and TailwindCSS for styling. Additionally, hCaptcha was chosen for security, ensuring protection against automated threats while maintaining user privacy. This section outlines the reasons for these choices and compares them with other popular solutions.

    2. Vue.js + TypeScript

    Why Vue.js?

    Vue.js is a progressive JavaScript framework that enables the creation of interactive user interfaces with a gentler learning curve compared to its competitors. It offers a modular and reactive approach, making modern frontend development easier.

    Key Advantages

    • Simplicity and flexibility: A clear and easy-to-learn syntax.

    • Reactivity: The built-in reactivity system allows smooth state management.

    • Rich ecosystem: Vue Router for navigation, Pinia/Vuex for state management.

    • Performance: Better DOM optimization than React due to its lightweight Virtual DOM.

    Why TypeScript?

    TypeScript adds static typing to JavaScript, improving code robustness and maintainability.

    Key Advantages

    • Detects errors at compilation, reducing bugs in production.

    • Enhances auto-completion and developer experience.

    • Better code documentation through explicit types.

    3. DaisyUI + TailwindCSS

    Why TailwindCSS?

    TailwindCSS is a utility-first CSS framework that enables the creation of well-styled interfaces without excessive custom CSS.

    Key Advantages

    • Increased productivity: Styles applied directly in HTML, reducing the need for custom CSS.

    • Optimized performance: Purgeable CSS, loading only what is used.

    • Easy customization: Configurable via tailwind.config.js.

    Why DaisyUI?

    DaisyUI is an extension of TailwindCSS that provides pre-designed components following Material Design and Fluent Design principles.

    Key Advantages

    • Time-saving: Ready-to-use UI components.

    • Predefined themes: Easily adaptable to project needs.

    • Seamless integration: Works directly with TailwindCSS.

    4. Security: hCaptcha

    Why hCaptcha?

    hCaptcha is a security tool designed to protect websites from bots, spam, and other automated threats while respecting user privacy. It offers an alternative to Google's reCAPTCHA, prioritizing decentralization and compliance with data privacy regulations.

    Key Advantages

    • Better privacy: Does not track users across websites, ensuring GDPR and CCPA compliance.

    • Higher accuracy: Uses advanced machine learning to detect bots more efficiently.

    • More control: Website owners can monetize CAPTCHA challenges while protecting their site.

    • Lightweight and efficient: Provides security without significant performance overhead.

    hCaptcha vs reCAPTCHA

    Criteria
    hCaptcha
    reCAPTCHA

    5. Comparison with Other Solutions

    Vue.js vs React

    Criteria
    Vue.js
    React

    Vue.js vs Angular

    Criteria
    Vue.js
    Angular

    6. Conclusion

    Choosing Vue.js with TypeScript provides an excellent balance between simplicity, performance, and maintainability. Combined with TailwindCSS and DaisyUI, it enables fast development with a modern and optimized UI.

    For larger and more structured applications, Angular can be an option, while React is a good choice for applications requiring a mature ecosystem and strong community support. However, Vue.js remains more accessible and offers better productivity for this project.

    For security, hCaptcha stands out as a privacy-friendly and efficient alternative to Google’s reCAPTCHA, ensuring robust protection without compromising user data. It is particularly suitable for projects requiring GDPR compliance and enhanced privacy control.

    Luxoria - Technical Stacks Justification

    Version 1.0 Last Updated: 01/02/2025

    Technical Stack: Backend

    1. Introduction

    The backend is the backbone of any web application, responsible for handling business logic, data management, security, and API integrations. For this project, we chose .NET WebAPI (NET 8) as the core backend technology.

    This section outlines the reasons behind this choice and compares it with other backend solutions like Node.js, Django, and Spring Boot.

    2. .NET WebAPI (NET 8)

    Why .NET WebAPI?

    .NET WebAPI is a robust framework developed by Microsoft for building RESTful web services. It offers excellent performance, scalability, and security, making it an ideal choice for modern web applications.

    Advantages of .NET WebAPI (NET 8)

    • High performance: Optimized with Just-In-Time (JIT) and Ahead-Of-Time (AOT) compilation.

    • Scalability: Supports microservices architecture and cloud-native applications.

    • Security: Built-in authentication and authorization mechanisms with ASP.NET Identity.

    Performance Benchmarks

    According to TechEmpower Benchmarks (Round 21), .NET ranks among the fastest web frameworks:

    • .NET → 7.02M requests/sec

    • Java Servlet → 2.20M requests/sec

    • Node.js → 0.60M requests/sec

    This highlights the superior performance of .NET WebAPI compared to popular alternatives. (Source: )

    Key Features of .NET 8

    • Minimal APIs: Simplified route handling for lightweight applications.

    • Improved performance: Faster execution with native AOT compilation.

    • Dependency Injection (DI): Built-in DI system for managing dependencies efficiently.

    • gRPC Support

    3. Comparison with Other Backend Solutions

    .NET WebAPI vs Node.js

    Criteria
    .NET WebAPI
    Node.js

    .NET WebAPI vs Django

    Criteria
    .NET WebAPI
    Django

    .NET WebAPI vs Spring Boot

    Criteria
    .NET WebAPI
    Spring Boot

    4. Conclusion

    .NET WebAPI (NET 8) is an excellent choice for backend development due to its high performance, security, and scalability. It offers seamless integration with databases, frontend frameworks, and cloud services, making it an ideal solution for modern web applications.

    While Node.js is a good option for lightweight, event-driven applications, and Django is preferred for Python-based projects, .NET WebAPI stands out in terms of raw performance, security, and enterprise-grade features.

    For large-scale applications, Spring Boot remains a strong competitor, but .NET WebAPI provides a more modern and optimized development experience.

    Luxoria - Technical Stacks Justification

    Version 1.0 Last Updated: 01/02/2025

    Technical Stack: Storage

    1. Introduction

    Efficient data storage is a crucial component of any web application, ensuring reliable and scalable data management. For this project, we opted for PostgreSQL as the database and Entity Framework (EF) Core as the Object-Relational Mapper (ORM).

    This section explains the reasons for these choices and compares them with alternative database and ORM solutions.

    2. PostgreSQL

    Why PostgreSQL?

    PostgreSQL is an advanced open-source relational database management system (RDBMS) known for its robustness, performance, and extensibility. It is widely used in enterprise applications and supports both SQL and NoSQL features.

    Advantages of PostgreSQL

    • ACID compliance: Ensures data integrity and reliability.

    • Scalability: Efficient handling of large datasets and concurrent users.

    • Extensibility: Supports custom functions, JSONB storage, and full-text search.

    • Security: Strong authentication mechanisms, encryption, and role-based access control.

    Performance Benchmarks

    According to PostgreSQL benchmarks:

    • PostgreSQL 11 vs MongoDB 4.0: PostgreSQL achieved higher throughput, ranging from several percentage points up to one or two orders of magnitude in certain tests ().

    • Performance evolution: Tests using pgbench from PostgreSQL 9.6 to 15 showed substantial transaction processing improvements ().

    3. Entity Framework (EF) Core

    Why Entity Framework Core?

    Entity Framework Core is a lightweight, extensible, and high-performance ORM for .NET applications. It simplifies database interactions by allowing developers to work with data using C# objects instead of raw SQL queries.

    Advantages of EF Core

    • Productivity: Reduces boilerplate code for database interactions.

    • Cross-platform: Works on Windows, Linux, and macOS.

    • Migration support: Handles schema evolution with automated database migrations.

    • Performance optimizations: Includes

    4. Comparison with Other Storage Solutions

    PostgreSQL vs MySQL

    Criteria
    PostgreSQL
    MySQL

    EF Core vs Dapper

    Criteria
    EF Core
    Dapper

    5. Conclusion

    PostgreSQL is the ideal database for this project due to its robustness, extensibility, and scalability. It provides excellent performance, strong security, and a wide range of advanced features, making it a preferred choice over MySQL for complex applications.

    Entity Framework Core is the best ORM for .NET applications, offering productivity, maintainability, and database-agnostic flexibility. While Dapper provides raw SQL performance, EF Core strikes a balance between efficiency and ease of use, making it the preferred choice for most scenarios.

    By combining PostgreSQL and EF Core, we ensure a scalable, efficient, and maintainable storage solution for our application.

    Better modularity, allowing developers to structure applications more efficiently

  • Lower memory consumption compared to web-based solutions like Electron.js

  • Enhanced security model with built-in sandboxing capabilities

  • Better debugging and profiling tools with integration into Visual Studio

  • Support for WinRT and COM interop, making native Windows feature integration seamless

  • Future-proof Windows development, ensuring compatibility with upcoming OS updates

  • More modular architecture, making it easier to update and maintain applications

  • Better integration with .NET ecosystem, enabling advanced functionality with C# and .NET APIs

  • , making migration from older applications easier
  • Better security, as Electron apps often struggle with vulnerabilities due to their web-based nature

  • Improved CPU and GPU efficiency, leading to longer battery life on laptops and mobile devices

  • Better multithreading support, as Electron is limited by JavaScript's single-threaded nature

  • Better integration with cloud services, leveraging .NET's strong cloud support

    Scalability, making it suitable for both small-scale applications and enterprise-level solutions due to its modular architecture and easy integration with Azure cloud services.
  • Extensive documentation and community support, with Microsoft providing official guides, forums, and tutorials, making it easier for developers to adopt and troubleshoot.

  • Performance efficiency, leveraging hardware acceleration and DirectX 12 to ensure smooth UI rendering and responsiveness, outperforming frameworks like Electron in resource utilization. as Qt requires commercial licenses for enterprise applications

  • Better default UI components, reducing the need for extensive UI customization

  • Better .NET ecosystem compatibility, leveraging features like LINQ, async/await, and dependency injection

  • Easy integration: Compatible with existing projects and can be gradually adopted.

    Integration

    Easy for existing projects

    Best suited for complex SPAs

    Usage

    Ideal for dynamic projects

    Preferred for enterprise applications

    Strong typing: C# provides type safety, reducing runtime errors.
  • Seamless database integration: Works well with Entity Framework (EF) Core and PostgreSQL.

  • Cross-platform: Can run on Windows, Linux, and macOS.

  • Integration with frontend frameworks: Easily integrates with Vue.js, React, and Angular.

  • : Enables
    high-performance
    communication between services.

    Learning Curve

    Steeper for beginners

    Easier for JavaScript devs

    Learning Curve

    Moderate

    Easier for Python devs

    Performance: Optimized query execution and indexing strategies.

  • Cross-platform support: Runs on Windows, Linux, and macOS.

  • lazy loading, query caching, and batching
    .
  • Database-agnostic: Supports multiple databases, including PostgreSQL, MySQL, and SQL Server.

  • LINQ support: Enables expressive and strongly-typed queries.

  • Security

    Advanced role-based access

    Basic authentication

    Use Case

    Recommended for large projects

    Ideal for micro-optimizations

    Privacy

    GDPR-compliant, no tracking

    Tracks users across websites

    Accuracy

    High accuracy with ML

    Strong but Google-dependent

    Monetization

    Allows site owners to earn

    No earning potential

    Performance

    Lightweight and fast

    Can add extra load to pages

    Learning Curve

    Easier and more intuitive

    More complex, requires JSX

    Performance

    Optimized Virtual DOM

    High-performance Virtual DOM

    Ecosystem

    Vue Router, Pinia, Vite

    Next.js, Redux, Webpack

    Model

    Options API or Composition API

    Hooks and functional components

    Complexity

    Lightweight and progressive

    Full-fledged framework, heavier

    Performance

    Faster for small projects

    Optimized for large applications

    Architecture

    Flexible, modular

    Strict and structured

    Learning Curve

    Easy to grasp

    Complex, requires TypeScript

    Performance

    High, thanks to compiled C#

    Good, but single-threaded

    Scalability

    Supports multi-threading

    Uses event-driven model

    Security

    Strong built-in security

    Requires additional packages

    Database

    Native support for SQL/NoSQL

    Strong MongoDB ecosystem

    Performance

    High due to compiled C#

    Good, but Python overhead

    Scalability

    Microservices-ready

    Better suited for monoliths

    Security

    Built-in authentication

    Strong security features

    Database

    SQL & NoSQL

    SQL-first (PostgreSQL, MySQL)

    Performance

    Faster due to JIT & AOT

    Good, but Java is heavier

    Scalability

    Microservices-ready

    Enterprise-grade scalability

    Security

    Built-in ASP.NET Identity

    Strong security features

    Dev Speed

    Faster with C# and minimal APIs

    Performance

    High for complex queries

    Faster for read-heavy workloads

    Scalability

    Excellent for large datasets

    Good, but can be limited

    ACID Compliance

    Fully ACID-compliant

    ACID-compliant, but with trade-offs

    Extensibility

    Supports JSONB, custom types

    Limited customizability

    Productivity

    Higher due to automation

    Requires more manual SQL

    Performance

    Good, but abstraction overhead

    Faster for raw SQL queries

    Query Flexibility

    Uses LINQ, automated queries

    Full control over SQL

    Learning Curve

    Easier for .NET developers

    Requires SQL expertise

    Luxoria Application (LDA)
    LuxStudio
    TechEmpower Benchmarks - Round 21
    source
    source

    Requires more boilerplate

    PIC2

    CHANGELOG

    1.73.0 (2025-12-04)

    Features

    • Add WindowCaption on MarketplaceView ()

    (2025-11-17)

    Bug Fixes

    • create preset from current settings when expander is false ()

    (2025-11-17)

    Bug Fixes

    • Delete old files before installing new release ()

    (2025-10-24)

    Bug Fixes

    • Enhances layer operation UI in preset editor ()

    • Smooths histogram data with Gaussian blur ()

    Features

    • Adds animated transitions to histogram ()

    • Histogram responsiveness ()

    (2025-10-23)

    Bug Fixes

    • Assembly version helper & usage ()

    (2025-10-23)

    Bug Fixes

    • GetVersion returns Version (Version-nullable to Version) ()

    (2025-10-23)

    Bug Fixes

    • GetVersion method (fetches from assembly) ()

    (2025-10-23)

    Bug Fixes

    • Displays version on splash screen ()

    (2025-10-23)

    Features

    • Add Assembly helper ()

    • Add recommended information on version selector ()

    • Marketplace selects recommended version as default ()

    (2025-10-23)

    Bug Fixes

    • Improves CLIP algo and adds resource handling ()

    • Improves gradient tool rendering and overlay ()

    • Improves gradient tool rendering and overlay ()

    • Improves subject overlay and tool handling ()

    (2025-10-11)

    Features

    • Add ApplicationReady event, being published after launching the app ()

    • Integrate AppVersion on launching splash screen ()

    (2025-10-11)

    Bug Fixes

    • Optimisation of LuxEditor concurrencies ()

    (2025-10-04)

    Bug Fixes

    • Add authorization header to photo fetch requests and handle fetch errors ()

    • Add debug information when sending mail ()

    • Add debug information when SendMention ()

    • Brings authorization in CollectionController ()

    Features

    • Enhance image loading with ProtectedImage component and caching mechanism ()

    • Implement AdminOnlyFilter and restrict access to admin routes; add 403 Forbidden page ()

    • Refactor ProtectedImage component for improved image loading and caching ()

    (2025-10-03)

    Features

    • Allow failure on module intialisation process ()

    (2025-09-25)

    Bug Fixes

    • Compilation issue when using IStorageAPI (should have required importation of Luxoria.Core) ()

    (2025-09-19)

    Bug Fixes

    • Restore old implementation method for importation (for working with LuxEditor) ()

    (2025-09-19)

    Bug Fixes

    • dpi scale issue ()

    • Simplifies DPI handling in PhotoViewer ()

    (2025-09-18)

    Bug Fixes

    • Add develop version if app_version is null or not defined ()

    • Add pre-step for masking the first char (v) of app_version envvar ()

    • Replace Version by $env:Version ()

    • Specify AppVersion on msbuild command ()

    Features

    • Add AppVersion environment variable into Luxoria.App.csproj file ()

    (2025-09-18)

    Bug Fixes

    • Missing IStorageAPI interface in Luxoria.Modules namespace ()

    (2025-09-18)

    Bug Fixes

    • Concurrency when import service initialises and loads assets into collection ()

    (2025-09-13)

    Bug Fixes

    • Comment out plan release phase for debugging purpose ()

    Features

    • Add deploy to saturn environment inside CircleCI ()

    • Add proper kube config for saturn env ()

    (2025-09-09)

    Bug Fixes

    • Remove debug messages ()

    (2025-09-08)

    Bug Fixes

    • Enhances crop editor with aspect ratio controls ()

    (2025-09-08)

    Bug Fixes

    • Add debug message for chat debugging purpose ()

    (2025-09-08)

    Bug Fixes

    • Enable Reflection inside Luxoria.App (fixes bugs on x86 & ARM64) ()

    (2025-09-08)

    Bug Fixes

    • Sliders not sliding smoothly in Layers ()

    (2025-09-04)

    Bug Fixes

    • Specify TypeInfoResolver (fixing crashes on x86) ()

    (2025-09-04)

    Bug Fixes

    • LuxImport's brochure, excluding HTML rendering not supporting by CommunityToolkKit MD renderer ()

    • Move README.md for both LuxEditor and LuxExport to proper folders ()

    • Using permalink for displaying PNG inside MD file ()

    Features

    • Add graphical view of LuxFilter UI ()

    • Enhance brochure of LuxEditor by adding pictures, etc ()

    • Enhance marketplace installing process with info modal ()

    (2025-09-04)

    Bug Fixes

    • Upload to marketplace python script by specifying branch_src in upload_dirs param list ()

    (2025-09-04)

    Bug Fixes

    • LuxImport brochure's main picture with Github permalink to avoid issue if deleted ()

    • LuxMarketplace takes a src_branch_name instead of "main" ()

    (2025-09-03)

    Features

    • Implements file size optimization for export ()

    • Presets for web export ()

    (2025-09-03)

    Bug Fixes

    • Enable Flatten when downloads artifacts ()

    (2025-09-03)

    Bug Fixes

    • Necessary env. variable known as GITHUB_TOKEN for retreiving and attaching artifacts ()

    (2025-09-03)

    Bug Fixes

    • Specify artifact list instead of *.exe ()

    (2025-09-03)

    Bug Fixes

    • Include all LuxoriaSetup before zipping the remaining file ()

    (2025-09-03)

    Bug Fixes

    • Upload exe before zipping the remaining part ()

    (2025-09-03)

    Bug Fixes

    • Upload exe as artifacts unzipped (version) ()

    (2025-09-03)

    Features

    • Fix names of modules in navigation bar ()

    (2025-09-02)

    Bug Fixes

    • Add app_version input to workflows for versioning ()

    • Change default version (1.0.0) by specifying 'dev' instead ()

    • Change platform environment var by using matrix.platform ()

    • ISCC command only uses a single arg ()

    Features

    • Append installer executable as an artifact ()

    • Run Inno Wizard on build-upload-lda workflow ()

    (2025-09-02)

    Bug Fixes

    • Image duplicates in collection explorer ()

    Features

    • Add curves to reset default button ()

    (2025-09-02)

    Bug Fixes

    • Add debug configuration of debug/testing environement ()

    • Add FrontEnd URI inside allowed Origin ()

    • Adjust mention dropdown width and improve chat input layout ()

    • Allow access to /config/api route even if the user is not logged in ()

    Features

    • add '/forgot-password' to public paths in middleware for improved access ()

    • Add authorization checks for collection and photo access in CollectionController ()

    • add base of LuxStudio V2 ()

    • add chat functionality for photo comments and implement file download feature ()

    (2025-09-02)

    Bug Fixes

    • Template file location, using vault service. Remove adobe icc color profile. ()

    (2025-09-02)

    Bug Fixes

    • Replace HintPath (static full path) with ProjectRef (dynamic config + path) for LuxStudio.COM ()

    (2025-09-02)

    Features

    • Add LuxInstall.iss for x64, x86 and ARM64 ()

    (2025-07-05)

    Features

    • Add LuxStudio module configuration file ()

    (2025-07-05)

    Bug Fixes

    • Add Scenario 4 PDF to BTP Scenarios ()

    (2025-07-05)

    Bug Fixes

    • Add issues specifications inside Roadmap ()

    (2025-07-05)

    Bug Fixes

    • Clears filter controls when toggled off ()

    • Improves sort and filter behavior ()

    Features

    • Adds asset filtering visibility property for export ()

    • Filtering to collection explorer ()

    (2025-07-05)

    Bug Fixes

    • Add folder for BTP scenario validations ()

    • Add scenaria 5 ()

    • Roadmap files (pdf & docx) ()

    • Roadmap integrates Dependency feature ()

    (2025-07-04)

    Bug Fixes

    • Hides UI elements for web export ()

    Features

    • Enables exporting assets in different formats (for web) ()

    (2025-07-04)

    Bug Fixes

    • Missing image data for chat URL ()

    Features

    • Chat integration in LuxEditor ()

    (2025-07-04)

    Bug Fixes

    • Add details inside Roadmap ()

    (2025-07-04)

    Bug Fixes

    • Add converter for GetApiUrlAsync choosing between LuxPortal v1 / v2 (default set to v2) ()

    • AuthSrv might be null by modifying the l22 ()

    • Bring Simplification over Configuration Service ()

    Features

    • Add AuthManager to automaticly handle Token Generation, Login Page, Token renewal, etc. ()

    • Add check to automatically add "https://" before studio URL ()

    • Add ExchangeAuthorizationCode method in AuthService (LuxStudio.COM) ()

    • Add Init AuthManager on LuxStudio/AccManagement part ()

    (2025-07-03)

    Bug Fixes

    • Roadmap 2025-2026 ()

    (2025-07-03)

    Bug Fixes

    • Change GridView for a StackView for visibility purpose ()

    Features

    • Add Blur background effect on LuxEditor @ 2.0.4 ()

    • Add FlyoutMenu for highlighting ROI, viewing details, removing or applying blur-effect + Installation of Luxoria.Algorithm.GrabCut nuget ()

    • Add fondation of subject recognition on LuxEditor ()

    (2025-07-02)

    Features

    • Add Roadmap PG5 documents in DOCX and PDF formats ()

    (2025-07-01)

    Bug Fixes

    • Add files inside gonogo folder ()

    Features

    • Add documentation and images for contributions ()

    • Add Epitech BTP file ()

    • Add files ()

    • Add License Justification document for Apache 2.0 ()

    (2025-06-22)

    Bug Fixes

    • Crop corner resize while box is rotated ()

    • Improves crop box clamping logic. ()

    • Infinite loop on crop changed ()

    • Photoviewer Canvas Host horizontal and vertical alignment issue, forcing center position ()

    (2025-06-21)

    Bug Fixes

    • Add async fetches for releases & Animation when a module has been installed ()

    (2025-06-21)

    Bug Fixes

    • Export presets window UI ()

    • Improves preset tree UI and EXIF display ()

    • Parametric curve saving settings in layers ()

    • Remove OpenCollectionEvent ()

    (2025-06-20)

    Bug Fixes

    • Crash on layer creation : removing save state who stack overflow ()

    • Export modal to window, with events, and image processing inside export ()

    • Undo Redo system, more user friendly + debounce on value changed ()

    (2025-06-18)

    Bug Fixes

    • Clean up trigger branches list only [main, dev, release/*] ()

    • Complete the upload artifact path using github workflow's matrix ()

    • Path now includes matrix.configuration fetches from matrix instead of global env ()

    (2025-06-18)

    Bug Fixes

    • Copy the brochure MD inside the "ModuleName.ARCH" folder ()

    Features

    • Add fondation of ModuleInstaller Helper ()

    • Add fondation on Marketplace View on LDA ()

    • Add LuxExport's luxmod.json + LuxEditor's luxmod.json files ()

    • Add necessary methods inside ModuleInstaller ()

    (2025-06-15)

    Bug Fixes

    • Add brochure field to luxmod.json ()

    (2025-06-14)

    Bug Fixes

    • Add bucket initialisation process before launching app ()

    • Add debug URL in allowed origins (CORS) ()

    • Add luxapi script to create its secrets ()

    • Add random username and passwd as admin user for MinIO bucket ()

    Features

    • add MinIO password generation script and configure environment variables in deployment ()

    (2025-06-13)

    Bug Fixes

    • Remove Z-Index, and remove possibility to move masks ()

    (2025-06-12)

    Bug Fixes

    • Comments norm ()

    • Comments norm ()

    • Double overlay drawing + update overlay color instantly on color changed ()

    • Linear and Gradial radient with the new system ()

    Features

    • integration LuxEditor v2 to develop branche ()

    (2025-06-11)

    Features

    • Add fondation of LuxMarketplace manager/BuildSystem segment ()

    (2025-06-11)

    Bug Fixes

    • Inject GH_TOKEN as secret using Github secrets ()

    (2025-06-10)

    Bug Fixes

    • Change python version from >=3.13 to >=3.11 for marketplacemgr ()

    (2025-06-10)

    Bug Fixes

    • Checkout code before executing script ()

    (2025-06-10)

    Bug Fixes

    • Update working directory ()

    (2025-06-10)

    Bug Fixes

    • Update workflow name ()

    (2025-06-10)

    Features

    • Add GitHub Actions workflow to attach artifacts to marketplace ()

    • Add uploadmgr script which aims to publish a branch on target (that contains Luxoria.App & Modules folders) ()

    (2025-06-09)

    Bug Fixes

    • Wait the building of Luxoria App & Modules before releasing artifacts ()

    (2025-06-09)

    Features

    • Add steps to list and zip downloaded artifacts before uploading to GitHub Release ()

    (2025-06-09)

    Bug Fixes

    • Rename job identifiers ()

    (2025-06-09)

    Features

    • Add workflow_call trigger to build-upload workflows and enhance artifact release process ()

    (2025-06-09)

    Features

    • Add GitHub Actions workflow to attach artifacts to release ()

    (2025-06-04)

    Bug Fixes

    • Bring docs for IJwtService ()

    • Create I/JwtService that handles TokenCreation ()

    (2025-06-04)

    Bug Fixes

    • Generate JWT token the same way as AuthController does ()

    (2025-06-04)

    Bug Fixes

    • Improve WhoAmI method (AuthController), returns User model fetched from DB, instead of reading JWT cache info ()

    • User retrieval from JWT token (WhoAmI method) ()

    (2025-06-04)

    Bug Fixes

    • Display algorithm's row by algorithm name sorting by A-Z ()

    Features

    • Add fondation for FilterExplorer on LuxFilter Left-hand toolbox ()

    • Add logical update (filer by algoName & Ordering >=/=<) when filter has been changed ()

    • Add ScoreViewer in ToolBox right-hand side panel ()

    • Add ToolBox component which includes RatingComp on the right-hand side panel ()

    (2025-06-03)

    Bug Fixes

    • Change ingress certification manager to traefik's internal certmgr ()

    (2025-06-02)

    Bug Fixes

    • Add SMTP settings validation and update deployment configuration ()

    • Refactor URLs in CollectionController and EmailService to use dynamic configuration ()

    • Update API endpoint to use dynamic configuration ()

    • Update API URLs to use dynamic configuration from app settings ()

    (2025-06-01)

    Features

    • Enhance CollectionDetail view with scrollable gallery and mention system ()

    • Add CollectionChat view and integrate chat functionality with image selection and mentions ()

    • Add image selection modal and enhance message formatting with hashtags ()

    • Add Pending Registration feature with email verification ()

    (2025-05-28)

    Bug Fixes

    • Add debugging step for Kustomization in deploy-to-pluto job ()

    • Add kubeconfig installation step in deploy-to-pluto job ()

    • Add kubectl installation step in deploy-to-pluto job ()

    • Add Kubernetes orb declaration in config.yml ()

    Features

    • enhance deployment process with kubectl and kustomize integration for Pluto ()

    • Specify target environment ()

    (2025-05-27)

    Bug Fixes

    • Add timeout mechanism to kill the authentification process if callback has not been received after 120s ()

    Features

    • Add fondation of LuxStudio Integration Module ()

    • Add fondation of LuxStudio.COM Module (contains AuthService.cs) ()

    • Add LuxStudioConfig model and integrate configuration fetching in ConfigService ()

    • Add Minio service configuration to docker-compose and register MinioService in Program.cs ()

    (2025-05-27)

    Bug Fixes

    • Correct SSO authorization URL to use frontend URL instead of backend URL ()

    (2025-05-26)

    Bug Fixes

    • Add pull request trigger for main, develop, and release branches in workflows ()

    • Correct path to requirements.txt in LuxFilter model installation step ()

    • Remove CI branches from workflow trigger ()

    • Update .gitignore to include negative.txt and positive.txt ()

    Features

    • Add CI trigger for feature and fix branches in workflow ()

    • Add ONNX export functionality and requirements for CLIP model ()

    • Add Python 3.12 setup and install requirements for Luxoria LuxFilter Model ()

    • Set up Python 3.12 and install Luxoria LuxFilter Model requirements in SonarCloud analysis workflow ()

    (2025-05-26)

    Bug Fixes

    • Remove LFS filter for ONNX files ()

    (2025-05-26)

    Bug Fixes

    • Disable LFS storage ()

    (2025-05-26)

    Bug Fixes

    • Clarify LFS disabling steps in mirror workflow ()

    • Improve LFS smudge disabling in mirror workflow ()

    • Remove duplicate Git LFS disable step in mirror workflow ()

    • Remove LFS smudge disabling steps from mirror workflow ()

    Features

    • Disable lda-build, which is a clone of build-upload-lda ()

    (2025-05-26)

    Bug Fixes

    • Create a directory for each vault, and, Delete the vault's drectory when deleting the specified vault ()

    Features

    • Add fondation of VaultService & StorageAPI ()

    • Add vault management methods to IVaultService ()

    • Complete StorageAPI for Modules ()

    (2025-05-25)

    Features

    • Add "Start Over" button on filter's status view ()

    • Add ToastNotificationEvent and StartOver button on LuxImport's indexication process view ()

    • Bring OpenAI CLIP model as Color Visual Aesthetics analysis ()

    • Enhance pipeline event handling and user notifications ()

    (2025-05-23)

    Features

    • Add DesktopController for API versioning and configuration endpoint ()

    • Add initial migration files for database schema creation ()

    • Enhance DesktopController to include configuration endpoint and update appsettings for URI structure ()

    (2025-05-22)

    Bug Fixes

    • Buildsystem script to build luxEditor (removing AppX in file path) ()

    • Contrast filter + add comments to uncommented functions ()

    • Exposition / contrast / tint / temperature / saturation method ()

    • Refactor LuxEditor for better performances ()

    (2025-05-19)

    Bug Fixes

    • Add maxcpucount option to Luxoria.App build step in workflow ()

    • Add optional flag to disable Luxoria.SDK's PackOnBuild option ()

    • Add renaming steps for LuxImport, LuxFilter, LuxEditor, and LuxExport DLLs in build workflow ()

    • Change Reference Paths in LuxImport csproj file ()

    (2025-05-17)

    Bug Fixes

    • Improve file upload validation in AuthController and update logout method in Dashboard ()

    • Update API_URL in config files for consistency and environment variable support ()

    Features

    • add real-time chat functionality with username support ()

    • Add user avatar upload and retrieval functionality ()

    • Enhance JWT token generation to include user email and secure collection retrieval with authorization ()

    • Implement SignalR chat functionality and add allowed email management for collections ()

    (2025-05-15)

    Bug Fixes

    • Move dependabot to .github folder, from .github/workflows folder ()

    (2025-05-11)

    Bug Fixes

    • Add API_URL environment variable to luxstudio container ()

    • Add context to build-and-push job in CircleCI configuration ()

    • Add debug step to check DockerHub credentials before login ()

    • Correct build context paths for luxapi and luxstudio in Azure Pipelines configuration ()

    Features

    • Add ArgoCD application configuration for LuxStudio in Pluto namespace ()

    • Add CircleCI configuration file for CI/CD setup ()

    • Add CircleCI configuration for building LuxAPI and LuxStudio Docker images ()

    • Add Docker and Kubernetes configurations for LuxStudio deployment ()

    (2025-04-08)

    Bug Fixes

    • Add Unit tests for LuxExport ()

    • Clean unused code ()

    • Commentaries in code ()

    • Documentation for lux-export ()

    (2025-03-07)

    Bug Fixes

    • Simplify LoadWindowCaption by using local variable 'path' ()

    Features

    • Add ApplicationIcon 'Luxoria_icon.ico' + Add Luxoria official logo on SplashScreen ()

    • Create LoadWindowCaption method to load an ico for window caption and taskbar ()

    (2025-03-06)

    Bug Fixes

    • Add Filters (ReadOnlyDictionary?) in ImageData and fix some tests ()

    • Bring clarification and fix nullable variables object? sender => object sender ()

    • Changes Score alignment from Center to Right ()

    • Remove gray border to the ItemList on FilterView ()

    Features

    • Add base of filters selection with params (weight) ()

    • Add FilterCatalog Event to fetch the entire available filters (ReadyToUse) ()

    • Add StatusView foundation for LuxFilter UI (ListView, ViewModel, ...) ()

    • Add the Status (Logger) UI on LuxFilter 3rd part ()

    (2025-02-18)

    Bug Fixes

    • Change Compute method usage in LuxFilter.Tests cases ()

    • Change type of return of Pipeline[Compute] method ()

    • Static path to assets folder on LuxFilter.TestMain ()

    (2025-02-17)

    Features

    • Update Dependabot configuration to target the develop branch for all package ecosystems ()

    (2025-02-17)

    Features

    • Add Dependabot configuration for automated dependency updates ()

    • Update Dependabot configuration to include commit message prefixes and scope ()

    (2025-02-14)

    Bug Fixes

    • Build system of LuxImport for Unpackaged Luxoria version ()

    • Change view from ImportView when recentbutton is clicked ()

    • Check if CollectionPath already initialized, if yes, goto Indexing View ()

    • Unassign dialog.Content after dialog closed ()

    Features

    • Add a progress bar on MainImportView (X/3 steps) ()

    • Add base of Importation modal (ImportView) ()

    • Add basic layer for ImportView view ()

    • Add first importation step dialog (1/3) ()

    (2025-02-13)

    Bug Fixes

    • Rename artifact using matrix.platform to Luxoria.App.xARCH ()

    • Update artifact upload name to include configuration and platform ()

    Features

    • Add feat/unpackaged-version branch to release workflow ()

    • Add upload step for Luxoria.App in release workflow ()

    (2025-02-13)

    Bug Fixes

    • Code cleanup using visual studio profile 1 ()

    • Collection Explorer carrousel ()

    • Collection Explorer carrousel ()

    • Display flyout menu on click ()

    Features

    • Backend behind Graphical Test Module XAML ()

    • EXIFS metada pannel ()

    • IModuleUI Integration ()

    • Load component function ()

    (2025-02-05)

    Bug Fixes

    • Correct formatting and style in HelloWorld.vue ()

    Features

    • Add base of SSO ()

    • Add Dashboard component with authentication guard and logout functionality ()

    • Add Docker configuration and initialization scripts for Luxoria database ()

    • Add DTOs for user login, registration, and refresh token requests; implement TokenService for secure token generation and comment in code ()

    (2025-02-05)

    Features

    • Add metrics on LuxFilter & Create Luxoria.SDK nuget ()

    (2025-02-05)

    Features

    • Add EXIF data on ImageData and Include RAW/ARW file extension inside Filter ()

    • Enhance EXIF orientation handling in ImageData processing ()

    • Refactor EXIF orientation handling in ImageData ()

    (2025-02-03)

    Features

    • Adding BrisqueInterop (C++) to BrisqueAlgo (IFilter .NET) ()

    (2025-02-03)

    Features

    • Add additional diagnostics and exporters to ImportService benchmarking ()

    • Add benchmarks & metrics on ImportService ()

    • Enhance benchmarking for ImportService with additional diagnostics and categorization ()

    • Update ImportServiceBenchmark to support multiple dataset paths ()

    (2025-01-31)

    Bug Fixes

    • Remove Exception and Add explanations in LuxFilter.cs file ()

    Features

    • Add tests for all services & repositories inside LuxImport ()

    (2025-01-30)

    Bug Fixes

    • Correct typo in dotnet test command for LuxFilter module in build workflow ()

    (2025-01-30)

    Features

    • Add unit tests for LuxImport module and update build workflow for coverage reports ()

    (2025-01-30)

    Bug Fixes

    • Remove unused lib on LuxFilter ()

    Features

    • Add all test cases for LuxFilter ()

    • Add brisque_impl_netlib submodule for enhanced BRISQUE implementation ()

    • Add OpenCV & OpenCV-contrib libs for C++ ()

    • Add unit tests for ImageProcessing and SharpnessAlgo ()

    (2025-01-18)

    Bug Fixes

    • Disable PublishReadyToRun during application build in LDA workflow ()

    • Remove publish step from LDA build workflow ()

    • Remove redundant environment variable declaration in build workflow ()

    • Remove runtime identifier from build command in LDA workflow ()

    Features

    • Add build and release workflows for Luxoria Desktop App ()

    (2025-01-15)

    Bug Fixes

    • Add null handlers to events to avoid null refs ()

    • AddAlgorithm method returns itself ()

    • Removing SKBitmapWithSize, simplifying the Compute method ()

    Features

    • Add base of Brisque algorithm in LuxFilter ()

    • Add event handling and unique IDs to pipeline processing ()

    (2025-01-13)

    Bug Fixes

    • Load Assemblies inside Luxoria.SDK.dll ()

    Features

    • Add sentry to Luxoria.SDK dll ()

    (2025-01-08)

    Features

    • Add sentry to project in LoggerService ()

    (2025-01-08)

    Bug Fixes

    • Add explanations inside PipelineService file & remove unused libs ()

    • Add multi-thread process on compute function ()

    • Compute function now takes a collection of bitmaps ()

    • ComputeVariance function and improve code readability ()

    Features

    • Add base of LuxFilter module ()

    • Add compute sharpness of a bitmap ()

    • Add Filter Pipeline base ()

    • Add LuxFilter independant buildsystem & Add models ns in PipeSvc ()

    (2025-01-08)

    Bug Fixes

    • Update LICENSE link in README to point to LICENSE.md ()

    (2024-12-22)

    Bug Fixes

    • Add build step for LuxImport solution in CI workflow ()

    • Add docstrings to build functions for better clarity ()

    • Add filters in indexation process ()

    • All unit tests using ImageData model ()

    Features

    • Add Apache License 2.0 to the repository ()

    • Add Contributor Covenant Code of Conduct ()

    • Add pull request template for Luxoria contributions ()

    (2024-12-08)

    Bug Fixes

    • Add test to cover LogAsync method ()

    • All warnings about unit tests ()

    • Fix sonar issues ()

    • Implementation of IEvent interface ()

    Features

    • Improve logger system ()

    (2024-12-06)

    Bug Fixes

    • Add some tests to cover FileExtensionHelper class ()

    • Add some tests to cover Manifest model ()

    (2024-12-06)

    Bug Fixes

    • Disable tests on some Event models ()

    • Excluding some models from coverage ()

    (2024-12-05)

    Bug Fixes

    • Remove .sonar from cache exclusions in build workflow ()

    • Update cache paths for SonarCloud data in build workflow ()

    Features

    • Enable caching system on Build workflow ()

    • Including .sonar folder in cache ()

    (2024-12-05)

    Bug Fixes

    • Execute a clean code on the overall code base ()

    • Include StartupTests file to test and cover Startup logic file ()

    • Make private assert functions static ()

    • Run Code-cleaner on StartupTests file ()

    (2024-12-05)

    Bug Fixes

    • Add mutex (multi-thread safe) on all ImageData methods ()

    • Clean sonar issues on Startup file ()

    • Clean sonar issues on this file ()

    • Make UpdateSlashScreenAsync function static ()

    (2024-12-01)

    Bug Fixes

    • Rename build job to scan-sonarcloud in workflow configuration ()

    (2024-12-01)

    Bug Fixes

    • Update commit-checker workflow to trigger on specific pull request events ()

    (2024-12-01)

    Bug Fixes

    • Change hyperlink to access to SonarCloud from main readme ()

    (2024-11-29)

    Bug Fixes

    • Add SONAR_TOKEN to SonarQube analysis in GitHub Actions workflow ()

    (2024-11-29)

    Bug Fixes

    • Update dotnet-coverage command in GitHub Actions workflow for improved test coverage collection ()

    (2024-11-29)

    Bug Fixes

    • Add installation step for .NET coverage tool in GitHub Actions workflow ()

    (2024-11-29)

    Bug Fixes

    • Update GitHub Actions workflow to use SonarCloud and improve coverage reporting ()

    (2024-11-28)

    Bug Fixes

    • Clean up README formatting by adding missing div closure ()

    (2024-11-28)

    Bug Fixes

    • Update README to replace SonarQube links with SonarCloud and remove development release section ()

    (2024-11-28)

    Features

    • Simplify build workflow by removing unnecessary branch triggers and updating SonarQube command ()

    (2024-11-28)

    Bug Fixes

    • Remove dual SAST checker on SonarQube ()

    Features

    • Update build workflow to trigger on main and develop branches, and add pull request event types ()

    • Update SonarQube scanner options in build workflow ()

    (2024-11-27)

    Bug Fixes

    • Merge develop into feat/core/main-menu ()

    • Removed unused files ()

    Features

    • Add Main Menu Bar component and module import setting ()

    (2024-11-27)

    Bug Fixes

    • Add comments inside Index function ()

    • Add functions & methods explanations inside files ()

    • Add functions explanations inside 'ImportService' file ()

    • Cleanup the code before merge to 'develop' ()

    Features

    • Add a toast notification message when CollectionUpdatedEvent ()

    • Add base of Luxoria Indexing Process ()

    • Add handler to retreive updated collection on MainWindow ()

    • Add importation cleanup process ()

    (2024-11-21)

    Features

    • Fix documentation about technical stacks ()

    • Upgrade .NET version to 9.0 ()

    • Upgrade release workflow to use .NET 9.0 ()

    (2024-11-21)

    Features

    • Update issue templates ()

    (2024-11-21)

    Features

    • Update issue templates ()

    • Update issue templates ()

    (2024-11-19)

    Bug Fixes

    • Exclude Startup.cs and *.xaml (design files) from code coverage analysis ()

    • Unit test after logger function in initialize ()

    • Update .gitignore file to Ignore .vscode, .DS_Store, any tmp files ()

    • Update commitlint.config.js to enforce subject case rules ()

    Features

    • Add base of processing for LuxImport ()

    • Add code coverage test in build workflow ()

    • add GitHub Actions workflow for building and packaging Luxoria.App ()

    • Add Luxoria.SDK project ()

    1.0.0 (2024-11-19)

    Bug Fixes

    • Update download link in README.md ()

    Features

    • Add Auto release system (Semantic Release) ()

    • add base of .NET WinUI3 project ()

    • add C# .NET WinUI3 base ()

    • add GitHub Actions workflow for building and analyzing the project ()

    Improves subject overlay and tool handling (04ca4d2)

  • Improves subject recognition blur application (a30c52b)

  • Improves subject recognition blur application (e9b0894)

  • Change SMTP__User to SMTP__Username (c4f40d1)

  • Correct secret key references for SMTP user and password in deployment configuration (3b8934f)

  • Improve access control checks in CollectionController and update response messages (274c366)

  • Improve user access checks in controllers (ab10a3f)

  • Remove placeholder in Get Status method (75bcb29)

  • Remove unnecessary confirmation URL from email template (b5de9c4)

  • Update hCaptcha SecretKey and SMTP configuration in appsettings (e27de2a)

  • LicensePath inside LuxInstall.iss file (e6f2648)

  • Remove default version on all installer config files (635d599)

  • Source path (LuxInstall.iss) on x64, x86 and arm64 (5ebbb80)

  • Comment out dev front urls (314b12d)

  • Delete default value as BaseURL in internal helper api.ts (0401edb)

  • Disable send button during message sending to prevent duplicate submissions (39b838d)

  • Entrypoint url after 2FA at registration point (4ea66fa)

  • Fix hydration error in login (6bd3878)

  • Fix photo update logic in CollectionController (9bdc830)

  • Ingress for Pluto env (3f64f10)

  • Integrate ".webp" to accepted file formats (c78e0a3)

  • LuxStudio's website internal port from 3000 to 3000 (fb7f6c0)

  • Remove unused utility function in register (6d88522)

  • Request POST for request verify account (acfc7a0)

  • Update auto-scroll behavior in chat component to improve user experience (0fc2a91)

  • Update button colors and hover effects for improved UI consistency (e12e2d5)

  • Update Google Forms links for Sentry and Feedback access requests (5b30c88)

  • update role select input styling for better visibility (ef3faa7)

  • Add endpoint to retrieve photo status by ID (e2d27ea)

  • Add GET API route to return SignalR URL (3e4353d)

  • add mention notification feature with email alerts in chat functionality (da47051)

  • Add migrations from LuxStudio v1 to v2 (bec5f68)

  • Add photo status update functionality and enhance UI for status management (bfeba8a)

  • Add PhotoId to ChatMessages and implement photo upload functionality in CollectionDetail (d2d4198)

  • Add user roles and enhance registration process (b8eeb1e)

  • Enhance chat functionality by including photo ID in message handling and notifications (317a4d9)

  • Enhance CollectionsPage with create, update, and delete functionalities (11fabae)

  • Implement Admin functionalities for user and collection management, including user blocking/unblocking and password reset, collections views and activity logs (e9d5282)

  • Implement password reset functionality (7a6d491)

  • implement user invitation modal in CollectionDetail component (67f7f76)

  • Refactor authentication and admin pages to fix warning when build (005ff8b)

  • refactor photo upload to take an additional parameter to override if modified (0368bc1)

  • Update application layout and add user reporting features, improve admin management and reports (05b9c17)

  • update user role assignment logic during registration for admin user (0ed207a)

  • Add RefreshAccessToken method in AuthService to swap for new credentials (8af96db)

  • Add WhoAmIAsync method and refactorisation of AccManagementView (Logic part) (0b572e3)

  • Adds data models and collection service (eff4687)

  • chat functionality and collection handling (70cb704)

  • collection management features (fc140f0)

  • Injects token into WebView2 for authentication (74e0322)

  • LuxStudio export (5b1ba53)

  • Add Mandatory folder (89dc6ac)

  • Add PoC List (33478bb)

  • Start crop box (84f16c1)

    Add the cache system into VaultService & StorageAPI (6ab56d8)

  • View Module README + Caching backups (a9e3aa4)

  • Add secret vars from minio service on LuxAPI (7c234c9)

  • Change from debug message to Console message (a90d118)

  • Correct MinIO console address and environment variable values (ae9ac50)

  • Delete dev-only console.log & debug origin (cors) (69131e1)

  • Enable SSL for bucket connection (21903b3)

  • Rename method in BuildManager part (798648e)

  • Set the final path for published module directory set as "ModuleName.luxmod" (8cda6ad)

  • Specify namespace for luxoria/minio secret (c091a3b)

  • Translate error & return values and fix the asset link for retreival (26b03f0)

  • Translate pages in English and fix API triggering (4eb9b6d)

  • Update error message for invalid CreateCollectionDto (1b8f81f)

  • Update MinIO console address and browser redirect URL (d5f5795)

  • Update MinIO console address to use HTTPS (dd77511)

  • Update MinIO console address to use local path (2a19d82)

  • Update MinIO endpoint to use internal service address (2a2ddc9)

  • Linear gradient, 2 line instead of 3 (4a4a669)

  • Loading curve with default parameters (480587b)

  • Loading curve with default parameters (a529607)

  • Overlay superposition (6158e00)

  • Useless draw who make the current operation always visible even if there is a substract operation over it (290dc08)

  • Implement CollectionExplorer & AssetViewer on LuxFilter (v3) (546aec5)

  • Implement FlagsComponent inside Toolbox Partial View (74db3b5)

  • Integrate sync mechanism (event communication) between LuxFilter & LuxEditor (dd49cf1)

  • Update ingress name from luxstudio-staging to luxstudio-production (37e1037)

  • Update JWT_SECRET to use dynamic value generation (fbcbc45)

  • Implement photo status update functionality and enhance image selection modal (a9fd896)

  • Implement registration confirmation flow with email verification and new route (35e17dc)

  • Refactor collection access management and enhance email invitation system (569da14)

  • Correct kubeconfig parameter name in deploy-to-pluto job (4cb4ce6)

  • Correct resource file path and update create_or_update_resource syntax in deploy-to-pluto job (eb4bd57)

  • Enable kustomize parameter for create_or_update_resource in deploy-to-pluto job (8515e76)

  • Enhance image tag generation message with pipeline number (1fccb8f)

  • Enhance tag injection for API and Studio images in Kustomization to support multiple patterns (a1ab9b5)

  • Inject image tags for API and Studio in deployment configurations (6495c6e)

  • Refactor deploy-to-pluto job to use kustomize for resource updates (9aea55a)

  • Remove action-type from kubernetes/create_or_update_resource in deploy-to-pluto job (92a88e2)

  • Simplify image tag generation and remove pipeline number from message (520f573)

  • Simplify tag injection command for API and Studio images in Kustomization (a1d2e77)

  • Simplify tag injection for API and Studio images in Kustomization (3566c85)

  • Update CircleCI commands to use --environment flag (c70777f)

  • Update CircleCI commands to use --environment-name and --namespace flags for Pluto (9b8ca66)

  • Update deploy-to-pluto job to use Docker executor instead of Kubernetes executor (2691eb5)

  • Update deploy-to-pluto job to use Kubernetes executor and specify environment (548c10a)

  • Update image tag injection for API and Studio in Kustomization (21a3d16)

  • Update image tag injection for API and Studio in Kustomization to use improved regex (bf1195d)

  • Update Ingress name from luxstudio-staging to luxstudio-production (97fe24c)

  • Update parameters for create_or_update_resource in deploy-to-pluto job (91d0408)

  • Update release status commands in deploy-to-pluto job (346e414)

  • Update resource file path for create_or_update_resource in deploy-to-pluto job (8974dff)

  • Update tag injection for API and Studio images to use improved regex pattern (2913da4)

  • Add StopLoginFlow method which allows to terminate the listener process waiting for authentification over web browser (6e15024)

  • Enhance SSO login flow with additional logging for better traceability (a6217f0)

  • Implement ConfigService for managing configuration settings and URL validation (f777d7d)

  • Implement SSOService for handling Single Sign-On logic and authorization flow (9d3369b)

  • Update AuthService with logging and restructure project file (898203d)

  • Update docker-compose and AuthService for external URLs and configuration integration (d1ce664)

  • Update ONNX export script to accept output directory as an argument (c699539)

    Remove push trigger from workflow files (662c4aa)

    refactoring luxeditor for better performances (be16379)

  • refactoring luxeditor for better performances (09593cc)

  • Removing clarity filter (2e0fb2a)

  • Rework Editor Module, removing xaml code for modularity (1452ded)

  • Texture function (d0d6b7b)

  • Using separators between sliders and reorganizing the sliders (8964b47)

  • Using separators between sliders and reorganizing the sliders (e5c446c)

  • Cleanup unused dependencies in LuxImport (d9843df)

  • Correct artifact paths for LuxImport, LuxFilter, LuxEditor, and LuxExport in build workflow (ba1225e)

  • Enhance platform targeting for Luxoria.App build step to include win-arm64 (c155fae)

  • Expand platform matrix to include win-x86 and win-arm64 for build jobs (a4a8215)

  • Refactor DLL renaming steps for LuxImport, LuxFilter, LuxEditor, and LuxExport to use Join-Path for improved path handling (065e7af)

  • Replacing DLLRef by ProjectRef for both Luxoria.GModules & Luxoria.Modules (d97f099)

  • Update artifact paths and rename steps for LuxImport, LuxFilter, LuxEditor, and LuxExport in build workflow (1ecf85a)

  • Update artifact paths for LuxImport, LuxFilter, LuxEditor, and LuxExport in build workflow (991449b)

  • Update artifact paths for LuxImport, LuxFilter, LuxEditor, and LuxExport in build workflow (6c70b31)

  • Update build steps to use 'dotnet build' for LuxImport, LuxFilter, LuxEditor, and LuxExport, and adjust artifact paths (23c5c8d)

  • Update build steps to use 'dotnet publish' for LuxImport, LuxFilter, LuxEditor, and LuxExport (c055bc0)

  • Update build steps to use 'dotnet publish' for LuxImport, LuxFilter, LuxEditor, and LuxExport, and adjust artifact paths (fda3076)

  • Update build workflow to enhance module upload steps and improve comments for clarity (6af42f1)

  • Improve avatar handling and user feedback in registration and collection management (5bdf4c3)

  • update Vite version and add CollectionDetail view (70b3732)

  • Move context declaration for build-and-push job to workflows section (b086199)

  • Rename job from build-images to build-and-push and update logging steps (af1d20b)

  • Rename job from build-local to build-images and update image tag logging (621bb85)

  • Restore imageTag variable format for tagging in Azure Pipelines (214b2d1)

  • Update display name for BuildAndPush stage in Azure Pipelines configuration (0e9447c)

  • Update display name for BuildAndPush stage in Azure Pipelines configuration (0af18c8)

  • Update Docker login command for consistency in username flag usage (e3537e4)

  • Update Dockerfile paths for luxapi and luxstudio in Azure Pipelines configuration (2d896d4)

  • Update FrontEnd__URI and API_URL environment variables for luxapi and luxstudio deployments (673eb81)

  • Update imageTag variable format for consistency in Azure Pipelines (e8aea4c)

  • Update imageTag variable format for consistency in Azure Pipelines (6052948)

  • Update imageTag variable to use Build.BuildId for tagging in Azure Pipelines (c70c2ba)

  • Update imageTag variable to use Build.BuildNumber for consistency in Azure Pipelines (646d314)

  • Update imageTag variable to use Build.SourceVersion for tagging in Azure Pipelines (1f8aa5d)

  • Update imageTag variable to use conditional logic for tagging in Azure Pipelines (31393a4)

  • Update ingress configuration to use luxstudio-service instead of pluto-service (bfa3c60)

  • Update ingress configurations for LuxStudio in Pluto and Saturn namespaces to include TLS settings and cert-manager annotations (bfdd9b0)

  • Update kustomization.yaml to use patches with target for ingress configuration (93a91d5)

  • Update secretName for TLS configuration in luxstudio-ingress (bbe93a1)

  • Update secretName for TLS configuration in luxstudio-ingress (fca2963)

  • Add Docker support with Dockerfile, entrypoint script, and .dockerignore; include config.js for runtime API URL replacement (9a361de)

  • Add luxportal service to Docker Compose; update routing and error handling in Login component (31216ba)

  • Add Minio configuration and implement collection-related models with relationships (524f688)

  • Add starter Azure Pipelines configuration (92e8416)

  • Enhance SystemController to include database connectivity checks and update Docker Compose for improved service configuration (9785604)

  • Implement dynamic image tagging in CircleCI configuration (f9020de)

  • Remove old ingress and configmap configurations; add new deployment and service for LuxStudio in Pluto and Saturn namespaces (67c198f)

  • Update Azure Pipelines configuration for Docker builds; remove unused adminer service from Docker Compose (589580c)

  • Update Dockerfile for specific Node and Nginx versions; add nginx.conf for server configuration; refactor auth services to use dynamic API URLs from appConfig (5dfc019)

  • Export File Naming backend (f1ace86)

  • Export location back-end (1a9fc8d)

  • Export location back-end (7fce05d)

  • Export Pop Up with progress bar and previsualization (af849b8)

  • File Path for assets + color profile + removing broken file format (845c5ba)

  • File Picker in content dialog + content dialog size (a658ef3)

  • Initialisation of the modal using LMGUI (32b1eb7)

  • Lux Export Interface (769e797)

  • Lux Export Interface (e8f7c28)

  • LuxExport refactor from window to modal (e658762)

  • Update counter value on multiple photo export (672312f)

  • Using window instead of modal because of WinUi restrictions (9a8f279)

  • Remove total weight (1.0 => 100) on the PipelineService (13c4db9)

  • Replace Dictionary by ImmutableDictionary (Catalog) in FilterService (0ac9ee7)

  • Upgrade Luxoria.Algorithm.BrisqueScore from 3.0.2.4100 to 3.0.3.4100 (5633377)

  • Create Filtering Status View (LuxFilter.Views.StatusView) (535adb0)

    Add foundation for Importation views part 1/3, 2/3, 3/3 (7b665bc)

  • Add RICollectionRepository system to handle the Recents Imported Collection list (9c176fc)

  • Add the Indexication Log viewer on Indexication view (3/3) (e47182c)

  • Create new buildsystem for LuxImport and Creation of LuxImport 1.0.2 (4df8a00)

  • Create RequestWindowHandleEvent event to retreive Main Window Ptr (f5a34f4)

  • Include Luxoria.SDK nuget instead of Luxoria.SDK.dll (a6cee2f)

  • Update components on Properties view (901fc21)

  • SkiaSharp library (5ebd5cf)

  • Sliders in Editor pannel (3853302)

  • Module in panel integration (0a503e9)

  • Upgrade Modules SDK to include Windows SDK (3d78906)

  • Add EF connection to LuxAPI (8a9e395)

  • Add GitHub Actions workflow for LuxAPI build process (981ee30)

  • Add initial implementation of LuxAPI (b552d7c)

  • Add TailwindCSS + DaisyUI on LuxStudio Portal (2b54396)

  • Add UserId to AuthorizationCode model and implement SSO authorization view (bf5d767)

  • Enhance JWT token generation with user ID and add WhoAmI endpoint for user info retrieval (1579f96)

  • Implement authentication with login and registration views, add router, and configure CORS (3d539c9)

  • Implement JWT authentication and configure Swagger for API security (799c33b)

  • Increase token field size to TEXT for AccessToken and RefreshToken in Token model (9a1e2f3)

  • Initialize Vue 3 + TypeScript + Vite project with basic structure and configuration (909aace)

  • Refactor Token model to use UserId and add RefreshToken model with related functionality (96e9634)

  • Update models to use required properties for better validation; adjust nullable types where necessary (83f82bf)

  • Update package dependencies and add Vue type definitions; enhance router token handling (73350d5)

  • Encapsulate BrisqueAlgorithm inside BrisqueAlgorithm.hpp (ad8272c)

  • Update build workflow to include LuxFilter and merge coverage reports (efaa01d)

  • Update CMake configuration and enhance BRISQUE implementation with error handling (3fa70a2)

  • Set working directory for build and publish steps in LDA workflow (7c1d3c5)

  • Specify runtime identifier for LDA project build in workflow (2dd9a1a)

  • IPipeline.Compute return fscore as double instead of void (b21f8d4)

  • Make ApplyLaplacianKernel function as static (8e3b2ec)

  • Move BitmapWithSize model to its unique file & remove unused model (3df6b1c)

  • Use Multi-Thread in pipeline computation (e384533)

  • Add Resolution Algorithm to Algorithms code-base (9d0cd9d)

  • Add Rust logic functions for LuxFilter (cdf3b36)

  • Increment LuxImport's version from 1.0.0 to 1.0.1 (1c0cd97)

  • Replace buildsystem by one that build the entire solution (2108176)

  • Replace ReadOnlyMemory with SKBitmap (22b893c)

  • Update SonarCloud analysis job name in CI workflow for Luxoria (adfe133)

  • Update SonarCloud analysis step in CI workflow for Luxoria.App (518c53b)

  • Create Luxoria.App graphical architecture (a21021a)

  • LuxConfigRepository read Guid from json file (b411639)

  • Move 'LuxVersion' inside Luxoria.Modules.Models namespace (df154d4)

  • Optimization of Index function in ImportService (dc51033)

  • Rename LuxAsset.Config to LuxAsset.MetaData (ba148c9)

  • Add Load Image bitmap using SixLabors.ImageSharp lib (92a655f)

  • Adding LuxCFG creation processus in indexication process (b70b685)

  • Change mono-thread to multi-threads indexation process (5983b22)

  • Close modal when importation is completed or has failed (8dd21e7)

  • Refactor module loading logic in App.xaml.cs to load from directories with logging for missing modules. (5b51c0c)

  • Upgrade 'LuxImport' solution to .NET 9.0 (53afe91)

  • Update README.md and package-lock.json (549f988)

    add modular-arch (Luxoria.App) into main Luxoria repository (c39fa25)

  • Add UnitTest base (c5688eb)

  • Create a second module called TestModule2 (7603f00)

  • fix GitHub Actions workflow for building and packaging Luxoria.App (819ce3b)

  • fix GitHub Actions workflow for detecting Q&A / SAST (42f5068)

  • Fix ModuleServiceTests to include logger service in initialization (fb2a32e)

  • Install dotnet-coverage globally and configure OpenCover reports (b2a116c)

  • Refactor project structure and ignore files (eefc7aa)

  • Update release workflow to only build for x64 platform (143f418)

  • Update test command in build workflow (a4b3959)

  • Update test command in build workflow (f2d9170)

  • add gitignore and husky configuration files (f9e0f71)

  • Add links to download, documentation, and contribute in README.md (b2c587e)

  • Add Luxoria Documentation (3bf3421)

  • add publish profiles inside repository (1426a90)

  • fix ci/cd Build and analyze step (9579291)

  • fix ci/cd Build and analyze step (198b0c5)

  • fix ci/cd build part by specifying target build name (05d9c01)

  • fix download link in README.md (f3cb3af)

  • fix exclude some files from SonarQube Analyze (d86d1d0)

  • fix Luxoria README.md and add documentation (a6f5cfd)

  • fix publisher profile name to "Luxoria Project" (1df3600)

  • update SonarQube project badges URLs (2d5a6f0)

  • 8443ff3
    1.72.2
    d15d454
    1.72.1
    7820743
    1.72.0
    ec3437b
    df1c9de
    18aa3df
    ee6f657
    1.71.4
    1fbc4e0
    1.71.3
    7ef3832
    1.71.2
    a364372
    1.71.1
    e9b1688
    1.71.0
    edd3148
    423118d
    a1970cc
    1.70.1
    14a9f58
    3fc13cb
    0838790
    e1bae81
    1.70.0
    6dac5f6
    34542e0
    1.69.1
    9c87a32
    1.69.0
    d6e6797
    de9d3f7
    9657cd2
    abe9109
    28b9108
    a8f3e43
    78c3e4c
    1.68.0
    770de6e
    1.67.3
    c29ad7e
    1.67.2
    890861d
    1.67.1
    86135c8
    88bbbbc
    1.67.0
    d95ddfa
    72bc330
    72bf975
    d42bdc9
    df19121
    1.66.2
    32e029c
    1.66.1
    1b9ff0c
    1.66.0
    8b3178f
    634696d
    0b7305e
    1.65.6
    85ff917
    1.65.5
    25f4aa6
    1.65.4
    1eb67ce
    1.65.3
    7b491f4
    1.65.2
    6f78f41
    1.65.1
    a4d8c95
    1.65.0
    bbd1b1a
    cfd57c3
    e2ccdb5
    f44d91f
    a2ff75f
    a8c2eb3
    1.64.2
    3b39127
    1.64.1
    f1f18fd
    7fd4110
    1.64.0
    7417a36
    e423c75
    1.63.6
    41f5875
    1.63.5
    5cfd81f
    1.63.4
    a0ab98e
    1.63.3
    629b7f5
    1.63.2
    f15a70e
    1.63.1
    0d57297
    1.63.0
    688ee23
    1.62.0
    1835286
    5804c74
    2fdc532
    4b8111d
    63b348f
    243568f
    1.61.0
    60d13bb
    acb7465
    1.60.0
    15fb87d
    9f4e690
    6c925e9
    4f0d97e
    84d5186
    296d479
    0bbaf5e
    3109839
    1.59.2
    46759f0
    1.59.1
    13dec5f
    1.59.0
    c05d1b1
    1.58.0
    36d3d99
    1.57.2
    c2fdec4
    1.57.1
    b5d1b6f
    1.57.0
    1d9ac50
    eb438f5
    27b34c8
    35c3938
    1.56.1
    7188f8a
    4c45cbe
    d2a563c
    595326a
    1.56.0
    a9e40ad
    a1b9930
    1.55.0
    46df1fe
    17f44e4
    1.54.1
    14af136
    1.54.0
    5a948f8
    fe106e2
    023c95c
    9dc9a29
    6ef9c5e
    066e474
    8957a92
    1.53.1
    468ec76
    1.53.0
    d824aa7
    b9505e8
    1895226
    88fb9c6
    1.52.0
    511b9a6
    1.51.0
    2d760d9
    d2cadb9
    a088aaa
    e4eceed
    d08043e
    1.50.5
    e7e4651
    8610851
    a339e0a
    054d0e0
    1.50.4
    cc54758
    1.50.3
    4ebd0bb
    784189f
    c6e6f76
    c47cfef
    1.50.2
    fc7aed1
    61924fc
    ebd09c3
    1.50.1
    c24343f
    9d1fe1c
    6a07311
    1.50.0
    9d70c9a
    4c205c9
    be8bb5e
    eb7c565
    3ad9391
    1.49.1
    08efc54
    1.49.0
    a6a5ad0
    34404ea
    f70eb1e
    77dead1
    633a6cf
    1.48.1
    359e163
    1.48.0
    aba0ac8
    2ed4d5e
    2978110
    c082dcb
    a30898a
    1.47.0
    0249769
    1.46.5
    6655f1c
    1.46.4
    936ab23
    1.46.3
    2ed7239
    1.46.2
    b423a99
    1.46.1
    3998861
    1.46.0
    004c427
    664e6de
    1.45.1
    a7d4948
    1.45.0
    4417de2
    1.44.1
    42d2e2e
    1.44.0
    78eb71e
    1.43.0
    bb482f2
    1.42.3
    a807a82
    11855bd
    1.42.2
    40f21d8
    1.42.1
    2c62808
    efcf644
    1.42.0
    db389e0
    cefef42
    3db9142
    230c15d
    790e727
    1.41.2
    91970be
    1.41.1
    eb2c6b2
    c581150
    b08670c
    fd1743c
    1.41.0
    6b3fdf3
    358c064
    4d7d93e
    1eca4fa
    1.40.0
    0d9dc7f
    51fcf1f
    15ebb74
    fcee5cc
    9310d16
    9314d84
    1.39.0
    25f507b
    60e78ba
    c7c0dae
    0c7bca0
    97fe659
    1.38.1
    62cb906
    1.38.0
    fe151cb
    a768a03
    93f791d
    2f43ac4
    88f5d80
    3621032
    fbcf683
    d8080b3
    1.37.2
    a026a97
    1.37.1
    7871ef5
    1.37.0
    d89a709
    1f1f74b
    c37b4d9
    5100493
    5bf3d96
    1.36.0
    a5de0a7
    d01f4df
    08a28fa
    6674868
    1.35.0
    5f5242f
    a252502
    95afeff
    8e30189
    1.34.0
    e3d6575
    99e5601
    0fa13c9
    1.33.2
    c88c51e
    9980a28
    68ae0d8
    cfcfaf0
    1.33.1
    24318f8
    170a40d
    e38ad92
    eb5e51e
    1.33.0
    7a9ee7c
    42db9f3
    17accc1
    e308b63
    6bc0db2
    75c1da4
    1.32.1
    d543680
    1.32.0
    9de6552
    c67603f
    a0f628d
    91f90fa
    7107523
    a3dcec3
    6417b1f
    1edf148
    1.31.1
    a868c40
    0935f7c
    b778fd2
    c2e9292
    1.31.0
    c975768
    b0142b5
    12e9b56
    1.30.0
    cb66737
    9b2128c
    458d0dd
    d2b388d
    a277aee
    c8850ef
    9235ed6
    c4d2631
    1.29.1
    c23a1b5
    ac8910a
    18e3ec3
    1.29.0
    cd4e29a
    1.28.0
    2917a6a
    5cbf086
    1.27.0
    8e41e60
    00d0c14
    fbdc533
    6595d5f
    dc97b96
    1ec97e6
    7163528
    f48c0b3
    1.26.0
    902a93e
    f00babb
    9aed874
    269a2cb
    1.25.0
    c0a4697
    13e76fd
    d43fe66
    15b9f8b
    bc1162f
    32f6a1b
    699b91e
    203ed08
    1.24.0
    1dc7292
    02a1844
    7e6c316
    c99de0d
    110ce25
    1.23.0
    c42c718
    1.22.0
    8d1b390
    64602cb
    e9098b8
    1.21.0
    a0771b7
    1.20.0
    5e5ad07
    280581e
    ca45740
    ab8a351
    1.19.0
    bab93d4
    4bca6b0
    1.18.1
    ea3d510
    1.18.0
    672dcb1
    1.17.0
    053216e
    809085c
    9c4f74b
    55c837b
    41a4f9a
    1.16.0
    c14bc04
    4665b5b
    8d8d634
    935b12d
    091bc25
    1.15.0
    30e5889
    d123bd0
    5d6480a
    2c9ac2f
    b1d12d8
    1.14.0
    12c4c7f
    63aa028
    1.13.0
    5469dcb
    1.12.0
    2d5a25c
    c9e2d1f
    1fe57b5
    001b18f
    1ea066a
    f52b935
    296a0b3
    36221d5
    1.11.1
    514101a
    1.11.0
    cead092
    8845ea6
    e01f2a9
    513ec49
    1fd74b0
    af939e2
    313fe5c
    1.10.0
    5132654
    18cf818
    67d12a1
    1ddf2b7
    7de7d16
    1.9.2
    34349cd
    9ccebf4
    1.9.1
    79cfabe
    6ea94b0
    1.9.0
    32edacd
    1b80d05
    3d14a7d
    b36c6aa
    1.8.11
    5ae0ef6
    ba078f9
    3ed16e0
    f0c59c6
    1.8.10
    d68b8f0
    f30794b
    3811bfa
    74df2fc
    1.8.9
    22b4da3
    1.8.8
    0d69964
    1.8.7
    7c51bd1
    1.8.6
    a786685
    1.8.5
    896d18e
    1.8.4
    8e5d6dd
    1.8.3
    e398f25
    1.8.2
    b112f7d
    1.8.1
    ce46ec5
    1.8.0
    e37e995
    1.7.0
    62e2f28
    29c74f5
    dcc6e35
    1.6.0
    9cef3db
    d6c7ff4
    ea3db93
    1.5.0
    5cde3b4
    37faa88
    3b4e41d
    261262e
    1c20676
    2751565
    d29f649
    a90ad41
    1.4.0
    04503c7
    5e06965
    375e61c
    1.3.0
    cb0b650
    1.2.0
    f07d82f
    f43d210
    1.1.0
    04a3fe4
    39fb1b3
    e173f4b
    605e53b
    ac8e80b
    66792ca
    f4ab8fb
    2ac97f6
    7d9047e
    776fa11
    0fd0c4a
    307bfc5
    fabe2e9