FluidGroup/Brightroom
π· A composable image editor using Core Image and Metal.
Healthy across all four use cases
Permissive license, no critical CVEs, actively maintained β safe to depend on.
Has a license, tests, and CI β clean foundation to fork and modify.
Documented and popular β useful reference codebase to read through.
No critical CVEs, sane security posture β runnable as-is.
- βLast commit 3mo ago
- β6 active contributors
- βMIT licensed
Show 4 more βShow less
- β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.
[](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:
- 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. - 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.
- 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 |
#!/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).
β‘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
- Define a new filter effect class conforming to the engine's effect protocol in BrightroomEngine module (
Dev/Brightroom.xcodeproj/xcshareddata/xcschemes/BrightroomEngine.xcscheme) - Implement Metal shader or Core Image filter in the filter implementation file (
Dev/Brightroom.xcodeproj/project.pbxproj) - Register the filter in the engine's effect registry and expose it through the public API (
Dev/Brightroom.xcodeproj/xcshareddata/xcschemes/BrightroomEngine.xcscheme) - Add integration test in BrightroomEngineTests validating filter output on reference images (
Dev/Brightroom.xcodeproj/xcshareddata/xcschemes/BrightroomEngineTests.xcscheme) - Create a BrightroomUI component wrapping the filter with parameter controls (
Dev/Brightroom.xcodeproj/xcshareddata/xcschemes/BrightroomUI.xcscheme)
Create a custom image editor UI composition
- Import EditingStack from BrightroomEngine and initialize with image source (
Dev/Brightroom.xcodeproj/xcshareddata/xcschemes/Demo.xcscheme) - Compose UI controllers from BrightroomUI (e.g., crop, filter sliders, mask) as child views (
Dev/Brightroom.xcodeproj/xcshareddata/xcschemes/BrightroomUI.xcscheme) - Bind UI controls to EditingStack effects; history is managed automatically (
Dev/Brightroom.xcodeproj/project.pbxproj) - 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)
- Update image loading in BrightroomEngine to detect and preserve Display P3 color space (
Dev/Brightroom.xcodeproj/xcshareddata/xcschemes/BrightroomEngine.xcscheme) - Ensure Metal render pipeline uses float16 or float32 buffers for P3 precision (
Dev/Brightroom.xcodeproj/project.pbxproj) - 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
πRelated repos
YPImagePicker/YPImagePickerβ Alternative iOS image picker/editor with UIKit; good for comparing feature set and architecture decisions against Brightroom's Metal approachHarley-xk/MachineVisionβ Metal-based image processing framework; relevant for understanding GPU acceleration patterns Brightroom relies onVergeGroup/Vergeβ The reactive state management library that powers Brightroom's EditingStack; essential dependency to understand the architecturekylestev/MetalVideoProcessingβ Metal-based video processing reference; useful for extending Brightroom's rendering pipeline concepts to video if that's a future goalFluidGroup/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
Top contributors
- @muukii β 72 commits
- @shima11 β 15 commits
- @ntnmrndn β 8 commits
- @JohnEstropia β 3 commits
- @andre0805 β 1 commits
πRecent commits
Click to expand
Recent commits
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.
πWhere to read next
- Open issues β current backlog
- Recent PRs β what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals β see the live page for receipts. Re-run on a new commit to refresh.