{"id":36945611,"url":"https://github.com/cosmic-utils/camera","last_synced_at":"2026-01-29T00:19:52.156Z","repository":{"id":326929316,"uuid":"960022301","full_name":"cosmic-utils/camera","owner":"cosmic-utils","description":"Camera application for the COSMIC™ desktop environment","archived":false,"fork":false,"pushed_at":"2026-01-13T01:21:35.000Z","size":18571,"stargazers_count":22,"open_issues_count":34,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-13T10:53:39.632Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cosmic-utils.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-04-03T18:23:52.000Z","updated_at":"2026-01-08T23:38:23.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/cosmic-utils/camera","commit_stats":null,"previous_names":["freddyfunk/cosmic-camera"],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/cosmic-utils/camera","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cosmic-utils%2Fcamera","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cosmic-utils%2Fcamera/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cosmic-utils%2Fcamera/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cosmic-utils%2Fcamera/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cosmic-utils","download_url":"https://codeload.github.com/cosmic-utils/camera/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cosmic-utils%2Fcamera/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28384014,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T10:34:27.190Z","status":"ssl_error","status_checked_at":"2026-01-13T10:34:26.289Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-13T11:20:11.888Z","updated_at":"2026-01-29T00:19:52.149Z","avatar_url":"https://github.com/cosmic-utils.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Camera\n\n[![Flathub](https://img.shields.io/flathub/v/io.github.cosmic_utils.camera?logo=flathub\u0026logoColor=white)](https://flathub.org/apps/io.github.cosmic_utils.camera)\n[![CI](https://github.com/cosmic-utils/camera/actions/workflows/ci.yml/badge.svg)](https://github.com/cosmic-utils/camera/actions/workflows/ci.yml)\n[![Release](https://github.com/cosmic-utils/camera/actions/workflows/release.yml/badge.svg)](https://github.com/cosmic-utils/camera/actions/workflows/release.yml)\n\nA camera application for the [COSMIC](https://github.com/pop-os/cosmic-epoch) desktop environment.\n\n![Camera Preview](preview/preview-001.png)\n\n[View more screenshots](preview/README.md)\n\n## Status\n\nThis is a personal project by [Frederic Laing](https://github.com/FreddyFunk). It is not affiliated with or endorsed by System76. The application may be contributed to System76 or the COSMIC project in the future if there is interest.\n\n## Installation\n\n### Flatpak (Recommended)\n\n\u003ca href='https://flathub.org/apps/io.github.cosmic_utils.camera'\u003e\u003cimg width='240' alt='Get it on Flathub' src='https://flathub.org/api/badge?svg\u0026locale=en'/\u003e\u003c/a\u003e\n\n```bash\n# Install from Flathub\nflatpak install flathub io.github.cosmic_utils.camera\n\n# Or install from a downloaded .flatpak bundle\nflatpak install camera-x86_64.flatpak\n```\n\n### From Source\n\n#### Dependencies\n\n- Rust (stable)\n- GStreamer 1.0 with plugins (base, good, bad, ugly)\n- libwayland\n- libxkbcommon\n- libinput\n- libudev\n- libseat\n\n#### Build\n\n```bash\n# Install just command runner\ncargo install just\n\n# Build release binary\njust build-release\n\n# Install to system\nsudo just install\n```\n\n## CLI Usage\n\nThe camera application supports several command-line modes for headless operation:\n\n```bash\ncamera              # Launch GUI (default)\ncamera --help       # Show help\ncamera list         # List available cameras\ncamera photo        # Take a photo\ncamera video        # Record a video\ncamera terminal     # Terminal mode viewer\n```\n\n### List Cameras\n\n```bash\ncamera list\n```\n\nShows available cameras with their supported formats:\n\n```\nAvailable cameras:\n\n  [0] Laptop Webcam Module (V4L2)\n      Formats: 1920x1080@30fps, 1280x720@30fps, 640x480@30fps\n```\n\n### Take a Photo\n\n```bash\ncamera photo [OPTIONS]\n```\n\n**Options:**\n- `-c, --camera \u003cINDEX\u003e` - Camera index from `camera list` (default: 0)\n- `-o, --output \u003cPATH\u003e` - Output file path (default: ~/Pictures/camera/IMG_TIMESTAMP.jpg)\n\n**Examples:**\n```bash\ncamera photo                         # Quick photo with defaults\ncamera photo -o ~/snapshot.jpg       # Custom output path\ncamera photo -c 1                    # Use second camera\n```\n\n### Record a Video\n\n```bash\ncamera video [OPTIONS]\n```\n\n**Options:**\n- `-c, --camera \u003cINDEX\u003e` - Camera index from `camera list` (default: 0)\n- `-d, --duration \u003cSECONDS\u003e` - Recording duration (default: 10)\n- `-o, --output \u003cPATH\u003e` - Output file path (default: ~/Videos/camera/video_TIMESTAMP.mp4)\n- `-a, --audio` - Enable audio recording\n\n**Examples:**\n```bash\ncamera video                         # 10 second video\ncamera video -d 30                   # 30 second video\ncamera video -d 60 -a                # 1 minute with audio\ncamera video -c 1 -d 30 -o out.mp4   # Camera 1, custom output\n```\n\nPress `Ctrl+C` to stop recording early.\n\n### Process Images\n\nProcess images through computational photography pipelines.\n\n```bash\ncamera process \u003cMODE\u003e [OPTIONS] \u003cINPUT\u003e...\n```\n\n#### Night Mode\n\nMulti-frame denoising and HDR+ pipeline for low-light photography.\n\n```bash\ncamera process night-mode [OPTIONS] \u003cINPUT\u003e...\n```\n\n**Arguments:**\n- `\u003cINPUT\u003e...` - One or more image files (PNG, DNG) or a directory containing images\n\n**Options:**\n- `-o, --output \u003cDIR\u003e` - Output directory for processed images (default: `\u003cinput\u003e/output` or `~/Pictures/camera`)\n\n**Examples:**\n```bash\ncamera process night-mode /path/to/burst/               # Process all images in directory\ncamera process night-mode img1.png img2.png img3.png    # Process specific files\ncamera process night-mode /path/to/burst/ -o /output/   # Custom output directory\n```\n\nThe pipeline automatically:\n- Selects the sharpest frame as reference\n- Aligns all frames to the reference using GPU-accelerated pyramid alignment\n- Merges frames using FFT-based frequency domain denoising\n- Applies tone mapping with shadow recovery\n- Outputs as DNG\n\n### Terminal Mode (For the Brave)\n\nEver wanted to see your face rendered in glorious Unicode? Wonder what you'd look like as a half-block character? Well, wonder no more!\n\n```bash\ncamera terminal\n```\n\n![Terminal Mode Demo](preview/preview-terminal-demo.gif)\n\n**Controls:**\n- `s` - Switch camera (cycle through available cameras)\n- `q` or `Ctrl+C` - Return to the real world\n\n**Why does this exist?**\n- SSH into your server and check if you left the oven on (assuming your oven has a camera)\n- Finally achieve your dream of becoming ASCII art\n- Prove to your coworkers that you *can* attend video calls from a TTY\n- Because we could\n\n**Note:** Your terminal needs true color support (most modern terminals have this). If you see a sad mosaic of wrong colors, try a different terminal emulator. Also, this won't make you more photogenic - trust us, we tried.\n\n## Development\n\n```bash\n# Run with debug logging\njust run\n\n# Run with verbose debug logging\njust run-debug\n\n# Format code\njust fmt\n\n# Run all checks (format, cargo check, tests)\njust check\n\n# Run clippy lints\njust clippy\n\n# Run tests only\njust test\n```\n\n### Distrobox (Atomic Desktops)\n\nFor development on atomic/immutable desktops (Fedora Silverblue, Kinoite, Bazzite, etc.):\n\n```bash\n# Create the development container\ndistrobox assemble create\n\n# Enter the container\ndistrobox enter camera-dev\n\n# Build inside the container\njust build-release\n\n# Run the binary on the host (not inside distrobox)\n# Camera access via PipeWire requires running on the host\n./target/release/camera\n\n# Remove when no longer needed\ndistrobox rm camera-dev\n```\n\nTo run GUI apps from inside the container, allow local display access on your host:\n\n```bash\nxhost +si:localuser:$USER\n```\n\nAdd this to `~/.distroboxrc` to make it permanent.\n\nNote: Camera access requires PipeWire, which doesn't work reliably from inside containers. Build in distrobox, run on host for full functionality.\n\n### Flatpak Development\n\n```bash\n# Full install (uninstalls old, installs deps if needed, builds and installs)\njust flatpak-install\n\n# Run the installed Flatpak\njust flatpak-run\n\n# Uninstall all Flatpak components\njust flatpak-uninstall\n\n# Individual steps (if needed)\njust flatpak-deps   # Install Flatpak SDK/runtime\njust flatpak-build  # Build and install Flatpak\njust flatpak-clean  # Remove build artifacts\n```\n\n## Acknowledgments\n\nThe exposure controls implementation was inspired by [cameractrls](https://github.com/soyersoyer/cameractrls), a camera controls GUI for Linux.\n\n### Night Mode Feature\n\nThe night mode photo feature implements a simplified version of the HDR+ algorithm, with implementation guidance from:\n\n- **hdr-plus-swift** by Martin Marek ([GitHub](https://github.com/martin-marek/hdr-plus-swift)) - GPL-3.0\n  - Hierarchical pyramid alignment with L1/L2 hybrid cost functions\n  - FFT-based frequency domain merging\n  - Spatial domain merge algorithm\n  - Noise estimation techniques\n\n- **Google HDR+ Paper** - \"Burst photography for high dynamic range and low-light imaging on mobile cameras\" (Hasinoff et al., SIGGRAPH 2016)\n  - [Paper](https://www.hdrplusdata.org/hdrplus.pdf)\n\n- **Night Sight Paper** - \"Handheld Mobile Photography in Very Low Light\" (Liba et al., SIGGRAPH Asia 2019)\n\n## License\n\nLicensed under the [GNU Public License 3.0](https://choosealicense.com/licenses/gpl-3.0).\n\n### Contribution\n\nAny contribution intentionally submitted for inclusion in the work by you shall be licensed under the GNU Public License 3.0 (GPL-3.0). Each source file should have a SPDX copyright notice at the top of the file:\n\n```\n// SPDX-License-Identifier: GPL-3.0-only\n```\n\n### Reporting Bugs\n\nThe easiest way to report a bug is to use the **\"Report a Bug\"** button in the app settings. This generates a detailed system report that helps with debugging.\n\n1. Open Camera → Settings → \"Report a Bug\"\n2. A bug report file will be saved to `~/Pictures/camera/`\n3. Your browser will open the [bug report form](https://github.com/cosmic-utils/camera/issues/new?template=bug_report_from_app.yml)\n4. Attach the generated report file and describe the issue\n\nYou can also [report bugs manually](https://github.com/cosmic-utils/camera/issues/new?template=bug_report.yml) if you prefer.\n\n### Feature Requests\n\nHave an idea for a new feature? [Submit a feature request](https://github.com/cosmic-utils/camera/issues/new?template=feature_request.yml)!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcosmic-utils%2Fcamera","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcosmic-utils%2Fcamera","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcosmic-utils%2Fcamera/lists"}