Skip to main content
Tom Casavant Tom Casavant

Untitled Gaming Social

Follow @MrPresidentTom@ugs.tomkahe.com

Early last year I had built a plugin for Steam Decky Loader that would upload your screenshots to a mastodon-compatible API. My goal was to automatically upload those images to a Pixelfed profile, but I ran into several issues (there was no secure way to store passwords/keys in decky and Pixelfed has a persistent bug I was running into with OAuth) and eventually I just threw it away.

Finally, I have come back to this general idea. But, instead of implementing it in the Steam client, I've instead set up a small ActivityPub server that uses the Steam API to fetch new screenshots and publish them to followers of the account. The server doesn't actually store any image files at the moment so it should be rather lightweight, though this may change in the future.

I'm not sure what this will look like in the future, but I'd like to also find a way to federate achievements on both Steam as well as other gaming platforms. (My current thinking is a Note object with additional fields and an emoji representing the achievement icon? Still working it out)

Current features:

  • Creates an ActivityPub profile with your Steam profile image as the user image.
  • Each profile, when viewed at the original page, should redirect to the user's Steam profile
  • Each screenshot has a corresponding Note object with the image attachment and the game name
  • Maintains a list of followers for the user
  • Every 10 minutes it looks back at the most recent uploaded screenshots via the Steam web API, if there are any new posts it makes a Create activity and shares it with the account's followers
  • (May be removed later) Every 45 minutes it grabs a screenshot from the database, if it hasn't already made a Create activity it will send out that post to all the followers (this is intended to backfill all my previous screenshots)
  • Searching for a post via its Steam URL

Up Next:

  • Add a web frontend
  • Handle Like/Boost activities and display them in the frontend
  • Discoverability tag for profile/posts
  • Steam Achievement Support
  • Retroachievement profile support
  • Ability to follow other users

Longer Term Plans:

  • Multi-user support
  • Some sort of API that lets you share screenshots from games outside of traditional platforms (e.g. upload screenshots from an Android App)
Screenshot of the UGS profile as visible from my Mastodon server.

I wouldn't recommend attempting to build/run it just yet, there's still a lot of work to be done and the database structure is far from finalized but the source code is available under the MIT license up on github. I also have my instance running up on a Linode server at https://ugs.tomkahe.com/, so you should theoretically be able to follow that account from your own instance by searching for @MrPresidentTom@ugs.tomkahe.com.

Source Code

Webmentions

19 Replies

Tom Casavant Tom Casavant

The demo account, which will most assuredly break within minutes of this post is theoretically able to be followed here: @MrPresidentTom source

Tom Casavant Tom Casavant

That demo account is also slowly backfilling screenshots from my account, which, according to my careful calculations, will take like 90 days. Interestingly, the account is from 2012, but it appears I never took a screenshot and uploaded it until I got... source

Nicholas R Nicholas R

@tom @gaming This is what is great about #OpenSource software and protocols like #ActivityPub. In the #network domain there are open protocols such as #BGP #MPLS #OSPF #IS-IS . These protocols enable the global Internet including #Mastodon and... source

Evan Prodromou Evan Prodromou

@tom nice! source

Greg Wiggleton :uni_globe: Greg Wiggleton :uni_globe:

@tom I like that idea. source

Dan Keck Dan Keck

@tom This could fill a niche for sure. Hope the development continues to go well. source

Andy Nicolaides Andy Nicolaides

@tom ooh that sounds awesome. source

Tom Casavant Tom Casavant

@dankeck thanks! source

Tom Casavant Tom Casavant

@evan thanks! source

Andy Piper Andy Piper

@tom Tom! I love this! It is exactly the wrong end of my day for me to dig in to it right now, but I’ll take a look this weekend! source

Tanguy ⧓ Herrmann Tanguy ⧓ Herrmann

@tom saw a screenshot from a game I haven't heard in 2 decades, and now I feel old. God dammit! ???? source

Bob Dendry (Join Our Server!) Bob Dendry (Join Our Server!)

@tom this is such a cool idea - love it! source

Tom Casavant Tom Casavant

@andypiper thanks! It's still a bit janky, but it solves a problem I've had for awhile source

Evan Prodromou Evan Prodromou

@tom In my book I have a whole section about the opportunity of federated game social networking. source

Julian Fietkau Julian Fietkau

@tom Definitely a very cool project! ???? I talked to someone months ago about the possibility of an ActivityPub bridge for Steam and what sorts of sharing functionalities that might enable, but I don't clearly remember who it was. Was it @Natanox? source

silverpill silverpill

@tom @MrPresidentTom@ugs.tomkahe.com doesn't workcurl -H 'Accept: application/ld+json; profile="https://www.w3.org/ns/activitystreams"' https://ugs.tomkahe.com/user/8869bc26-e9f5-4670-85a2-56c272512bd6 Instead of sending ActivityPub actor, the server... source

Tom Casavant Tom Casavant

@silverpill Thanks! Yeah, I was literally just looking at that 5 minutes ago. Yesterday evening I thought I had fixed it to handle ld+json, it was originally only working for application/json, but it seems I actually changed it to redirect both of those.... source

Tom Casavant Tom Casavant

@evan Awesome! I've had your book on my wish-list for awhile now but haven't quite gotten to it yet source

Tom Casavant Tom Casavant

I forgot about the existence of FediTest, fixed up the webfinger issues and @MrPresidentTom seems to work in Pixelfed now FediTest | FediTest source

These are webmentions via the IndieWeb and webmention.io. Mention this post from your site: