A camera application for the COSMIC desktop environment.
This is a personal project by Frederic Laing. 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.
# Install from Flathub
flatpak install flathub io.github.cosmic_utils.camera
# Or install from a downloaded .flatpak bundle
flatpak install camera-x86_64.flatpak- Rust (stable)
- GStreamer 1.0 with plugins (base, good, bad, ugly)
- libwayland
- libxkbcommon
- libinput
- libudev
- libseat
# Install just command runner
cargo install just
# Build release binary
just build-release
# Install to system
sudo just installThe camera application supports several command-line modes for headless operation:
camera # Launch GUI (default)
camera --help # Show help
camera list # List available cameras
camera photo # Take a photo
camera video # Record a video
camera terminal # Terminal mode viewercamera listShows available cameras with their supported formats:
Available cameras:
[0] Laptop Webcam Module (V4L2)
Formats: 1920x1080@30fps, 1280x720@30fps, 640x480@30fps
camera photo [OPTIONS]Options:
-c, --camera <INDEX>- Camera index fromcamera list(default: 0)-o, --output <PATH>- Output file path (default: ~/Pictures/camera/IMG_TIMESTAMP.jpg)
Examples:
camera photo # Quick photo with defaults
camera photo -o ~/snapshot.jpg # Custom output path
camera photo -c 1 # Use second cameracamera video [OPTIONS]Options:
-c, --camera <INDEX>- Camera index fromcamera list(default: 0)-d, --duration <SECONDS>- Recording duration (default: 10)-o, --output <PATH>- Output file path (default: ~/Videos/camera/video_TIMESTAMP.mp4)-a, --audio- Enable audio recording
Examples:
camera video # 10 second video
camera video -d 30 # 30 second video
camera video -d 60 -a # 1 minute with audio
camera video -c 1 -d 30 -o out.mp4 # Camera 1, custom outputPress Ctrl+C to stop recording early.
Ever wanted to see your face rendered in glorious Unicode? Wonder what you'd look like as a half-block character? Well, wonder no more!
camera terminalControls:
s- Switch camera (cycle through available cameras)qorCtrl+C- Return to the real world
Why does this exist?
- SSH into your server and check if you left the oven on (assuming your oven has a camera)
- Finally achieve your dream of becoming ASCII art
- Prove to your coworkers that you can attend video calls from a TTY
- Because we could
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.
# Run with debug logging
just run
# Run with verbose debug logging
just run-debug
# Format code
just fmt
# Run all checks (format, cargo check, tests)
just check
# Run clippy lints
just clippy
# Run tests only
just test# Full install (uninstalls old, installs deps if needed, builds and installs)
just flatpak-install
# Run the installed Flatpak
just flatpak-run
# Uninstall all Flatpak components
just flatpak-uninstall
# Individual steps (if needed)
just flatpak-deps # Install Flatpak SDK/runtime
just flatpak-build # Build and install Flatpak
just flatpak-clean # Remove build artifactsThe exposure controls implementation was inspired by cameractrls, a camera controls GUI for Linux.
Licensed under the GNU Public License 3.0.
Any 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:
// SPDX-License-Identifier: GPL-3.0-only
The 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.
- Open Camera → Settings → "Report a Bug"
- A bug report file will be saved to
~/Pictures/camera/ - Your browser will open the bug report form
- Attach the generated report file and describe the issue
You can also report bugs manually if you prefer.
Have an idea for a new feature? Submit a feature request!

