A lightweight, privacy-aware Android camera app designed for field data collection
Features • Installation • Nextcloud Setup • Building • Contributing
Linked Camera captures high-quality photos and securely links them to your workflow with optional automatic upload to Nextcloud. Perfect for field researchers, surveyors, inspectors, and anyone collecting data in the field.
Built upon the excellent Open Camera by Mark Harman, Linked Camera extends functionality with seamless Nextcloud integration and field-optimized features while maintaining the same commitment to privacy and open source principles.
- 🌐 Nextcloud Integration: Automatic upload to your own cloud storage
- 📡 Works Offline: Queue photos when WiFi is unavailable, auto-upload when reconnected
- 🔒 Privacy First: No external data transmission except to your configured server
- 📸 Full Camera Control: Manual ISO, shutter speed, focus, white balance
- 🗺️ Geotagging: Embed GPS coordinates and compass direction in photos
- 🎯 Field Ready: Designed for real-world data collection workflows
- 🔓 Open Source: GPL v3 licensed, code available for review and contribution
The standout feature for field data collection workflows.
- ✅ Automatic Upload: Photos upload immediately after capture (when WiFi is available)
- ✅ WiFi-Only Mode: Queue photos when offline, auto-upload when WiFi reconnects
- ✅ Queue Management: Manual control to process pending uploads
- ✅ Auto-Delete: Optionally delete local photos after successful upload to save storage
- ✅ Password Protection: Support for password-protected Nextcloud public shares
- ✅ Background Service: Uploads happen in the background without interrupting workflow
- ✅ Upload Notifications: Real-time feedback on upload status and queue size
- Manual Modes: Full control over ISO, shutter speed, focus distance, white balance
- Advanced Photo Modes:
- HDR (High Dynamic Range)
- Panorama (wide-angle stitching)
- Exposure Bracketing (multiple exposures for HDR processing)
- Focus Bracketing (focus stacking for macro photography)
- Noise Reduction (multi-shot noise reduction)
- Fast Burst (rapid continuous shooting)
- RAW Support: Capture DNG (RAW) images alongside JPEG for maximum editing flexibility
- Image Formats: JPEG, WebP, PNG, Ultra HDR JPEG
- Multiple resolutions including 4K UHD support
- Configurable bitrate and frame rate
- Digital video stabilization
- Slow motion video support
- Video picture profiles (Log, Gamma, REC709, sRGB)
- Audio recording with multiple source options (camcorder, external mic, unprocessed)
- Maximum duration and file size limits
- Video subtitles with GPS and timestamp data
- GPS Coordinates: Store latitude/longitude in photo EXIF data
- Compass Direction: Store GPS compass direction in photos
- Photo Stamping: Overlay date, time, GPS coordinates, and custom text directly on photos
- Location Requirements: Optionally require GPS lock before allowing photo capture
- Customizable Format: Choose coordinate format and units
- Bluetooth LE Remote: Support for Bluetooth remote shutter devices (Kraken)
- Audio Triggers: Take photos via voice command ("cheese") or loud noise detection
- Timer & Repeat Mode: Automated time-lapse photography
- Volume Keys: Use volume buttons to take photos, zoom, or other functions
- Touch to Capture: Tap or double-tap preview to take photo
- Immersive Mode: Hide system UI for distraction-free shooting
- UI Placement: Left-handed or right-handed interface layouts
- On-Screen Information: Customizable display of zoom, ISO, battery, time, angle, GPS, etc.
- Grid & Guides: Rule of thirds, golden ratio, crop guides
- Histogram: RGB or luminance histogram overlay
- Zebra Stripes: Overexposure warning stripes
- Focus Peaking: Highlight in-focus edges for manual focus
The easiest way to install Linked Camera:
Available on the IzzyOnDroid F-Droid repository:
- Go to Releases
- Download the latest APK
- On your Android device:
- Go to Settings → Security → Install unknown apps
- Enable installation for your browser or file manager
- Open the downloaded APK file
- Follow the installation prompts
- Grant required permissions when first opening the app
- Camera (required): To take photos and videos
- Storage/Files (required): To save photos and videos
- Location (optional): Only if using geotagging features
- Bluetooth (optional): Only if using Bluetooth remote control
- Microphone (optional): Only if recording video with audio or using audio triggers
- A Nextcloud server (self-hosted or provider-hosted)
- WiFi connection for initial setup and uploads (if WiFi-only mode is enabled)
- Log into Nextcloud web interface
- Navigate to the folder where you want photos uploaded
- Example:
Photos/Field WorkorDocuments/Survey Data
- Example:
- Create the folder if it doesn't exist
- Click the Share icon (🔗) next to the folder
- Under "Share link", click "Create public link"
- Enable permissions:
- ✅ Check "Allow upload and editing" (critical!)
⚠️ This allows the app to upload files to this folder
- (Optional) Set a password for added security
- Recommended if you're concerned about the share link being discovered
- Copy the share URL
- It will look like:
https://cloud.example.com/index.php/s/AbCdEfGh123456 - Save this URL - you'll need it for the app
- It will look like:
💡 Tip: Use a dedicated folder for camera uploads to keep your photos organized
-
Open Linked Camera
-
Go to Settings:
- Tap the ⚙️ Settings icon
- Navigate to "Linked Camera Settings"
- Tap "Server settings..."
-
Enable Auto-Upload:
- Toggle "Nextcloud Auto-Upload" to ON
-
Enter Share URL:
- Tap "Nextcloud Share URL"
- Paste your share URL from Step 1
- Ensure it includes the full path:
https://cloud.example.com/index.php/s/TOKEN
-
(Optional) Enter Password:
- If you set a password on the share, tap "Share Password (optional)"
- Enter the password exactly as configured in Nextcloud
-
Configure Upload Behavior:
- 📶 "WiFi Only" (recommended): Only upload when connected to WiFi
- When disabled, will use mobile data (use with caution!)
- 🗑️ "Auto-Delete After Upload": Delete local copy after successful upload
- Useful to save device storage
⚠️ Only enable if you're confident uploads are working reliably
- 📶 "WiFi Only" (recommended): Only upload when connected to WiFi
- Take a test photo
- Return to camera view and take a photo
- Check notification area:
- If WiFi is connected: Should see "Photo uploaded to Nextcloud"
- If WiFi is off (with WiFi-only enabled): "Queued for WiFi upload"
- Verify in Nextcloud:
- Open your Nextcloud folder in a web browser
- The photo should appear within a few seconds
- Filename format:
IMG_YYYYMMDD_HHMMSS.jpg
✅ Success! If you see the photo in Nextcloud, your setup is complete!
Photo Captured
↓
WiFi Check → ✅ Connected
↓
Upload to Nextcloud (WebDAV)
↓
✅ Success Notification
↓
(Optional) Delete Local Copy
Photo Captured
↓
WiFi Check → ❌ Not Connected
↓
Add to Upload Queue
↓
"Queued for WiFi upload" Notification
↓
[Later...] WiFi Reconnects → Auto-process Queue
↓
Upload All Queued Photos
↓
✅ Success Notifications
"Upload failed" notification
- Verify the share URL is correct (check for typos)
- Ensure "Allow upload and editing" is enabled on the share
- Check if the Nextcloud server is accessible
- Try opening the share URL in a web browser to verify it works
Photos not uploading automatically
- Check if WiFi is connected (if WiFi-only mode is enabled)
- Verify auto-upload is enabled in settings
- Check if the share password is correct (if set)
- Try manually processing the queue
Large queue not processing
- Connect to a stable WiFi network
- Keep the app open (or in recent apps) during upload
- Check available server storage quota
Camera not starting
- Grant camera permission in Android settings
- Close other camera apps
- Restart the device
GPS location not appearing
- Grant location permission
- Enable device location (GPS)
- Wait for GPS lock (may take a minute outdoors)
- Ensure geotagging is enabled in settings
Bluetooth remote not working
- Grant Bluetooth permissions
- Enable Bluetooth on device
- Ensure remote is in pairing mode
- Try rescanning for devices
- Android Studio (latest stable version)
- Android SDK 35 (target) and SDK 21 (minimum)
- Java Development Kit 17
# Clone the repository
git clone https://github.com/UrbanVue/linked_camera.git
cd linked_camera
# Open in Android Studio
# - File → Open → Select project folder
# Or build from command line
./gradlew assembleRelease- Debug: For development and testing
- Release: For distribution (requires signing)
The APK will be generated in app/build/outputs/apk/
- Configure Nextcloud connection and verify it works
- Enable geotagging (Settings → Location settings)
- Configure photo stamping with your project name
- Take test photos and verify uploads
- Download test photos from Nextcloud to verify GPS data
In the Field:
- Take photos normally - they'll queue automatically
- GPS data embeds automatically (if enabled)
- Check queue count in notification area
- Photos upload when you return to WiFi
Post-Field:
- Connect to WiFi at office/home
- Photos upload automatically from queue
- Verify all uploads in Nextcloud
- Organize and process as needed
- Disable unnecessary on-screen displays (Settings → On screen GUI)
- Use WiFi-only mode (saves battery vs constant mobile data)
- Turn off geotagging if GPS data isn't needed
- Consider enabling auto-delete to reduce storage writes
- Use airplane mode in the field, enable WiFi when ready to upload
- Enable auto-delete if device storage is limited
- Monitor queue size - large queues can use significant storage
- Manually clear queue after verifying uploads: Settings → Process Upload Queue
- Check Nextcloud storage quota regularly
| Mode | Description | Use Case |
|---|---|---|
| Standard | Normal photo capture | General photography |
| HDR | High dynamic range | Scenes with varied lighting |
| Panorama | Wide-angle stitching | Landscapes, site overviews |
| Expo Bracketing | Multiple exposures | HDR post-processing |
| Focus Bracketing | Multiple focus distances | Macro, focus stacking |
| Noise Reduction | Multi-shot NR | Low light conditions |
| Fast Burst | Rapid continuous | Action shots |
- Resolutions: Up to 4K UHD (device-dependent)
- Bitrate Control: 100kbps to 200Mbps
- Frame Rate: Standard, high FPS, slow motion
- Picture Profiles: Standard, Log, Gamma, REC709, sRGB
- Audio: Multiple source options (camcorder, external mic, unprocessed)
- ISO: AUTO, 25-3200+ (device-dependent)
- Shutter Speed: 1/32000s to 30s (device-dependent)
- Focus: Auto, Continuous, Macro, Infinity, Manual
- White Balance: Auto, Daylight, Cloudy, Fluorescent, Incandescent, Manual
- Exposure Compensation: -3 to +3 EV
- Minimum: Android 5.0 (Lollipop, API 21)
- Target: Android 15 (API 35)
- Recommended: Android 8.0+ for best camera features
- Storage: ~20 MB app size
- Camera: Device with camera (front and/or back)
- Optional: GPS for geotagging, Bluetooth for remote control
Q: Is my data sent to any third parties? A: No. Linked Camera only uploads to the Nextcloud server YOU configure. There is no analytics, telemetry, or data collection of any kind.
Q: Can I use this without Nextcloud? A: Yes! Nextcloud upload is completely optional. You can use Linked Camera as a regular camera app.
Q: What happens if I lose internet connection while uploading? A: The current upload will fail, but the photo remains in the queue. It will retry when WiFi reconnects.
Q: Can I upload videos to Nextcloud? A: Currently, only JPEG images are uploaded. Video support may be added in future versions.
Q: Does this work with other cloud services (Dropbox, Google Drive)? A: No, currently only Nextcloud is supported via WebDAV public shares.
Q: Is the GPS location accurate? A: GPS accuracy depends on your device and environmental conditions. Clear sky view provides best accuracy (typically 3-10m).
Q: Can I customize the upload folder structure? A: Photos upload to the root of the configured Nextcloud share folder. You can organize them manually in Nextcloud afterward.
Q: What format are the uploaded photos? A: JPEG format. RAW/DNG files are not uploaded (only stored locally).
We welcome contributions! Whether it's bug reports, feature requests, or code contributions, please engage with the project.
Found a bug or have a feature request?
- Check existing issues
- Create a new issue with:
- Device model and Android version
- Steps to reproduce the issue
- Expected behavior vs actual behavior
- Logs if available (adb logcat)
- Screenshots if applicable
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes
- Test thoroughly on multiple Android versions
- Follow existing code style and conventions
- Commit your changes:
git commit -m 'Add amazing feature' - Push to your branch:
git push origin feature/amazing-feature - Open a Pull Request with:
- Clear description of changes
- Reasoning for the changes
- Any related issue numbers
- Maintain compatibility with Android 5.0+
- Test on both Camera1 and Camera2 APIs
- Preserve privacy-first principles (no analytics/telemetry)
- Follow Material Design guidelines for UI
- Add comments for complex logic
- Update documentation for user-facing changes
This project is licensed under the GNU General Public License v3.0 or later.
Copyright © 2025 UrbanVue B.V.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
See LICENSE for the full license text.
Linked Camera is built upon Open Camera by Mark Harman, which is also licensed under GPL v3. We are grateful for Mark's excellent work on the core camera functionality.
- Developed by: UrbanVue B.V.
- Based on: Open Camera by Mark Harman
- License: GNU GPL v3
- Dependencies:
- AndroidX libraries (Apache License 2.0)
- Google Material Design icons (Apache License 2.0)
Thank you to all contributors who help improve Linked Camera!
- 📖 Documentation: This README and in-app help
- 🐛 Bug Reports: GitHub Issues
- 💡 Feature Requests: GitHub Issues
- 📧 Contact: Create an issue for support
- 🔧 Release build configuration (non-debuggable)
- 🔐 Proper release signing certificate
- 📦 Added Fastlane metadata for F-Droid/IzzyOnDroid
- 🛒 Published on Google Play Store
- 🛒 Published on IzzyOnDroid repository
- 🛒 Initial Google Play Store release
- 🔧 Build improvements and stability fixes
Features:
- ✨ Full Open Camera feature set
- ✨ Nextcloud auto-upload with WiFi queue management
- ✨ Geotagging and photo stamping
- ✨ Field data collection optimizations
- ✨ Privacy-focused design
- ✨ Rebranded as Linked Camera for UrbanVue B.V.
Technical:
- Minimum Android 5.0 (API 21)
- Target Android 15 (API 35)
- Camera2 API support
- WebDAV-based Nextcloud integration
Made with ❤️ for field researchers, surveyors, and data collectors

