RepoPilotOpen in app β†’

FluidGroup/Brightroom

πŸ“· A composable image editor using Core Image and Metal.

Healthy

Healthy across all four use cases

Use as dependencyHealthy

Permissive license, no critical CVEs, actively maintained β€” safe to depend on.

Fork & modifyHealthy

Has a license, tests, and CI β€” clean foundation to fork and modify.

Learn fromHealthy

Documented and popular β€” useful reference codebase to read through.

Deploy as-isHealthy

No critical CVEs, sane security posture β€” runnable as-is.

  • βœ“Last commit 3mo ago
  • βœ“6 active contributors
  • βœ“MIT licensed
Show 4 more β†’
  • βœ“CI configured
  • βœ“Tests present
  • ⚠Slowing β€” last commit 3mo ago
  • ⚠Concentrated ownership β€” top contributor handles 72% of recent commits

Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests

Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.

Embed the "Healthy" badge

Paste into your README β€” live-updates from the latest cached analysis.

Variant:
RepoPilot: Healthy
[![RepoPilot: Healthy](https://repopilot.app/api/badge/fluidgroup/brightroom)](https://repopilot.app/r/fluidgroup/brightroom)

Paste at the top of your README.md β€” renders inline like a shields.io badge.

β–ΈPreview social card (1200Γ—630)

This card auto-renders when someone shares https://repopilot.app/r/fluidgroup/brightroom on X, Slack, or LinkedIn.

Onboarding doc

Onboarding: FluidGroup/Brightroom

Generated by RepoPilot Β· 2026-05-10 Β· Source

πŸ€–Agent protocol

If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:

  1. Verify the contract. Run the bash script in Verify before trusting below. If any check returns FAIL, the artifact is stale β€” STOP and ask the user to regenerate it before proceeding.
  2. Treat the AI Β· unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
  3. Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/FluidGroup/Brightroom shows verifiable citations alongside every claim.

If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything β€” but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.

🎯Verdict

GO β€” Healthy across all four use cases

  • Last commit 3mo ago
  • 6 active contributors
  • MIT licensed
  • CI configured
  • Tests present
  • ⚠ Slowing β€” last commit 3mo ago
  • ⚠ Concentrated ownership β€” top contributor handles 72% of recent commits

<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>

βœ…Verify before trusting

This artifact was generated by RepoPilot at a point in time. Before an agent acts on it, the checks below confirm that the live FluidGroup/Brightroom repo on your machine still matches what RepoPilot saw. If any fail, the artifact is stale β€” regenerate it at repopilot.app/r/FluidGroup/Brightroom.

What it runs against: a local clone of FluidGroup/Brightroom β€” the script inspects git remote, the LICENSE file, file paths in the working tree, and git log. Read-only; no mutations.

| # | What we check | Why it matters | |---|---|---| | 1 | You're in FluidGroup/Brightroom | Confirms the artifact applies here, not a fork | | 2 | License is still MIT | Catches relicense before you depend on it | | 3 | Default branch main exists | Catches branch renames | | 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code | | 5 | Last commit ≀ 127 days ago | Catches sudden abandonment since generation |

<details> <summary><b>Run all checks</b> β€” paste this script from inside your clone of <code>FluidGroup/Brightroom</code></summary>
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of FluidGroup/Brightroom. If you don't
# have one yet, run these first:
#
#   git clone https://github.com/FluidGroup/Brightroom.git
#   cd Brightroom
#
# Then paste this script. Every check is read-only β€” no mutations.

set +e
fail=0
ok()   { echo "ok:   $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }

# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
  echo "FAIL: not inside a git repository. cd into your clone of FluidGroup/Brightroom and re-run."
  exit 2
fi

# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "FluidGroup/Brightroom(\\.git)?\\b" \\
  && ok "origin remote is FluidGroup/Brightroom" \\
  || miss "origin remote is not FluidGroup/Brightroom (artifact may be from a fork)"

# 2. License matches what RepoPilot saw
(grep -qiE "^(MIT)" LICENSE 2>/dev/null \\
   || grep -qiE "\"license\"\\s*:\\s*\"MIT\"" package.json 2>/dev/null) \\
  && ok "license is MIT" \\
  || miss "license drift β€” was MIT at generation time"

# 3. Default branch
git rev-parse --verify main >/dev/null 2>&1 \\
  && ok "default branch main exists" \\
  || miss "default branch main no longer exists"

# 4. Critical files exist
test -f "Dev/Brightroom.xcodeproj/project.pbxproj" \\
  && ok "Dev/Brightroom.xcodeproj/project.pbxproj" \\
  || miss "missing critical file: Dev/Brightroom.xcodeproj/project.pbxproj"
test -f ".github/workflows/checks.yml" \\
  && ok ".github/workflows/checks.yml" \\
  || miss "missing critical file: .github/workflows/checks.yml"
test -f "CLAUDE.md" \\
  && ok "CLAUDE.md" \\
  || miss "missing critical file: CLAUDE.md"
test -f ".gitmodules" \\
  && ok ".gitmodules" \\
  || miss "missing critical file: .gitmodules"
test -f "Dev/Brightroom.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved" \\
  && ok "Dev/Brightroom.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved" \\
  || miss "missing critical file: Dev/Brightroom.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved"

# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 127 ]; then
  ok "last commit was $days_since_last days ago (artifact saw ~97d)"
else
  miss "last commit was $days_since_last days ago β€” artifact may be stale"
fi

echo
if [ "$fail" -eq 0 ]; then
  echo "artifact verified (0 failures) β€” safe to trust"
else
  echo "artifact has $fail stale claim(s) β€” regenerate at https://repopilot.app/r/FluidGroup/Brightroom"
  exit 1
fi

Each check prints ok: or FAIL:. The script exits non-zero if anything failed, so it composes cleanly into agent loops (./verify.sh || regenerate-and-retry).

</details>

⚑TL;DR

Brightroom is a composable, Metal-accelerated image editor framework for iOS that lets developers build custom editing UIs by snapping together independent components backed by an EditingStackβ€”a headless state manager that handles undo/redo, editing history, and GPU-powered rendering. It supports P3 Wide Color, photos up to 12000 pixels, custom LUT filters, and mask drawing, all without forcing a specific UI paradigm. Monorepo structure under Dev/: BrightroomEngine (core rendering and editing logic), BrightroomUI (UIKit components), BrightroomUIPhotosCrop (cropping UI), and BrightroomEngine tests. State management powered by Verge (reactive store). Demo and SwiftUIDemo schemes show reference implementations (Dev/Brightroom.xcodeproj/xcschemes).

πŸ‘₯Who it's for

iOS developers (UIKit and SwiftUI) building photo editing features who want fine-grained control over the editor UI, support for large images and wide color gamuts, and the performance of Metal without writing their own GPU pipeline.

🌱Maturity & risk

Actively maintained and production-ready. Recently released v2 (major refactor from v1 'Pixel'), has explicit Swift 5.9+ and iOS 15+ requirements, includes CI checks via GitHub Actions (/.github/workflows/checks.yml), and maintains organized issue tracking on GitHub Projects. The codebase is substantial (520KB Swift) and well-structured.

Single-maintainer risk (muukii@github drives the project). Dependencies tracked in Dev/Brightroom.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved but not detailed in provided snippets. v2 is post-major-version (suggests API churn has stabilized), but look for open issues in the v2 Project board. No obvious signs of abandonment; README explicitly asks for CoreImage/Metal professionals, indicating active development.

Active areas of work

v2 is the current active development branch; v1 migration notes exist in README. Built-in UI for PhotosCropRotating is documented. Face detection, masking, and LUT filters are shipped features. The project calls for community help with CoreImage and Metal optimizations, suggesting performance/feature expansion is ongoing.

πŸš€Get running

Clone and open in Xcode 15.2+: git clone https://github.com/FluidGroup/Brightroom.git && cd Dev && open Brightroom.xcodeproj. Select Demo or SwiftUIDemo scheme and run on iOS 15+ simulator or device. Swift Package Manager integration available for consuming projects.

Daily commands: Open Dev/Brightroom.xcodeproj in Xcode 15.2+. Select Demo scheme and press Cmd+R. For SwiftUI demo, select SwiftUIDemo scheme. Run tests via BrightroomEngineTests scheme (Cmd+U).

πŸ—ΊοΈMap of the codebase

  • Dev/Brightroom.xcodeproj/project.pbxproj β€” Master project configuration defining all targets (BrightroomEngine, BrightroomUI, Demo, SwiftUIDemo) and their dependencies; every contributor must understand the module structure.
  • .github/workflows/checks.yml β€” CI/CD pipeline defining build and test validation; critical for understanding merge requirements and supported platforms.
  • CLAUDE.md β€” Repository-specific guidance document that explains core architectural decisions, composable stack design, and developer expectations.
  • .gitmodules β€” Defines git submodule dependencies that are integrated into the build; essential for understanding external library integration.
  • Dev/Brightroom.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved β€” Swift Package Manager dependency lock file pinning all transitive dependencies; critical for reproducible builds.

🧩Components & responsibilities

  • EditingStack (Metal, Core Image, Swift) β€” Headless rendering engine; owns image buffer, effect registry, history state, and Metal rendering pipeline. Decoupled from UI.
    • Failure mode: Memory exhaustion on 12K pixel images; crash if Metal device unavailable on older iOS versions
  • BrightroomEngine module (Swift, Metal, Core Image) β€” Swift Package exposing EditingStack API, filter definitions, color space utilities, and rendering protocols.
    • Failure mode: Undefined behavior if effects applied out-of-order; loss of fidelity if wide-color disabled
  • Brigh β€” undefined

πŸ› οΈHow to make changes

Add a new image processing filter to the engine

  1. Define a new filter effect class conforming to the engine's effect protocol in BrightroomEngine module (Dev/Brightroom.xcodeproj/xcshareddata/xcschemes/BrightroomEngine.xcscheme)
  2. Implement Metal shader or Core Image filter in the filter implementation file (Dev/Brightroom.xcodeproj/project.pbxproj)
  3. Register the filter in the engine's effect registry and expose it through the public API (Dev/Brightroom.xcodeproj/xcshareddata/xcschemes/BrightroomEngine.xcscheme)
  4. Add integration test in BrightroomEngineTests validating filter output on reference images (Dev/Brightroom.xcodeproj/xcshareddata/xcschemes/BrightroomEngineTests.xcscheme)
  5. Create a BrightroomUI component wrapping the filter with parameter controls (Dev/Brightroom.xcodeproj/xcshareddata/xcschemes/BrightroomUI.xcscheme)

Create a custom image editor UI composition

  1. Import EditingStack from BrightroomEngine and initialize with image source (Dev/Brightroom.xcodeproj/xcshareddata/xcschemes/Demo.xcscheme)
  2. Compose UI controllers from BrightroomUI (e.g., crop, filter sliders, mask) as child views (Dev/Brightroom.xcodeproj/xcshareddata/xcschemes/BrightroomUI.xcscheme)
  3. Bind UI controls to EditingStack effects; history is managed automatically (Dev/Brightroom.xcodeproj/project.pbxproj)
  4. Reference the SwiftUI demo for reactive composition patterns with modern bindings (Dev/Brightroom.xcodeproj/xcshareddata/xcschemes/SwiftUIDemo.xcscheme)

Add support for wide-color gamut images (P3)

  1. Update image loading in BrightroomEngine to detect and preserve Display P3 color space (Dev/Brightroom.xcodeproj/xcshareddata/xcschemes/BrightroomEngine.xcscheme)
  2. Ensure Metal render pipeline uses float16 or float32 buffers for P3 precision (Dev/Brightroom.xcodeproj/project.pbxproj)
  3. Add test images with P3 profiles to Dev/Bundle/Images and validate rendering (Dev/Brightroom.xcodeproj/xcshareddata/xcschemes/BrightroomEngineTests.xcscheme)

πŸ”§Why these technologies

  • Metal for rendering β€” GPU-accelerated compositing for real-time preview and support for super-large photos (≀12000px) that would be prohibitively slow on CPU
  • Core Image framework β€” Provides optimized, battle-tested image filters (blur, sharpen, color correction) with Metal backing; avoids reimplementing standard image operations
  • EditingStack (headless architecture) β€” Separates rendering logic from UI, enabling multiple UI implementations (UIKit, SwiftUI) to share the same processing engine and history state
  • Display P3 color gamut support β€” Follows Instagram's wide-color adoption to preserve color fidelity on modern displays and social platforms expecting P3 content
  • Swift Package Manager + Xcode Workspace β€” Modular architecture allowing BrightroomEngine and BrightroomUI to be distributed independently while sharing development workspace

βš–οΈTrade-offs already made

  • Headless EditingStack rather than monolithic editor UI

    • Why: Enables maximum flexibility and composition by application developers
    • Consequence: Higher cognitive load for new users; requires understanding stack-based history and effect composition patterns
  • GPU rendering with Metal over Core Graphics

    • Why: Unlocks real-time performance on large images and complex filter chains
    • Consequence: Higher memory footprint; requires Metal-capable devices; more complex code for fallbacks on older hardware
  • P3 wide-color support by default

    • Why: Future-proofs color accuracy and matches industry trend
    • Consequence: Increased memory and bandwidth requirements; may lose precision on non-P3 displays in edge cases
  • Multi-target structure (Engine, UI, Demos) in single workspace

    • Why: Simplifies coordinated development and testing across layers
    • Consequence: Larger dependency graph; more complex CI configuration; harder to decouple modules later

🚫Non-goals (don't propose these)

  • Video editing (image-only focus)
  • Cloud synchronization or autosave
  • Built-in social media export (delegates to app)
  • Real-time collaboration or multi-user editing
  • Android support (iOS/Swift-only)

πŸͺ€Traps & gotchas

Xcode 15.2+ and Swift 5.9+ are hard requirements (older versions will fail). Metal and Core Image maturity varies by iOS version; targeting iOS 15.0+ means no fallback for older A-series GPUs. Large photo support (up to 12000px) requires careful memory management on older devicesβ€”test on iPhone 12 or older before shipping. Wide color (P3) rendering requires explicit color space handling in Core Image filters; naive RGB filters may produce unexpected results. EditingStack state is managed by Verge; unfamiliarity with reactive unidirectional architectures will cause confusionβ€”review Verge docs before modifying state flow.

πŸ—οΈArchitecture

πŸ’‘Concepts to learn

  • Metal GPU Programming β€” Brightroom's core rendering pipeline uses Metal shaders and compute pipelines instead of CPU-based Core Image filters alone; you must understand GPU memory management, render passes, and command buffers to optimize or extend rendering
  • Core Image Filter Chains β€” Brightroom layers Core Image filters on top of Metal for high-level effects (LUTs, adjustments); understanding CIFilter composition and color spaces is crucial for adding custom filters without breaking P3 wide color support
  • Unidirectional Reactive State Management (Verge) β€” EditingStack manages all editing state via Verge's reactive store pattern; without understanding this, you'll struggle to add new editing modes or handle undo/redo correctly
  • P3 Wide Color Gamut β€” Brightroom explicitly supports P3 color space rendering (mentioned in features); standard sRGB filters will produce incorrect colors on wide-color displays if not properly converted
  • Look-Up Table (LUT) Filtering β€” Brightroom supports custom LUT-based filters for real-time photo adjustments; LUTs are 3D texture lookups that map input RGB to output RGB, enabling efficient film-like color grading
  • Undo/Redo with Editing History Stack β€” EditingStack manages the history of edits and allows undoing/redoing without re-rendering from scratch; understanding how snapshots and mutations are tracked is essential for adding new edit types
  • Component-Based UI Architecture β€” Brightroom's key design principle is composable, standalone components that all talk to a shared EditingStack; this decouples UI from rendering logic and lets you swap UI implementations without touching the engine
  • YPImagePicker/YPImagePicker β€” Alternative iOS image picker/editor with UIKit; good for comparing feature set and architecture decisions against Brightroom's Metal approach
  • Harley-xk/MachineVision β€” Metal-based image processing framework; relevant for understanding GPU acceleration patterns Brightroom relies on
  • VergeGroup/Verge β€” The reactive state management library that powers Brightroom's EditingStack; essential dependency to understand the architecture
  • kylestev/MetalVideoProcessing β€” Metal-based video processing reference; useful for extending Brightroom's rendering pipeline concepts to video if that's a future goal
  • FluidGroup/FluidGroup.github.io β€” Organization documentation site; may contain additional context on Brightroom design decisions and team practices

πŸͺ„PR ideas

To work on one of these in Claude Code or Cursor, paste: Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.

Add comprehensive unit tests for BrightroomEngineTests scheme

The repo has a BrightroomEngineTests.xcscheme defined but there's no visible test directory structure in the file listing. Given that Brightroom is a composable image editor with Core Image and Metal processing pipelines, adding tests for the EditingStack, image rendering, and filter composition would catch regressions early and help new contributors understand the architecture.

  • [ ] Create Tests/ directory structure mirroring Sources/ (e.g., Tests/BrightroomEngine/EditingStackTests.swift)
  • [ ] Add unit tests for EditingStack history management and rendering pipeline
  • [ ] Add tests for Core Image filter composition and Metal rendering paths
  • [ ] Update .github/workflows/checks.yml to run xctest via xcodebuild during CI
  • [ ] Document test coverage targets in CLAUDE.md or README

Add SwiftUI integration tests and documentation for the SwiftUIDemo target

The project has a SwiftUIDemo.xcscheme but no visible test coverage or integration documentation. With the image editor being composable and targeting both UIKit and SwiftUI, adding proper SwiftUI integration tests and example documentation would help contributors understand the SwiftUI API surface and prevent regressions.

  • [ ] Create Tests/BrightroomUI/SwiftUIIntegrationTests.swift with snapshot/UI tests
  • [ ] Add XCUITest targets to verify SwiftUIDemo app behavior (photo selection, editing, export)
  • [ ] Document SwiftUI component integration patterns in CLAUDE.md with code examples
  • [ ] Add test workflow to .github/workflows/checks.yml for SwiftUI targets

Establish test coverage reporting and add missing unit tests for image processing filters

A composable image editor built on Core Image needs robust test coverage for its filter pipeline. There's no visible test configuration, coverage reporting setup, or filter-specific tests. Adding this infrastructure would improve code quality and help new contributors confidently extend filter functionality.

  • [ ] Create .github/workflows/coverage.yml to generate and report test coverage using xcov or similar
  • [ ] Add Sources/BrightroomEngine/Filters/ unit tests covering brightness, saturation, blur, and custom filter composition
  • [ ] Create a TestHelpers module for image comparison and pixel-level assertion utilities
  • [ ] Document coverage targets (e.g., 80% for core modules) in CONTRIBUTING.md or CLAUDE.md
  • [ ] Add coverage badge to README.md pointing to coverage reports

🌿Good first issues

  • Add Metal performance benchmarks for the rendering pipeline in BrightroomEngine tests (currently no explicit perf tests visible in xcscheme list)
  • Write Swift documentation comments for the public EditingStack API surface (helps onboarding users of the framework and is straightforward contributor task)
  • Create a minimal SwiftUI example in the SwiftUIDemo that demonstrates custom LUT filter loading from a URL, since README mentions remote image support but no example code is visible

⭐Top contributors

Click to expand

πŸ“Recent commits

Click to expand
  • d802d0e β€” Update (muukii)
  • 2685f47 β€” Update workflow (muukii)
  • 653ae76 β€” Fix build with latest verge (#280) (muukii)
  • 257ac3b β€” Update checks.yml (muukii)
  • 165e51c β€” Ignore (muukii)
  • 421e0af β€” Add Sendable conformance to value types (#272) (muukii)
  • 6c327b9 β€” Update CLAUDE.md (muukii)
  • b2b7234 β€” Remove fastlane (#270) (muukii)
  • 06e5556 β€” Remove unused Makefile (#271) (muukii)
  • db5b8e6 β€” CLAUDE.md (#269) (muukii)

πŸ”’Security observations

The Brightroom image editor project demonstrates reasonable security posture as an open-source iOS/macOS framework. No critical vulnerabilities were identified in the visible file structure. However, the analysis is limited by incomplete access to dependency specifications and configuration files. The main recommendations focus on: (1) implementing automated dependency vulnerability scanning in CI/CD pipelines, (2) establishing formal security documentation and disclosure policies, (3) verifying all Git submodules are from trusted sources with pinned commits, and (4) implementing code ownership and review requirements for security-sensitive code paths. The project should maintain vigilance around Core Image and Metal framework usage for potential GPU-related security issues, though these were not directly visible in the provided file listing.

  • Medium Β· Missing Package.resolved Dependency Lock Analysis β€” Dev/Brightroom.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved. The repository uses Swift Package Manager with a Package.resolved file, but without access to the actual dependency specifications, there is a potential risk of using outdated or vulnerable dependencies. The file structure shows Dev/Brightroom.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved exists but contents were not provided for analysis. Fix: 1) Regularly audit dependencies using tools like SwiftSec or Dependabot. 2) Implement automated dependency vulnerability scanning in CI/CD pipeline. 3) Keep all dependencies updated to their latest secure versions. 4) Review the Package.resolved file to identify all transitive dependencies.
  • Low Β· Submodule Usage Without Security Verification β€” .gitmodules. The .gitmodules file indicates the project uses Git submodules. Submodules can introduce security risks if the referenced repositories are compromised, and their commit hashes are not pinned or regularly verified. Fix: 1) Verify all submodule sources are from trusted origins. 2) Pin submodule commits to specific verified versions rather than branches. 3) Implement pre-commit hooks to validate submodule integrity. 4) Document submodule security review process.
  • Low Β· Incomplete Security Documentation β€” Repository root. While a CLAUDE.md file exists (likely for AI context), there is no visible SECURITY.md or security policy documentation. This makes it difficult for security researchers to responsibly disclose vulnerabilities. Fix: 1) Create a SECURITY.md file with responsible disclosure guidelines. 2) Add security contact information for vulnerability reports. 3) Document security best practices for contributors. 4) Include guidelines for reporting security issues privately.
  • Low Β· No Visible CODEOWNERS for Security Accountability β€” Repository root / .github/. A CODEOWNERS file is not evident in the provided file structure, which means there is no clear ownership documentation for critical security-sensitive areas of the codebase. Fix: 1) Create a CODEOWNERS file in .github/ directory. 2) Assign security-critical components to designated maintainers. 3) Require code review from security-aware owners for sensitive changes. 4) Document escalation procedures for security issues.

LLM-derived; treat as a starting point, not a security audit.


Generated by RepoPilot. Verdict based on maintenance signals β€” see the live page for receipts. Re-run on a new commit to refresh.

Healthy signals Β· FluidGroup/Brightroom β€” RepoPilot