2026-05-28 12:17:47 [INFO] scripts.generate_site_data: Generated site_data.json (97 clips, 1400 lifetime detections)
2026-05-28 12:17:47 [INFO] camera.recorder: Generated thumbnail: hummer_20260528_121647_thumb.jpg (240.8 KB)
2026-05-28 12:17:41 [INFO] __main__: TEST MODE — skipping posting for hummer_20260528_121647.mp4
2026-05-28 12:17:41 [INFO] data.sightings: Recorded sighting #1400: hummer_20260528_121647.mp4
2026-05-28 12:17:41 [INFO] analytics.behavior: Behavior classified: feeding
2026-05-28 12:17:41 [INFO] httpx: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"
2026-05-28 12:17:37 [INFO] __main__: Caption saved: hummer_20260528_121647.txt
2026-05-28 12:17:37 [INFO] social.comment_generator: Generated captions: {'Facebook': "I'm sorry, I can't identify or describe the bird from the image.", 'Bluesky': "I'm sorry, I can't identify or describe the bird from the image."}
2026-05-28 12:17:37 [WARNING] social.comment_generator: Failed to parse multi-platform captions, using raw text for all
2026-05-28 12:17:37 [INFO] httpx: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"
2026-05-28 12:17:34 [INFO] social.comment_generator: Sending frame to GPT-4o Vision for caption (detail=low)
2026-05-28 12:17:27 [INFO] __main__: Auto-deleted old clip: hummer_20260525_142615.mp4 (disk cleanup)
2026-05-28 12:17:27 [INFO] __main__: Generating caption for hummer_20260528_121647.mp4...
2026-05-28 12:17:27 [INFO] __main__: Clip queued for posting: hummer_20260528_121647.mp4
2026-05-28 12:17:27 [INFO] camera.recorder: Final clip: hummer_20260528_121647.mp4 (21.2 MB, 807 frames)
2026-05-28 12:17:24 [INFO] camera.recorder: Audio recorded: _audio_20260528_121647.wav (1562.5 KB)
2026-05-28 12:16:59 [INFO] camera.recorder: Recording 25s of post-detection frames...
2026-05-28 12:16:47 [INFO] camera.recorder: Starting audio: arecord -D plughw:1,0 -f S16_LE -r 16000 -c 2 -d 25 /home/pi/LocalHummingBirdCam/clips/_audio_20260528_121647.wav
2026-05-28 12:16:47 [INFO] camera.recorder: Auto-detected USB audio device: hw:1,0 (card 1: camera [USB Live camera], device 0: USB Audio [USB Audio])
2026-05-28 12:16:47 [INFO] camera.recorder: Got 150 pre-detection frames from buffer
2026-05-28 12:16:47 [INFO] __main__: Hummingbird confirmed! Starting recording...
2026-05-28 12:16:47 [INFO] detection.vision_verify: Bird classifier confirmed: colubris (Ruby-throated Hummingbird) (50.0% confidence, 0.10s)
2026-05-28 12:16:47 [INFO] __main__: Cropped verify frame to bbox (0.7469, 0.5375, 0.8281, 0.6667) -> 279x252
2026-05-28 12:16:47 [INFO] __main__: Motion+color triggered — verifying with bird classifier...
2026-05-28 12:16:47 [INFO] detection.motion_color: Hummingbird detected! (10 consecutive frames)
2026-05-28 12:16:46 [INFO] __main__: Bird classifier rejected — skipping recording
2026-05-28 12:16:46 [INFO] detection.vision_verify: Bird classifier rejected — top match: colubris (Ruby-throated Hummingbird) (28.1%), not a hummingbird (0.10s)
2026-05-28 12:16:46 [INFO] __main__: Cropped verify frame to bbox (0.7469, 0.5375, 0.8313, 0.6667) -> 290x252
2026-05-28 12:16:46 [INFO] __main__: Motion+color triggered — verifying with bird classifier...
2026-05-28 12:16:46 [INFO] detection.motion_color: Hummingbird detected! (10 consecutive frames)
2026-05-28 12:16:45 [INFO] __main__: Bird classifier rejected — skipping recording
2026-05-28 12:16:45 [INFO] detection.vision_verify: Bird classifier rejected — top match: background (9.4%), not a hummingbird (0.10s)
2026-05-28 12:16:45 [INFO] __main__: Cropped verify frame to bbox (0.8219, 0.7375, 0.9094, 0.8417) -> 302x203
2026-05-28 12:16:45 [INFO] __main__: Motion+color triggered — verifying with bird classifier...
2026-05-28 12:16:45 [INFO] detection.motion_color: Hummingbird detected! (10 consecutive frames)
2026-05-28 12:13:28 [INFO] scripts.generate_site_data: Generated site_data.json (97 clips, 1399 lifetime detections)
2026-05-28 12:12:27 [INFO] __main__: Bird classifier rejected — skipping recording
2026-05-28 12:12:27 [INFO] detection.vision_verify: Bird classifier rejected — top match: background (85.5%), not a hummingbird (0.11s)
2026-05-28 12:12:27 [INFO] __main__: Cropped verify frame to bbox (0.5563, 0.2625, 0.8688, 0.6708) -> 1080x793
2026-05-28 12:12:27 [INFO] __main__: Motion+color triggered — verifying with bird classifier...
2026-05-28 12:12:27 [INFO] detection.motion_color: Hummingbird detected! (10 consecutive frames)
2026-05-28 12:12:27 [INFO] __main__: Bird classifier rejected — skipping recording
2026-05-28 12:12:27 [INFO] detection.vision_verify: Bird classifier rejected — top match: background (76.6%), not a hummingbird (0.13s)
2026-05-28 12:12:26 [INFO] __main__: Cropped verify frame to bbox (0.5563, 0.2625, 0.8656, 0.6792) -> 1067x810
2026-05-28 12:12:26 [INFO] __main__: Motion+color triggered — verifying with bird classifier...
2026-05-28 12:12:26 [INFO] detection.motion_color: Hummingbird detected! (10 consecutive frames)
2026-05-28 12:12:26 [INFO] __main__: Bird classifier rejected — skipping recording
2026-05-28 12:12:26 [INFO] detection.vision_verify: Bird classifier rejected — top match: background (83.6%), not a hummingbird (0.10s)
2026-05-28 12:12:26 [INFO] __main__: Cropped verify frame to bbox (0.5563, 0.2625, 0.8688, 0.7042) -> 1080x857
2026-05-28 12:12:26 [INFO] __main__: Motion+color triggered — verifying with bird classifier...