<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Joey Cagle</title>
    <description>The latest articles on DEV Community by Joey Cagle (@joey_cagle_d2e309ef398d88).</description>
    <link>https://dev.to/joey_cagle_d2e309ef398d88</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4223268%2Fa26b4d9a-3472-45fa-af36-403bc7fab16e.png</url>
      <title>DEV Community: Joey Cagle</title>
      <link>https://dev.to/joey_cagle_d2e309ef398d88</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/joey_cagle_d2e309ef398d88"/>
    <language>en</language>
    <item>
      <title>Building trail cams that aim themselves: a heat grid from wildlife sightings</title>
      <dc:creator>Joey Cagle</dc:creator>
      <pubDate>Tue, 03 Nov 2026 00:59:05 +0000</pubDate>
      <link>https://dev.to/joey_cagle_d2e309ef398d88/building-trail-cams-that-aim-themselves-a-heat-grid-from-wildlife-sightings-1mop</link>
      <guid>https://dev.to/joey_cagle_d2e309ef398d88/building-trail-cams-that-aim-themselves-a-heat-grid-from-wildlife-sightings-1mop</guid>
      <description>&lt;p&gt;WildFeed (wildfeed.live) streams hunting and fishing live from the field. Most hours, no human is live, so we run PTZ trail cams in South Carolina to keep the woods on screen. A fixed camera keeps pointing at sky, though, after wind, a bump, or someone driving it during a session.&lt;/p&gt;

&lt;p&gt;So we built an "aim director":&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase A: snap-back.&lt;/strong&gt; Every ~2 minutes, if the cam is already live, idle (nobody in the control queue), PTZ-ready, and battery is ≥40% or on external power, it issues return-to-home and logs it to &lt;code&gt;live_aim_corrections&lt;/code&gt;. The hard rule: it never wakes a sleeping cam. Battery is the scarce resource.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase B: learn where the animals are.&lt;/strong&gt; Every time a viewer or the system marks an action on a photo (deer, turkey), we bump an 8×8 heat grid at the photo's center, with 7-day decay and a bonus for dusk and dawn. The director only corrects when "home" is more than 25% away from the heat centroid. On idle, it slowly refreshes home toward the centroid. Owner-set homes always win.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's next:&lt;/strong&gt; soft live-follow, so the cam gently tracks activity, then rolling this out to the other two cams once the pilot proves out.&lt;/p&gt;

&lt;p&gt;Stack: Supabase (Postgres + edge functions &lt;code&gt;partner-control&lt;/code&gt; / &lt;code&gt;live-camera-control&lt;/code&gt;), and a Node relay host running the aim runner next to the camera bridge.&lt;/p&gt;

&lt;p&gt;Curious if anyone has done camera auto-framing on a tight power budget. What would you use instead of a coarse grid?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Watch the cams free, no account: &lt;a href="https://www.wildfeed.live" rel="noopener noreferrer"&gt;https://www.wildfeed.live&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>streaming</category>
      <category>mobile</category>
    </item>
  </channel>
</rss>
