{"id":16542237,"url":"https://github.com/estesp/onimage","last_synced_at":"2026-05-12T06:32:28.303Z","repository":{"id":183146443,"uuid":"393067528","full_name":"estesp/onimage","owner":"estesp","description":"image processing daemon for rPi-based weathercam","archived":false,"fork":false,"pushed_at":"2023-07-27T21:51:17.000Z","size":388,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-14T10:18:21.029Z","etag":null,"topics":["camera","rasberry-pi","rasberrypi","weather","weather-station","webcam"],"latest_commit_sha":null,"homepage":"https://kwcam.live","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/estesp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2021-08-05T14:13:34.000Z","updated_at":"2024-10-03T05:38:21.000Z","dependencies_parsed_at":"2024-06-21T16:50:51.646Z","dependency_job_id":"d0f565ae-56ad-42e6-bc34-3e2d4d2326c8","html_url":"https://github.com/estesp/onimage","commit_stats":null,"previous_names":["estesp/onimage"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/estesp%2Fonimage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/estesp%2Fonimage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/estesp%2Fonimage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/estesp%2Fonimage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/estesp","download_url":"https://codeload.github.com/estesp/onimage/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241794136,"owners_count":20021192,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["camera","rasberry-pi","rasberrypi","weather","weather-station","webcam"],"created_at":"2024-10-11T18:56:58.783Z","updated_at":"2026-05-12T06:32:28.258Z","avatar_url":"https://github.com/estesp.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdownlint-disable first-line-h1 no-inline-html --\u003e\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/estesp/onimage/main/docs/logo/on-image-logo-dark-mode-medium.png\"\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/estesp/onimage/main/docs/logo/on-image-logo-medium.png\"\u003e\n  \u003cimg alt=\"Finch logo\" width=40% height=auto src=\"https://raw.githubusercontent.com/estesp/onimage/main/docs/logo/on-image-logo-medium.png\"\u003e\n\u003c/picture\u003e\n\n## An image processing pipeline service for weathercams\n\nOnImage() is a configurable image processing daemon used to handle specific image processing\nsteps to a flow of captured images being generated from a camera. It's specific use is to\nhandle the regular capture of daytime photos from a Raspberry Pi-based weathercam service that\npublishes to an Amazon S3-backed single page website. See [kwcam.live](https://kwcam.live) for\nan operating example of this project.\n\nThis daemon is written in Go and is configurable via a simple TOML configuration file. While\nthe image processing steps are specifically written for the current use case of a webcam\ntaking weather photos at a high frequency (every few minutes), the configuration file abstracts\nall the specifics of AWS accounts/S3 buckets, monitor service (cronitor.io), Weather API service,\nand specific local paths/configuration. It is capable to be operated on a substantial Raspberry\nPi (rpi4 w/8GB RAM is being used today with this code), or it can be run on a separate system\nfrom the IoT or small(er) device taking the photos as long as the photo storage is accessible\nover a filesystem. Prior versions of this software were used with an NFS mount to a much less\npowerful Raspberry Pi taking the photos.\n\nThe core feature set includes:\n - Filesystem-watch based triggering of image processing pipeline\n - Heartbeat monitoring and error/incident reporting to cronitor.io (even with free tier)\n - Weather API w/configurable location and units to overlay images with current temperature\n - Runs `enfuse` against a multi-photo capture using the rPi HQ camera to implement \"poor man's HDR\"\n - Provides simple API endpoint for camera-capture script/device to know when to start/stop\n   taking photos based on sunrise/sunset and, optionally, dark percent of captured photos\n   (for after sunset), which uses the python-based OpenCV2 image model software\n\nThe example TOML configuration in the root of this repository is fully documented to provide\nall the details you need to run OnImage() in your own environment.\n\n### Building\n\nThis is a simple Go project that can be easily built with any recent Go version:\n\n```shell\n$ go build -o onimage .\n```\n\nThis command will produce a binary for your host's OS and architecture. To cross-compile for a\nunique target from your host, use the standard Go environment variable features. For example, to\nbuild `onimage` for a Raspberry Pi you can use:\n\n```shell\n$ GOOS=linux GOARCH=arm64 go build -o onimage .\n```\n\n### Installing\n\nThe `onimage` binary can be installed in the `$PATH` and run as a standalone program. On start, the\nprogram will look in the current directory and `/etc/onimage` for a file named `onimage.toml`. If\nnot found, the program will terminate as the configuration file and its settings are required for\noperation.\n\nA systemd unit would be a good contribution so that `onimage` can be run as a\nservice. A unit file does not exist at this time.\n\n### What else is required to run a weather/webcam site?\n\nIt's probably clear that, by itself, this software daemon will not provide all the required\npieces to have a fully operating single-page website displaying captured photos. This program\nis effectively the heart of a processing pipeline that requires additional pieces and\nconfiguration at both ends of the pipeline.\n\nOn the input side, you need a camera and a capture script or program which writes images\nfrom the camera to a directory on the local filesystem on some periodic interval. This\nsoftware program will expect a certain number of images placed in a specific directory\nstructure to work properly.\n\nOn the website side, you will need to connect the configured S3 bucket to a registered\ndomain which serves up the bucket as public content. There are many helpful guides for\nusing CloudFront and a publicly-readable S3 bucket to create a simple HTTPS website.\n\nLooking for a detailed guide on how to set up these additional pieces? A HOWTO that\ndescribes the exact setup used to operate [kwcam.live](https://kwcam.live)\nis located in this repository at [docs/weathercam-howto.md](/docs/weathercam-howto.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Festesp%2Fonimage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Festesp%2Fonimage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Festesp%2Fonimage/lists"}