{"id":52216,"date":"2026-04-15T16:34:47","date_gmt":"2026-04-15T16:34:47","guid":{"rendered":"https:\/\/barrycarlyon.co.uk\/wordpress\/?p=52216"},"modified":"2026-04-15T16:50:25","modified_gmt":"2026-04-15T16:50:25","slug":"new-tool-release-bluesky-live","status":"publish","type":"post","link":"https:\/\/barrycarlyon.co.uk\/wordpress\/2026\/04\/15\/new-tool-release-bluesky-live\/","title":{"rendered":"New Tool Release: Bluesky Live"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"840\" height=\"742\" src=\"https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/Bluesky_Logo.svg_.png?resize=840%2C742&#038;ssl=1\" alt=\"Bluesky Logo\" class=\"wp-image-52224\" style=\"aspect-ratio:1.1315036201380704;width:182px;height:auto\" srcset=\"https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/Bluesky_Logo.svg_.png?resize=1024%2C905&amp;ssl=1 1024w, https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/Bluesky_Logo.svg_.png?resize=300%2C265&amp;ssl=1 300w, https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/Bluesky_Logo.svg_.png?resize=768%2C679&amp;ssl=1 768w, https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/Bluesky_Logo.svg_.png?resize=1200%2C1060&amp;ssl=1 1200w, https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/Bluesky_Logo.svg_.png?w=1280&amp;ssl=1 1280w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n<\/div>\n\n\n<p>Somewhat recently Bluesky added the ability to mark\/set yourself as Live on Bluesky and link out from Bluesky to a given service. At the moment that is a short list of services, but includes <a href=\"https:\/\/www.twitch.tv\/\">Twitch<\/a> and <a href=\"https:\/\/stream.place\/\">Stream.place<\/a> among others.<\/p>\n\n\n\n<p>If you were to set yourself as Live manually on Bluesky, you are maxed to 4 hours, so you would need to remember and come back to bump your time or manually remove the status if you ended before 4 hours.<\/p>\n\n\n\n<p>Given <a href=\"https:\/\/docs.bsky.app\/blog\/oauth-atproto\">Bluesky oAuth<\/a> is a thing, and because <a href=\"https:\/\/bsky.app\/settings\/app-passwords\">App Passwords<\/a> are not tooooo much fun with work with IMO, so I built a tool to implement Bluesky oAuth as an adventure in how Bluesky does oAuth (thats likely gonna be a separate post as it&#8217;s pretty interesting and in depth).<\/p>\n\n\n\n<p>I&#8217;m still tweaking\/optimising how my code runs as there are some caching layers that could be added to speed up operations, but I digress!<\/p>\n\n\n\n<p>AND SO via the powers of Twitch oAuth and Twitch eventsub, pair the two services together to do Bluesky Live AUTOMATICALLY! (Anyone using Stream.place it&#8217;s native to the platform)<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/9r75ILTJtiDACKOKoY.webp?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"275\" height=\"252\" src=\"https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/9r75ILTJtiDACKOKoY.webp?resize=275%2C252&#038;ssl=1\" alt=\"MAGIC!\" class=\"wp-image-52222\"\/><\/a><\/figure>\n<\/div>\n\n\n<p>The only drawback is that Bluesky oAuth is a smidge brittle, as outlined in this <a href=\"https:\/\/github.com\/bluesky-social\/atproto\/issues\/4656\">Issue on GitHub I authored<\/a>, even when you have your Client configured as confidential. AND there are not a lot of scopes (basically two&#8230;.), so oAuth has to be a little hungry at the moment.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Well what does it do?<\/h2>\n\n\n\n<p>First of all it handles the 4 hour max issue, by &#8220;bumping&#8221; the expiration time automatically whilst the Twitch channel is live. As well as:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">When you go live on Twitch<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mark your Bluesky as live with a link to your Twitch<\/li>\n\n\n\n<li>Applies your stream title as the title as Bluesky live entry<\/li>\n\n\n\n<li>Applies your stream thumbnail to the Bluesky live entry<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">When you change your Title or Category<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Applies your new stream title as the title as Bluesky live entry<\/li>\n\n\n\n<li>Applies your new stream thumbnail to the Bluesky live entry<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">When you go offline on Twitch<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Delete the live status<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Periodically<\/strong>\/every 15 minutes<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Updates the thumbnail from Twitch to Bluesky<\/li>\n\n\n\n<li>Updates the title from Twitch to Bluesky<\/li>\n\n\n\n<li>Rebump the expire timer<\/li>\n\n\n\n<li>Sanity check and remove the status<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">But wait, there&#8217;s more<\/h2>\n\n\n\n<p>Yes there is MORE!<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/02\/star-wars.gif?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"498\" height=\"280\" src=\"https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/02\/star-wars.gif?resize=498%2C280&#038;ssl=1\" alt=\"Kylo Ren yelling MORE on loop\" class=\"wp-image-52183\"\/><\/a><figcaption class=\"wp-element-caption\">MORE!<\/figcaption><\/figure>\n\n\n\n<p>Since this <a href=\"https:\/\/bluesky.chatbot.barrycarlyon.co.uk\/\">tool<\/a> pairs your Twitch account with a Bluesky Account, when the job runs to maintain Bluesky live status, it can see if you are live elsewhere (manually set or auto set by another service), if that elsewhere is not Twitch then I won&#8217;t overwrite or attempt to manage it.<\/p>\n\n\n\n<p>But, if it IS Twitch, then I&#8217;ll maintain the live status (and the thumbnail), so if you manually marked yourself as live on another channel, the tool will maintain the thumbnail and expire timer till that channel goes offline (or you manually remove it) which is great if you are guesting on another stream, or doing a <a href=\"https:\/\/www.twitch.tv\/directory\/category\/dungeons-and-dragons\">Dungeons and Dragons<\/a> show for example elsewhere on Twitch when it&#8217;s not dual streamed to your own channel.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why 4 Hours<\/h2>\n\n\n\n<p>No idea, but on the upside it does mean that if the oAuth breaks due to the brittleness or other reasons, and the tool cannot write to your Bluesky account any more, the status will self disappear on its own.<\/p>\n\n\n\n<p>Then you just need to reauthenticate to the <a href=\"https:\/\/bluesky.chatbot.barrycarlyon.co.uk\/\">tool<\/a> and away it goes<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ok, let me use it<\/h2>\n\n\n\n<p>You can find the tool over at <a href=\"https:\/\/bluesky.chatbot.barrycarlyon.co.uk\/\">https:\/\/bluesky.chatbot.barrycarlyon.co.uk\/<\/a> and it comes with the bonus of listing who is live using the tool! FREE DISCOVERY!<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"840\" height=\"419\" src=\"https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/image-2.png?resize=840%2C419&#038;ssl=1\" alt=\"\" class=\"wp-image-52229\" srcset=\"https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/image-2.png?resize=1024%2C511&amp;ssl=1 1024w, https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/image-2.png?resize=300%2C150&amp;ssl=1 300w, https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/image-2.png?resize=768%2C383&amp;ssl=1 768w, https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/image-2.png?resize=1200%2C599&amp;ssl=1 1200w, https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/image-2.png?w=1440&amp;ssl=1 1440w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption class=\"wp-element-caption\">Starship Discovery care of <a href=\"https:\/\/memory-alpha.fandom.com\/wiki\/Star_Trek:_Discovery\">https:\/\/memory-alpha.fandom.com\/wiki\/Star_Trek:_Discovery<\/a><\/figcaption><\/figure>\n\n\n\n<p>And yes it works with custom Bluesky handles, like mine <a href=\"https:\/\/bsky.app\/profile\/barrycarlyon.co.uk\">barrycarlyon.co.uk<\/a> and should work with ANY PDS (personal data server).<\/p>\n\n\n\n<p>Support can be found via my Discord, check the site for the invite link down the bottom right, and\/or support the tool via my <a href=\"https:\/\/ko-fi.com\/barrycarlyon\">ko-fi<\/a>! Or drop me a line thru the usual channels.<\/p>\n\n\n\n<p>Free support methods? Well retweet\/repost the <a href=\"https:\/\/x.com\/BarryCarlyon\/status\/2044406849043058850\">Twitter<\/a> or <a href=\"https:\/\/bsky.app\/profile\/barrycarlyon.co.uk\/post\/3mjjxrkiutk2f\">Bluesky<\/a> posts about it! (or the ones about this blog post that I don&#8217;t have the links to yet!)<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/bluesky.chatbot.barrycarlyon.co.uk\/\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"840\" height=\"400\" src=\"https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/image-1.png?resize=840%2C400&#038;ssl=1\" alt=\"\" class=\"wp-image-52226\" srcset=\"https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/image-1-scaled.png?resize=1024%2C488&amp;ssl=1 1024w, https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/image-1-scaled.png?resize=300%2C143&amp;ssl=1 300w, https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/image-1-scaled.png?resize=768%2C366&amp;ssl=1 768w, https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/image-1-scaled.png?resize=1536%2C733&amp;ssl=1 1536w, https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/image-1-scaled.png?resize=2048%2C977&amp;ssl=1 2048w, https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/image-1-scaled.png?resize=1200%2C572&amp;ssl=1 1200w, https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/image-1-scaled.png?w=1680&amp;ssl=1 1680w, https:\/\/i0.wp.com\/barrycarlyon.co.uk\/wordpress\/wp-content\/uploads\/2026\/04\/image-1-scaled.png?w=2520&amp;ssl=1 2520w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/a><figcaption class=\"wp-element-caption\">A screenshot of the Tool showing a handful of live streamers on Twitch whom are using the tool.<\/figcaption><\/figure>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Somewhat recently Bluesky added the ability to mark\/set yourself as Live on Bluesky and link out from Bluesky to a given service. At the moment that is a short list of services, but includes Twitch and Stream.place among others. If you were to set yourself as Live manually on Bluesky, you are maxed to 4 &hellip; <a href=\"https:\/\/barrycarlyon.co.uk\/wordpress\/2026\/04\/15\/new-tool-release-bluesky-live\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;New Tool Release: Bluesky Live&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[396,399,88,45,401,312,139],"tags":[400,82,403,355,171,402,390,313,326],"class_list":["post-52216","post","type-post","status-publish","format-standard","hentry","category-api","category-bluesky","category-code-geekery","category-geekery","category-tools","category-twitch","category-twitter-geekery","tag-bluesky","tag-code","tag-dpop","tag-integrations","tag-oauth","tag-stream-place","tag-tools","tag-twitch","tag-work"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/barrycarlyon.co.uk\/wordpress\/wp-json\/wp\/v2\/posts\/52216","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/barrycarlyon.co.uk\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/barrycarlyon.co.uk\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/barrycarlyon.co.uk\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/barrycarlyon.co.uk\/wordpress\/wp-json\/wp\/v2\/comments?post=52216"}],"version-history":[{"count":10,"href":"https:\/\/barrycarlyon.co.uk\/wordpress\/wp-json\/wp\/v2\/posts\/52216\/revisions"}],"predecessor-version":[{"id":52233,"href":"https:\/\/barrycarlyon.co.uk\/wordpress\/wp-json\/wp\/v2\/posts\/52216\/revisions\/52233"}],"wp:attachment":[{"href":"https:\/\/barrycarlyon.co.uk\/wordpress\/wp-json\/wp\/v2\/media?parent=52216"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/barrycarlyon.co.uk\/wordpress\/wp-json\/wp\/v2\/categories?post=52216"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/barrycarlyon.co.uk\/wordpress\/wp-json\/wp\/v2\/tags?post=52216"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}