Files
docker-configs/linkwarden/data/archives/2/66_readability.json

1 line
19 KiB
JSON
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"title":"","byline":"Written by Tim Moody","dir":null,"lang":null,"content":"<div id=\"readability-page-1\" class=\"page\"><div><div><h2 data-selectable-paragraph=\"\" data-testid=\"storyTitle\" id=\"56b4\">Transform Your WebCam into an IP Camera (for Frigate)</h2><div><a href=\"https://medium.com/@timothydmoody?source=post_page-----8cf50fd749e9--------------------------------\" rel=\"noopener follow\"><div aria-labelledby=\"1\" aria-describedby=\"1\" aria-hidden=\"false\"><p><img data-testid=\"authorPhoto\" loading=\"lazy\" height=\"44\" width=\"44\" src=\"https://miro.medium.com/v2/resize:fill:88:88/1*mIovv0S-cIg0FM642YB2pg.png\" alt=\"Tim Moody\"></p></div></a></div></div><figure><div tabindex=\"0\" role=\"button\"><picture><source type=\"image/webp\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" srcset=\"https://miro.medium.com/v2/resize:fit:640/format:webp/1*V-LqCtlKDnreiGAuEwArbQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*V-LqCtlKDnreiGAuEwArbQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*V-LqCtlKDnreiGAuEwArbQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*V-LqCtlKDnreiGAuEwArbQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*V-LqCtlKDnreiGAuEwArbQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*V-LqCtlKDnreiGAuEwArbQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*V-LqCtlKDnreiGAuEwArbQ.png 1400w\"><source sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" srcset=\"https://miro.medium.com/v2/resize:fit:640/1*V-LqCtlKDnreiGAuEwArbQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*V-LqCtlKDnreiGAuEwArbQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*V-LqCtlKDnreiGAuEwArbQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*V-LqCtlKDnreiGAuEwArbQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*V-LqCtlKDnreiGAuEwArbQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*V-LqCtlKDnreiGAuEwArbQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*V-LqCtlKDnreiGAuEwArbQ.png 1400w\" data-testid=\"og\"><img src=\"https://miro.medium.com/v2/resize:fit:700/1*V-LqCtlKDnreiGAuEwArbQ.png\" role=\"presentation\" loading=\"eager\" height=\"442\" width=\"700\" alt=\"\"></picture></div><figcaption data-selectable-paragraph=\"\">Frigate Mission Control Center Performing “Person Detection”</figcaption></figure><figure><figcaption>Full Video Tutorial from @DataSlayerMedia</figcaption></figure><p data-selectable-paragraph=\"\" id=\"f47e\">One of the configuration inputs for frigate is a valid RTSP stream URL. Unfortunately off-the-shelf web cams dont generate RTSP streams so if we want to use a web cam with our Frigate system well have to generate a valid stream for the service to hook into.</p><h2 data-selectable-paragraph=\"\" id=\"615e\">Download RTSP Simple Server</h2><p data-selectable-paragraph=\"\" id=\"3ab3\">Download the library.</p><pre><span data-selectable-paragraph=\"\" id=\"735d\">wget https://github.com/aler9/rtsp-simple-server/releases/download/v0.16.0/rtsp-simple-server_v0.16.0_linux_amd64.tar.gz</span></pre><p data-selectable-paragraph=\"\" id=\"2198\">Extract the zip.</p><pre><span data-selectable-paragraph=\"\" id=\"44cf\">tar -xzvf rtsp-simple-server_v0.16.0_linux_amd64.tar.gz</span></pre><p data-selectable-paragraph=\"\" id=\"b27d\">Get your machines ip address to expose the server on.</p><pre><span data-selectable-paragraph=\"\" id=\"bf49\">hostname -I</span></pre><p data-selectable-paragraph=\"\" id=\"c834\">Run the server exposing the service on your local ip address and port 554. You can theoretically chose another port if needed and it should work so long as its not already in use.</p><pre><span data-selectable-paragraph=\"\" id=\"98c3\">RTSP_RTSPADDRESS=192.168.X.X:554 ./rtsp-simple-server</span></pre><figure><div tabindex=\"0\" role=\"button\"><picture><source type=\"image/webp\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" srcset=\"https://miro.medium.com/v2/resize:fit:640/format:webp/1*4-CtXG14WzFe43AYTu3SYQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*4-CtXG14WzFe43AYTu3SYQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*4-CtXG14WzFe43AYTu3SYQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*4-CtXG14WzFe43AYTu3SYQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*4-CtXG14WzFe43AYTu3SYQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*4-CtXG14WzFe43AYTu3SYQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*4-CtXG14WzFe43AYTu3SYQ.png 1400w\"><source sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" srcset=\"https://miro.medium.com/v2/resize:fit:640/1*4-CtXG14WzFe43AYTu3SYQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*4-CtXG14WzFe43AYTu3SYQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*4-CtXG14WzFe43AYTu3SYQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*4-CtXG14WzFe43AYTu3SYQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*4-CtXG14WzFe43AYTu3SYQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*4-CtXG14WzFe43AYTu3SYQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*4-CtXG14WzFe43AYTu3SYQ.png 1400w\" data-testid=\"og\"><img src=\"https://miro.medium.com/v2/resize:fit:700/1*4-CtXG14WzFe43AYTu3SYQ.png\" role=\"presentation\" loading=\"lazy\" height=\"159\" width=\"700\" alt=\"\"></picture></div><figcaption data-selectable-paragraph=\"\">RTSP Server listening on port 554</figcaption></figure><p data-selectable-paragraph=\"\" id=\"5938\">So now we have an RTSP server but we need to direct our webcam output to the server.</p><p data-selectable-paragraph=\"\" id=\"227b\">Leaving the above server running. Execute the following command.</p><pre><span data-selectable-paragraph=\"\" id=\"1876\">sudo ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video0 -f rtsp -rtsp_transport tcp rtsp://192.168.XXX.XXX:554/mystream</span></pre><p data-selectable-paragraph=\"\" id=\"ab06\">You can tweak these settings like framerate and others.</p><p data-selectable-paragraph=\"\" id=\"dc2b\">The server should acknowledge the stream.</p><figure><div tabindex=\"0\" role=\"button\"><picture><source type=\"image/webp\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" srcset=\"https://miro.medium.com/v2/resize:fit:640/format:webp/1*PPh-lJXXut-QkOEPtK5B0g.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*PPh-lJXXut-QkOEPtK5B0g.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*PPh-lJXXut-QkOEPtK5B0g.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*PPh-lJXXut-QkOEPtK5B0g.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*PPh-lJXXut-QkOEPtK5B0g.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*PPh-lJXXut-QkOEPtK5B0g.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*PPh-lJXXut-QkOEPtK5B0g.png 1400w\"><source sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" srcset=\"https://miro.medium.com/v2/resize:fit:640/1*PPh-lJXXut-QkOEPtK5B0g.png 640w, https://miro.medium.com/v2/resize:fit:720/1*PPh-lJXXut-QkOEPtK5B0g.png 720w, https://miro.medium.com/v2/resize:fit:750/1*PPh-lJXXut-QkOEPtK5B0g.png 750w, https://miro.medium.com/v2/resize:fit:786/1*PPh-lJXXut-QkOEPtK5B0g.png 786w, https://miro.medium.com/v2/resize:fit:828/1*PPh-lJXXut-QkOEPtK5B0g.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*PPh-lJXXut-QkOEPtK5B0g.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*PPh-lJXXut-QkOEPtK5B0g.png 1400w\" data-testid=\"og\"><img src=\"https://miro.medium.com/v2/resize:fit:700/1*PPh-lJXXut-QkOEPtK5B0g.png\" role=\"presentation\" loading=\"lazy\" height=\"145\" width=\"700\" alt=\"\"></picture></div></figure><p data-selectable-paragraph=\"\" id=\"ef9e\">We now have a valid RTSP stream routing our web cam feed into.</p><p data-selectable-paragraph=\"\" id=\"3a31\">To utilize this stream in frigate we can configure the config.yml file to generate a camera entity with this URL.</p><figure><div tabindex=\"0\" role=\"button\"><picture><source type=\"image/webp\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" srcset=\"https://miro.medium.com/v2/resize:fit:640/format:webp/1*Jwt3qpJveqp_VUvRVataRQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*Jwt3qpJveqp_VUvRVataRQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*Jwt3qpJveqp_VUvRVataRQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*Jwt3qpJveqp_VUvRVataRQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*Jwt3qpJveqp_VUvRVataRQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Jwt3qpJveqp_VUvRVataRQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*Jwt3qpJveqp_VUvRVataRQ.png 1400w\"><source sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" srcset=\"https://miro.medium.com/v2/resize:fit:640/1*Jwt3qpJveqp_VUvRVataRQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*Jwt3qpJveqp_VUvRVataRQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*Jwt3qpJveqp_VUvRVataRQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*Jwt3qpJveqp_VUvRVataRQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*Jwt3qpJveqp_VUvRVataRQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*Jwt3qpJveqp_VUvRVataRQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*Jwt3qpJveqp_VUvRVataRQ.png 1400w\" data-testid=\"og\"><img src=\"https://miro.medium.com/v2/resize:fit:700/1*Jwt3qpJveqp_VUvRVataRQ.png\" role=\"presentation\" loading=\"lazy\" height=\"233\" width=\"700\" alt=\"\"></picture></div><figcaption data-selectable-paragraph=\"\">Frigate config.yml referencing our RTSP stream.</figcaption></figure><p data-selectable-paragraph=\"\" id=\"0273\">Start your frigate instance.</p><figure><div><picture><source type=\"image/webp\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 640px\" srcset=\"https://miro.medium.com/v2/resize:fit:640/format:webp/1*CNMZQmT0ZNc91k3i3KmbmA.gif 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*CNMZQmT0ZNc91k3i3KmbmA.gif 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*CNMZQmT0ZNc91k3i3KmbmA.gif 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*CNMZQmT0ZNc91k3i3KmbmA.gif 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*CNMZQmT0ZNc91k3i3KmbmA.gif 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*CNMZQmT0ZNc91k3i3KmbmA.gif 1100w, https://miro.medium.com/v2/resize:fit:1280/format:webp/1*CNMZQmT0ZNc91k3i3KmbmA.gif 1280w\"><source sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 640px\" srcset=\"https://miro.medium.com/v2/resize:fit:640/1*CNMZQmT0ZNc91k3i3KmbmA.gif 640w, https://miro.medium.com/v2/resize:fit:720/1*CNMZQmT0ZNc91k3i3KmbmA.gif 720w, https://miro.medium.com/v2/resize:fit:750/1*CNMZQmT0ZNc91k3i3KmbmA.gif 750w, https://miro.medium.com/v2/resize:fit:786/1*CNMZQmT0ZNc91k3i3KmbmA.gif 786w, https://miro.medium.com/v2/resize:fit:828/1*CNMZQmT0ZNc91k3i3KmbmA.gif 828w, https://miro.medium.com/v2/resize:fit:1100/1*CNMZQmT0ZNc91k3i3KmbmA.gif 1100w, https://miro.medium.com/v2/resize:fit:1280/1*CNMZQmT0ZNc91k3i3KmbmA.gif 1280w\" data-testid=\"og\"><img src=\"https://miro.medium.com/v2/resize:fit:640/1*CNMZQmT0ZNc91k3i3KmbmA.gif\" role=\"presentation\" loading=\"lazy\" height=\"348\" width=\"640\" alt=\"\"></picture></div><figcaption data-selectable-paragraph=\"\">Frigate Running from a generic webcam</figcaption></figure><p data-selectable-paragraph=\"\" id=\"8844\">Voila!</p><h2 data-selectable-paragraph=\"\" id=\"cea5\">Final Thoughts</h2><p data-selectable-paragraph=\"\" id=\"784f\">Im always happy to answer questions or discuss ideas proposed in my articles. So dont hesitate to reach out to me! 🙌 Also, make sure to <a href=\"https://medium.com/subscribe/@timothydmoody\" rel=\"noopener\"><strong>subscribe</strong></a> or follow to not miss out on new articles.</p><p data-selectable-paragraph=\"\" id=\"3209\"><strong>YouTube</strong>: <a rel=\"noopener ugc nofollow\" href=\"https://www.youtube.com/@DataSlayerMedia\">https://www.youtube.com/@DataSlayerMedia</a></p><p data-selectable-paragraph=\"\" id=\"d034\"><strong>Patreon:</strong> <a rel=\"noopener ugc nofollow\" href=\"https://www.patreon.com/DataSlayer374\">https://www.patreon.com/DataSlayer374</a></p><p data-selectable-paragraph=\"\" id=\"9d62\"><strong>GitHub:</strong> <a rel=\"noopener ugc nofollow\" href=\"https://github.com/dataslayermedia\">https://github.com/dataslayermedia</a></p></div></div>","textContent":"Transform Your WebCam into an IP Camera (for Frigate)Frigate Mission Control Center Performing “Person Detection”Full Video Tutorial from @DataSlayerMediaOne of the configuration inputs for frigate is a valid RTSP stream URL. Unfortunately off-the-shelf web cams dont generate RTSP streams so if we want to use a web cam with our Frigate system well have to generate a valid stream for the service to hook into.Download RTSP Simple ServerDownload the library.wget https://github.com/aler9/rtsp-simple-server/releases/download/v0.16.0/rtsp-simple-server_v0.16.0_linux_amd64.tar.gzExtract the zip.tar -xzvf rtsp-simple-server_v0.16.0_linux_amd64.tar.gzGet your machines ip address to expose the server on.hostname -IRun the server exposing the service on your local ip address and port 554. You can theoretically chose another port if needed and it should work so long as its not already in use.RTSP_RTSPADDRESS=192.168.X.X:554 ./rtsp-simple-serverRTSP Server listening on port 554So now we have an RTSP server but we need to direct our webcam output to the server.Leaving the above server running. Execute the following command.sudo ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video0 -f rtsp -rtsp_transport tcp rtsp://192.168.XXX.XXX:554/mystreamYou can tweak these settings like framerate and others.The server should acknowledge the stream.We now have a valid RTSP stream routing our web cam feed into.To utilize this stream in frigate we can configure the config.yml file to generate a camera entity with this URL.Frigate config.yml referencing our RTSP stream.Start your frigate instance.Frigate Running from a generic webcamVoila!Final ThoughtsIm always happy to answer questions or discuss ideas proposed in my articles. So dont hesitate to reach out to me! 🙌 Also, make sure to subscribe or follow to not miss out on new articles.YouTube: https://www.youtube.com/@DataSlayerMediaPatreon: https://www.patreon.com/DataSlayer374GitHub: https://github.com/dataslayermedia","length":1994,"excerpt":"","siteName":null}