I built an open source sky camera that Claude Code can actually run. Last night it caught 17 meteors and had them sorted before I woke up.
Claude Code가 직접 운영하는 오픈소스 하늘 관측 카메라를 만들었습니다. 밤새 유성 17개를 찾아 분류했습니다
openskycam은 RTSP 카메라 영상을 로컬 디스크에 저장하고, 탐지 모델과 워크플로를 실행해 유성·비행기 등을 분류하는 오픈소스 시스템입니다. 웹사이트 기능을 API와 MCP 서버로 제공해 Claude Code가 설정과 검토를 맡으며, 작성자는 모델의 재현율이 90%라고 밝혔지만 평가 데이터가 기존 모델의 탐지 결과에 기반한다는 한계도 공개했습니다.
- 주제
에디터 노트
모델의 90% 유성 재현율은 두 모델이 함께 놓친 사례까지 측정한 값이 아닙니다. 작성자 설명에 따르면 7개 보류 야간 자료의 라벨도 이전 모델이 먼저 탐지하고 사람이 승인한 사례에서 나왔습니다. 따라서 수치는 기존 탐지 결과를 새 모델이 얼마나 유지하는지 보여주지만 실제 하늘에서 놓친 유성의 비율을 완전히 검증하지는 않습니다. 다만 작성자는 잘못 거부한 사례를 빈 하늘로 학습하지 않고, 새 모델이 놓친 대상을 이전 모델로 다시 확인하는 절차를 설명했습니다. 짧거나 움직이는 사례를 학습에서 제외하는 규칙과 검토 버킷도 데이터 편향을 줄이려는 장치입니다. 이 프로젝트의 기술적 가치는 모델 점수 하나보다 로컬 영상 저장, 추적과 검토, 데이터셋 관리까지 에이전트가 실행하는 전체 흐름에 있습니다. 실제 탐지 성능을 판단할 때는 작성자도 인정한 공동 미탐 사례와 검토 데이터의 범위가 남는 조건입니다.
AI 요약
openskycam은 하늘을 향한 IP 카메라 영상을 24시간 녹화하고 유성, 비행기, 고정된 빛 등을 자동으로 찾는 오픈소스 프로젝트입니다. Claude Code 같은 에이전트가 설치부터 탐지 워크플로 실행, 결과 검토와 학습 데이터 관리까지 맡도록 API와 MCP 서버를 갖췄습니다.
녹화와 처리 구조
카메라의 RTSP 스트림을 Linux 릴레이가 받아 1분 길이 MP4 파일로 나눕니다. 영상은 재인코딩하지 않고 사용자가 관리하는 디스크에 저장합니다. Cloudflare Workers가 파일을 등록하고 웹사이트와 API를 제공하며, Worker와 저장소는 Cloudflare Tunnel로 연결합니다. 기본 보관 기간은 40일입니다. 영상은 사용자의 디스크에 남고, 저장소에는 macOS 또는 Linux와 대용량 디스크가 필요합니다. 문서에는 4 Mbps 기준 하루 약 43 GB가 필요하다고 적혀 있습니다. 처리기는 macOS의 Apple GPU, Linux의 NVIDIA GPU 또는 CPU에서 실행합니다.
탐지와 검토 워크플로
사용자는 시간 구간에서 프레임을 추출하고 탐지 모델을 실행한 뒤, 종류와 점수, 개수, 시간, 움직임 같은 조건으로 결과를 버킷에 나눌 수 있습니다. 같은 물체에서 나온 탐지 상자를 하나의 트랙으로 연결해 움직임 여부를 분류하고, 비행기와 고정된 빛을 구분하는 데 활용합니다. 검토 화면에서는 한 물체의 여러 프레임을 하나의 목격 사례로 묶고 영상을 먼저 재생합니다. 사용자는 한 번의 입력으로 해당 사례의 사진을 승인하거나 거부할 수 있고, 취소 기능도 사용할 수 있습니다. 검토한 상자를 수정하고 이미지, 라벨, 트랙, 분할 정보를 포함한 데이터셋 버전을 고정할 수도 있습니다.
설치와 에이전트 연동
설치 스크립트는 Cloudflare 로그인, 데이터베이스와 버킷 생성, 저장소 및 릴레이 설치, Worker 배포를 안내합니다. 설정값은 .env에 저장하며, 재실행하면 완료한 단계를 건너뜁니다. --check 옵션은 배포 상태를 검사하고 변경은 하지 않습니다. Cloudflare Tunnel과 로그인 애플리케이션 생성, API 키 발급은 사람이 직접 처리해야 합니다.
웹사이트의 각 기능은 API 호출로 제공되고 /v1/mcp의 MCP 서버에는 웹사이트 작업을 수행하는 도구 7개가 있습니다. 에이전트는 안내 문서와 단계별 기술을 받아 영상 검색과 다운로드, 워크플로 작성 및 실행, 탐지 검토, 데이터셋 고정 등을 수행합니다. 서버는 키 생성 권한을 제한하고 삭제 전에 미리보기와 확인을 요구하며, 최신 버전이 바뀐 뒤의 수정은 덮어쓰지 않고 실패 처리합니다. 도구 호출도 기록합니다. 프로젝트는 AGPL-3.0 라이선스의 night detector 모델을 제공합니다. 작성자는 별도 모델 카드에서 7개 보류 야간 데이터로 평가해 비행기 95%, 유성 90%를 찾았고 별과 고정된 빛의 7%를 오탐으로 표시했다고 밝혔습니다.
Reddit 반응
- @allisonmaybe — 이 자동화를 여러 사람이 함께 구축해 지역이나 도시, 전국 단위로 지도를 만들고 위치를 삼각측량하면 좋겠습니다. 어떤 카메라를 쓰나요?
- @Terrible_Award_2124 — EmpireTech IPC-Color4K-T를 사용합니다. 보안 카메라지만 1/1.2인치 센서라 저조도 성능이 좋습니다. RTSP 카메라라면 대부분 사용할 수 있습니다. 공동 관측망은 꿈꾸던 방향입니다.
- @orchid_drives — 유성이 어디에 떨어지는지 알아낼 기술이 있을까요? ToF나 1마일 떨어진 스테레오 카메라 같은 방법은 어떤가요?
- @Terrible_Award_2124 — 틀릴 수도 있지만 1마일은 너무 가까울 수 있습니다. 유성은 대략 50~75마일 높이에서 빛나기 시작하므로 깊이를 구하려면 카메라 사이 거리가 상당히 필요합니다. 유럽의 FRIPON은 약 50마일 간격으로 카메라를 둡니다. 같은 유성을 두 카메라가 찍으면 전체 궤적을 계산할 수 있습니다. ToF는 그 높이까지 도달하지 못합니다. 땅에 떨어지는 조각을 찾기도 어렵습니다. 2015년 호주의 Desert Fireball Network는 예상 낙하 지점에서 50m 이내의 소금 호수 진흙에서 1.7kg 운석을 찾아냈습니다.
- @Ctbhatia — 승인한 탐지 결과로만 재학습하면 데이터가 조용히 좁아질 수 있습니다. 한 번 거부한 유성은 학습 데이터로 돌아오지 않기 때문입니다. 새 모델로 이전 거부 사례를 다시 검토하나요? 90% 재현율은 고정된 야간 샘플에서 측정했나요?
- @Terrible_Award_2124 — 좋은 지적입니다. 90%는 7개 보류 야간 자료에서 측정했지만 라벨은 이전 모델이 찾은 탐지 결과 중 승인한 사례에서 왔습니다. 따라서 새 모델이 이전 모델이 찾은 것을 유지하는지는 보여주지만 두 모델이 모두 놓친 유성은 보여주지 않습니다. 모델 카드에도 적었습니다. 잘못 거부한 유성을 빈 하늘로 학습시키지는 않습니다. 별이나 고정된 빛처럼 거부가 유지된 사례만 빈 하늘로 학습합니다. 짧게 보이거나 움직이는 사례는 학습에서 제외합니다. 새 모델이 놓친 탐지는 이전 모델로 다시 확인하고 희미한 탐지는 별도 검토 버킷에 둡니다. 사람이 실제로 검토해야 이 과정이 작동합니다.
- @Terrible_Award_2124 — 검토 화면에서는 영상이 먼저 재생되고, 키 하나로 그 물체의 모든 사진을 승인하거나 거부한 뒤 다음 사례로 넘어갑니다. 모델이 잘 학습된 상태라면 밤새 찍힌 영상을 몇 분 안에 검토할 수 있습니다.
원문: Reddit, GitHub / 번역·요약: Trawling