Raspberry Pi field rig for Pinchard's Island — captures photos from a GoPro HERO3/HERO4 or Pi camera module, uploads to S3, and powers down. Designed for WittyPi boot-once deployments.
The simplicity of the Cloudberry photographs belies the complexity of the solar-powered camera system that makes them possible. A camera affixed to Adam’s family’s cabin on Pinchard’s Island takes the photographs continuously throughout the day and uploads them to the internet via cellular network. Able to control the camera and access the images from anywhere, Adam uses technology to maintain a constant presence in a place that is inaccessible most of the year. In capturing a view that recalls the experience of looking out the cabin’s window, the camera stands in for the photographer. Thus, these photographs constitute a political act: they allow an uninterrupted foothold on a place that was effectively erased when the Canadian government resettled the area shortly after Newfoundland became the country’s 10th province.
Comprised of thousands of photographs, the enormity of the Cloudberry project has inspired Adam to explore a new aspect of the sublime in his work. While other projects have focused on the pursuit of a single majestic photograph, Cloudberry inspires awe through its abundance of quotidian images. The title itself parallels this shift: while it may at first evoke the vast Newfoundland sky, Cloudberry in fact references the indigenous wild berry—colloquially known as a “bakeapple”—that flourishes on the seemingly inhospitable land.
The Cloudberry photographs are at once static and dynamic: though the frame remains exactly the same, the landscape is constantly changing. The enormous variety in the images recalls series of Impressionist paintings that show the same scene in different types of light, in all seasons, and throughout the day. The sky, the ocean, and the terrain in the photographs seem to change more readily than the immutable rocks, but even their appearance eventually transforms as the seasons change. Though Cloudberry highlights the specificity of this particular landscape, it also manifests the familiar desire to connect to one’s homeland not as a relic of the past but as a place that is alive.
- WittyPi powers the Pi on at the scheduled time
scripts/systemd/cloudberry.servicerunscloudberryonce at boot- Capture from GoPro or Pi camera, upload to S3
- Optional
shutdown_afterhalts the Pi until the next wake-up
camera_type |
Hardware |
|---|---|
H4 |
GoPro HERO4 over Wi‑Fi (default for Pinchard's Island) |
H3 |
GoPro HERO3 over Wi‑Fi |
picamera |
Official Raspberry Pi camera module (picamera2) |
git clone https://github.com/adamsimms/cloudberry.git
cd cloudberry
cp .env.example secrets.env
cp config.ini.example config.ini
chmod 600 secrets.env config.ini
# Edit secrets.env and config.ini
./setup.sh
cloudberry --check-config
cloudberryNever commit credentials. Copy .env.example → secrets.env:
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_S3_BUCKETGOPRO_WIFI_PASSWORD(required for H3/H4)GOPRO_MAC_ADDRESS(for H4 wake-on-LAN)
Also supported: ~/.cloudberry/secrets.env or CLOUDBERRY_SECRETS_FILE.
Island Wi‑Fi and GoPro field notes are in docs/field/secrets-reference.md but are not loaded by the app.
| Key | Description |
|---|---|
general.camera_type |
H3, H4, or picamera |
general.take_photo |
GoPro: shoot before downloading (true/false) |
general.delay |
Minutes to wait before capture |
general.shutdown_after |
Halt Pi after success |
gopro.ip |
GoPro IP (default 10.5.5.9) |
See config.ini.example for Pi camera settings (awb_mode, exposure_mode, meter_mode, iso, and image tuning).
cloudberry --check-config
cloudberry --dry-run
cloudberry --retry-failed
cloudberry --shutdown| Step | Resource |
|---|---|
| Install Python deps + optional systemd | ./setup.sh |
| WittyPi + optional shutdown sudoers | ./scripts/wittypi-setup.sh |
| Boot-once schedule | Copy a .wpi from scripts/wittypi/ into WittyPi |
| Systemd service | scripts/systemd/cloudberry.service (installed by setup.sh) |
| GoPro CSI firmware | firmware/ |
| Hardware PDFs and setup logs | docs/field/ |
| Path | Purpose |
|---|---|
cloudberry/ |
Python package (CLI, GoPro, Pi camera, S3) |
docs/ |
Contributor docs, IAM policy, field guides |
firmware/ |
GoPro HERO4 official + CamDo CSI firmware |
scripts/wittypi/ |
WittyPi schedule scripts (.wpi) |
scripts/wittypi-setup.sh |
WittyPi installer + optional shutdown sudoers |
scripts/systemd/ |
Boot-once user service template |
assets/audio/ |
Static audio assets |
We welcome bug fixes, docs improvements, and rig-hardening changes. Start with CONTRIBUTING.md, then open a PR against master.
| Document | Purpose |
|---|---|
| CONTRIBUTING.md | Dev setup, checks, PR expectations |
| SECURITY.md | Vulnerability reporting |
| CHANGELOG.md | Release history |
pip install -e ".[dev]"
python3 -m ruff check .
python3 -m pytest
pre-commit run --all-filesOn a Pi: pip install -e ".[pi]".
MIT — see LICENSE.
Security: see SECURITY.md