<?xml version="1.0" encoding="UTF-8" ?>
 <rss version="2.0"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
 >
<channel>
 <title>Regalia's blog</title>
 <description>If only I liked Writefreely</description>
 <link>https://blog.hellbeast.eu.org</link>
 <lastBuildDate>Thu, 23 Apr 2026 20:29:58 +0000</lastBuildDate>
 <ttl>1800</ttl> <item>
  <title>Github banned me for no understandable reason</title>
  <description>This title is explosive, so I&#x27;ll not bury the lede because I respect your time.  I&#x27;m not a Github power user or anything, but it&#x27;s impossible to not transact with Github for open source projects. # Hints  I had a hint before I got suspended that suggests s</description>
  <content:encoded><![CDATA[
     <!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Github banned me for no understandable reason</title>
    <meta property="og:title" content="Github banned me for no understandable reason" />
    <meta property="og:type" content="article" /> <meta property="og:image" content="/assets/Media/github/flagged.png" />
 <meta property="og:image:url" content="/assets/Media/github/flagged.png" /> <meta property="og:description" content="This title is explosive, so I&#x27;ll not bury the lede because I respect your time.  I&#x27;m not a Github power user or anything, but it&#x27;s impossible to not transact with Github for open source projects. # Hints  I had a hint before I got suspended that suggests s" />
    <link rel="alternate" type="application/rss+xml"
     title="RSS Feed for Regalia's blog"
     href="/feed.xml" />
    <script src="/main.js"></script>
    <script src="/at-date.js"></script>
    <link rel="stylesheet" href="/styles.css">
    <link rel="stylesheet" href="/pygments.css">
  </head>
  <body>
  <nav class="tag-toc"><details><summary>Blogging</summary>
<ul>
<li><a class="toc-link"  href="/Addendum%20to%20Fedi%20fucking%20sucks%20%28as%20a%20minor%29.html">Addendum to Fedi fucking sucks (as a minor)</a></li>
<li><a class="toc-link"  href="/Fedi%20fucking%20sucks%20%28as%20a%20minor%29.html">Fedi fucking sucks (as a minor)</a></li>
<li><a class="toc-link" aria-current="page" href="/Github%20banned%20me%20for%20no%20understandable%20reason.html">Github banned me for no understandable reason</a></li>
<li><a class="toc-link"  href="/My%20Pains%20with%20Firefox%20Sync.html">My Pains with Firefox Sync</a></li>
<li><a class="toc-link"  href="/There%27s%20no%20good%20IM%20-%20Open%20IM%20is%20failing.html">There&#x27;s no good IM - Open IM is failing</a></li>
<li><a class="toc-link"  href="/VRChat%20Video%20Codec%20testing.html">VRChat Video Codec testing</a></li>
<li><a class="toc-link"  href="/index.html">index</a></li>
</ul>
</details>
<ul>
</ul>
  <hr>  <a class="heading heading-1" href="#hints">Hints</a></p>  <a class="heading heading-1" href="#getting-suspended">Getting suspended</a></p>  <a class="heading heading-1" href="#none-is-there-to-help">None is there to help</a></p>  <a class="heading heading-1" href="#the-damage">The damage</a></p>  <a class="heading heading-2" href="#everything-i-did-on-github-is-simply-gone.">Everything I did on Github is simply gone.</a></p>  <a class="heading heading-2" href="#i-don't-have-code-search">I don't have code search</a></p>  <a class="heading heading-2" href="#i-can't-use-github-sponsors">I can't use Github Sponsors</a></p>  <a class="heading heading-2" href="#hacs-depends-on-github-authentication">HACS depends on Github authentication</a></p>  <a class="heading heading-2" href="#i-can't-download-artifacts-or-read-ci-logs">I can't download Artifacts or read CI logs</a></p>  <a class="heading heading-1" href="#reverse-engineering-what-github-might-dislike-about-me">Reverse engineering what Github might dislike about me</a></p>  <a class="heading heading-2" href="#i-wrote-some-adblocker-cosmetic-filters">I wrote some Adblocker cosmetic filters</a></p>  <a class="heading heading-2" href="#adgobye">AdGoBye</a></p>  <a class="heading heading-2" href="#i-made-a-joke-repo-that-reversed-text-order">I made a joke repo that reversed text order</a></p>  <a class="heading heading-1" href="#about-you">About you</a></p>  <hr>  </nav>
  <main class="text" >    <h2>Github banned me for no understandable reason</h2><p><p>This title is explosive, so I'll not bury the lede because I respect your time.</p>
<p>I'm not a Github power user or anything, but it's impossible to not transact with Github for open source projects.</p>
<h1 id="hints">Hints <a href="#hints">#</a></h1>
<p>I had a hint before I got suspended that suggests something might have upset Github, but I didn't get a notification for what was wrong for these either.</p>
<p>When I did code search, occasionally my search would be blocked because my account was &quot;flagged&quot;:<br />
<img src="/assets/Media/github/flagged.png"></p>
<p>And that was weird... and annoying. But surely, Github would send me an email to let me know what's up?</p>
<p>So I don't question it, leave it for weeks, thinking that it'll resolve itself.</p>
<h1 id="getting-suspended">Getting suspended <a href="#getting-suspended">#</a></h1>
<p>And then on April 3rd, I noticed that github.com brings me to the homepage instead of the dashboard, thinking that I simply just had my cookies expire....</p>
<p><img src="/assets/Media/github/suspended.png"></p>
<p>Yep...?</p>
<p>I check my email:<br />
<img src="/assets/Media/github/sponsor_emails.png"></p>
<p>They sure have my right email when it's about money.... They banned me without as much as sending me an eviction notice.</p>
<h1 id="none-is-there-to-help">None is there to help <a href="#none-is-there-to-help">#</a></h1>
<p>The support process is miserable.</p>
<p>Github's entire support is built around the expectation you have an account.</p>
<p>... Including suspensions, that <code>contact support</code> link in the suspension dialog will send you first to <a href="https://support.github.com/contact/reinstatement">https://support.github.com/contact/reinstatement</a>, then to <a href="https://support.github.com/request/landing">https://support.github.com/request/landing</a><br />
Which will ask you to sign into your Github account....</p>
<p><img src="/assets/Media/github/shoddy_support_1.png"></p>
<p>So you go to <code>Can't sign in or don't have an account</code>.</p>
<p>Which brings you this page (that's begging for padding) asking for your email and a captcha.</p>
<p><img src="/assets/Media/github/shoddy_support_2.png"></p>
<p>This gives you a verification code, which allows you to temporarily access to the support dashboard.</p>
<p>For my case, I needed to provide a phone number once I was there (including <em>another</em> captcha):</p>
<p><img src="/assets/Media/github/shoddy_support_3.png"></p>
<p>What does all this <em>friction</em> get you? Getting ghosted for almost a month:<br />
<img src="/assets/Media/github/shoddy_support_4.png"></p>
<p>I know some friends who would be unable to work at their actual jobs if this happened to them.</p>
<p>I started to get impatient at the lack of response, and I was also looking to contribute to a few repositories at that time, so I sent another reply and got nothing back.</p>
<p><img src="/assets/Media/github/shoddy_support_5.png"></p>
<p>I still don't have a reply as of writing.</p>
<h1 id="the-damage">The damage <a href="#the-damage">#</a></h1>
<h2 id="everything-i-did-on-github-is-simply-gone.">Everything I did on Github is simply gone. <a href="#everything-i-did-on-github-is-simply-gone.">#</a></h2>
<p>I don't want this to come off as egoistic, but I have done a good amount of activity on Github. I wrote comments, I filed issues for projects (because I want to make them better).</p>
<p>As of writing, it's simply gone: <a href="https://github.com/regalialong">https://github.com/regalialong</a></p>
<p><a href="https://github.com/lun-4/obsidian2web/commit/bdb5a0164ec3f98a6e8ecf5fa9bb375ad8d769a0">My pull requests are gone too</a>, simply as if they never existed, including all the discussions on why things were written that way.</p>
<p>I can't describe in words to how bad this is, how bad this makes me feel, ego wise and collaboration wise.</p>
<p>Mind you, this is solved, Github moves activity from deleted accounts to the <a href="https://github.com/ghost">ghost</a> account to keep history in tact, but they clearly never do this for suspensions (which would be fine for spam).</p>
<h2 id="i-don't-have-code-search">I don't have code search <a href="#i-don't-have-code-search">#</a></h2>
<p>Github can only get away with this because they hold a majority of the git forge market, but Github allows you to search public code they store globally.</p>
<p>And you know what? This is great! I'd argue this is something that makes me a better developer, if there's a constant I'm uncertain about, or if there's something I'm not sure what the syntax or the structure to code it with is, I can just look it up.</p>
<p>I'm missing this more often than I'd like to admit, and repos themselves you can clone them and grep against them, you're not allowed to code search at all unauthenticated.</p>
<h2 id="i-can't-use-github-sponsors">I can't use Github Sponsors <a href="#i-can't-use-github-sponsors">#</a></h2>
<p>I don't have to go into length for this, <a href="https://github.com/open-source/sponsors">Github Sponsors allows you to donate developers money straight from the platform</a>.</p>
<p>I gave Github my credit card details to support the work that I benefit from, and by extension their platform.</p>
<p><a href="https://github.com/Taiko2k/Tauon">Tauon</a> is my favorite music player and I <em>want</em> to give its developer money as thanks for the work (and you know, so they can afford food and coffee).</p>
<p>Github is at least gracious enough to let you embed <a href="https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/displaying-a-sponsor-button-in-your-repository#about-funding-files">other platforms for supporting devs</a>, but this still sucks for those devs who only take Github.</p>
<h2 id="hacs-depends-on-github-authentication">HACS depends on Github authentication <a href="#hacs-depends-on-github-authentication">#</a></h2>
<p>I use Home Assistant, which is a Smart Home platform thing. Instead of having five million vendor specific hardware devices for managing a Smart Home, HA wants to defeat <a href="https://xkcd.com/927/">xkc 927</a>.</p>
<p>It's great, but the open secret about HA that a lot of the value is also because you can install other community integrations into it.<br />
A cool project to show off as example is <a href="https://github.com/basnijholt/adaptive-lighting">Adaptive Lighting</a>, which adjusts the temperature of your lights based on the sun's position at your location.<br />
But it's also menial work, like bringing not natively (or poorly) supported devices into Home Assistant, <a href="https://github.com/make-all/tuya-local">tuya-local</a> comes to mind.</p>
<p>To install things not shipped by HA, you need to download the <a href="https://www.hacs.xyz/">Home Assistant Community Store</a> (HACS).<br />
But HACS is built entirely on Github, which means their <a href="https://www.hacs.xyz/docs/use/configuration/basic/#to-set-up-the-hacs-integration">app depends entirely on being able to do Github OAuth with your account</a>, <em><strong>including updates</strong></em>.</p>
<p><img src="/assets/Media/github/hacs.png"></p>
<p><img src="/assets/Media/github/hacs_repo.png"></p>
<p>This sucks. I can't get updates. This is unusable for me.</p>
<h2 id="i-can't-download-artifacts-or-read-ci-logs">I can't download Artifacts or read CI logs <a href="#i-can't-download-artifacts-or-read-ci-logs">#</a></h2>
<p>Developers might require you to download a unversioned build from CI so you can test if new changes work.<br />
You can't download artifacts without an account (the link for the file isn't clickable):<br />
<img src="/assets/Media/github/artifacts.png"></p>
<p>Thankfully <a href="https://nightly.link/">https://nightly.link/</a> exists to bypass this issue for developers who care to set it up, but not all developers do, so you're just locked out of downloading builds.</p>
<p>You also can't view CI logs (to prevent spam maybe???) without an account:<br />
<img src="/assets/Media/github/logs.png"></p>
<p>The section to check the logs of the jobs don't expand. You can't even externally help with CI issues that way.......</p>
<h1 id="reverse-engineering-what-github-might-dislike-about-me">Reverse engineering what Github might dislike about me <a href="#reverse-engineering-what-github-might-dislike-about-me">#</a></h1>
<p>I have a few things that might have stepped out of line, and I'm not entirely convinced about any of them since Github hasn't sent me any explanation.</p>
<h2 id="i-wrote-some-adblocker-cosmetic-filters">I wrote some Adblocker cosmetic filters <a href="#i-wrote-some-adblocker-cosmetic-filters">#</a></h2>
<p>There's one example I can think of that they dislike that might have been egregious, <a href="https://web.archive.org/web/20250416115946/https://github.com/orgs/community/discussions/147437">I wrote some cosmetic filters for blocking the Copilot Chat in the Dashboard back when they haven't provided a toggle to disable it</a> (do Control + F for &quot;regalialong&quot;). This is an Internet Archive link, because that comment plus the thread of people contributing their own filters, is gone.</p>
<p>I also wrote some filterlists to declutter <a href="https://codeberg.org/regalialong/vuejs-filterlists">VueJS's documentation</a> (now hosted at Codeberg, but used to be on a gist of mine).</p>
<p>If either of those are the reason I got suspended.... then.... WTF?<br />
You'd tell me that you have a developer platform, and then you get surprised if developers know how to work around things that they don't like? That's what we do for fun :P</p>
<p><a href="https://github.com/easylist/easylist">Guess who gets to do this on an industrial scale <em>and</em> stay on Github</a>.</p>
<h2 id="adgobye">AdGoBye <a href="#adgobye">#</a></h2>
<p>This is funnily enough still alive because Orgs outlive their owners.</p>
<p>Back in 2024, I made <a href="https://github.com/AdGoBye/AdGoBye">AdGoBye</a>, which is a tool that brought an Adblocker to a certain social VR game.</p>
<p>If I got banned for this.... then there was nothing I could have done.<br />
I've designed that tool with the most humility I can, keeping in mind the circumstances of people who get their content blocked because of the large money sums offered by certain advertisers to world creators. I've specifically put as guideline that we would not affect people's avatars (the content that they embody instead of the environment).</p>
<p>A ban for this would have been strange given how it's been years since this tool was active.</p>
<h2 id="i-made-a-joke-repo-that-reversed-text-order">I made a joke repo that reversed text order <a href="#i-made-a-joke-repo-that-reversed-text-order">#</a></h2>
<p>I don't have a copy of the repo anymore, because this was an afternoon joke that I did in my Downloads folder....</p>
<p>I use a tool called <a href="https://github.com/vrcx-team/VRCX">VRCX</a>, which is difficult to explain to someone who's not using it, but essentially is an API client.<br />
I used to be within the community for this tool, and it has a Github feed, so we pretty regularly would see all the weirdly named personal forks that people would do of the repository.</p>
<p>So I got the idea for a joke, what if I made a version of the tool where it was all mirrored? Mirrored name, mirrored Readme, mirrored localization.<br />
So I did! I inserted <a href="https://unicode-explorer.com/c/202E">https://unicode-explorer.com/c/202E</a> into every README line, into every localization line, I reversed the name to XCRV.</p>
<p>And that worked mostly! (the title bar is because of the desktop file I think)<br />
<img src="/assets/Media/github/mirrored.png"></p>
<p>It was funny, everyone had a laugh, I forgot about the repo after like a week.</p>
<p>If this what got me banned (perhaps due to a misled) spam filter.... then that's sad.<br />
For one, try doing something malicious (like phishing a user for malware) when the repo looks like this (this is a low effort inspector edit to show you what it'd have looked like, I still don't have the repo):<br />
<img src="/assets/Media/github/mirrored_readme.png"></p>
<p>On the other side, <a href="https://github.com/Lava-Gang/melonloader">I know that campaigns don't make that much of an effort</a>, especially editing the localization files.<br />
And <a href="https://github.com/sta/websocket-sharp/commits/master/">there's some obvious high profile accounts</a> doing transparent spam, making the commit history unreadable, and not even getting a slap on the wrist for it (seriously, you know the pain of websocket-sharp if you're a C# dev).</p>
<h1 id="about-you">About you <a href="#about-you">#</a></h1>
<p>This is the part that might ruin my chances to ever get my account back, I'm sure if I removed this section, I could post this onto Hacker news and my support ticket would magically get expedited.</p>
<p>This might also make some readers roll their eyes, but I have to write this.</p>
<p>If the idea of getting banned, having all your contributions to open source go away, and never getting any response about what happened scares you, that is perfectly rational.</p>
<p>Read my lips:</p>
<p style="font-size: 2rem; line-height: 2rem;">If this can happen to me, it will happen to you</p>
<p style="font-size: 3rem; line-height: 3rem;">You can disappear with no trace at the click of a button</p>
<p style="font-size: 5rem; line-height: 5rem;">Get off Github</p>
<p>Trust me, I know that Github Actions is insanely cheap. I know it's not simply snapping your fingers and making it happen. But when Github can erase everything you ever made, <em>and</em> your contributions to other people's projects <em><strong>which might include rationale on why code is developed</strong></em>, it's not someone you want as steward of your community.</p>
<p>There are tools like <a href="https://github.com/cooperspencer/gickup">https://github.com/cooperspencer/gickup</a> to make this process easier.</p>
<p>If your account is not suspended, Forgejo also allows you to migrate non-code items with an access token as well from the migration page:</p>
<p><img src="/assets/Media/github/codeberg-migration.png"></p>
  </p></main>
 
 </body>
 </html>
 ]]></content:encoded>
  <link>https://blog.hellbeast.eu.org/Github%20banned%20me%20for%20no%20understandable%20reason.html</link>
  <guid isPermaLink="false">017938fe-c331-dfde-a9f8-0f1a30f43368</guid>
  <pubDate>Thu, 23 Apr 2026 20:29:53 +0000</pubDate>
 </item> <item>
  <title>index</title>
  <description>Hey, welcome to my blog. I don&#x27;t have much to write here, so here&#x27;s the usual disclaimers. # I am not a journalist, I&#x27;m a dog with a blog  Stuff on here will be occasionally emotional, probably personal and very likely biased. That shouldn&#x27;t detract from t</description>
  <content:encoded><![CDATA[
     <!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>index</title>
    <meta property="og:title" content="index" />
    <meta property="og:type" content="article" /> <meta property="og:description" content="Hey, welcome to my blog. I don&#x27;t have much to write here, so here&#x27;s the usual disclaimers. # I am not a journalist, I&#x27;m a dog with a blog  Stuff on here will be occasionally emotional, probably personal and very likely biased. That shouldn&#x27;t detract from t" />
    <link rel="alternate" type="application/rss+xml"
     title="RSS Feed for Regalia's blog"
     href="/feed.xml" />
    <script src="/main.js"></script>
    <script src="/at-date.js"></script>
    <link rel="stylesheet" href="/styles.css">
    <link rel="stylesheet" href="/pygments.css">
  </head>
  <body>
  <nav class="tag-toc"><details><summary>Blogging</summary>
<ul>
<li><a class="toc-link"  href="/Addendum%20to%20Fedi%20fucking%20sucks%20%28as%20a%20minor%29.html">Addendum to Fedi fucking sucks (as a minor)</a></li>
<li><a class="toc-link"  href="/Fedi%20fucking%20sucks%20%28as%20a%20minor%29.html">Fedi fucking sucks (as a minor)</a></li>
<li><a class="toc-link"  href="/Github%20banned%20me%20for%20no%20understandable%20reason.html">Github banned me for no understandable reason</a></li>
<li><a class="toc-link"  href="/My%20Pains%20with%20Firefox%20Sync.html">My Pains with Firefox Sync</a></li>
<li><a class="toc-link"  href="/There%27s%20no%20good%20IM%20-%20Open%20IM%20is%20failing.html">There&#x27;s no good IM - Open IM is failing</a></li>
<li><a class="toc-link"  href="/VRChat%20Video%20Codec%20testing.html">VRChat Video Codec testing</a></li>
<li><a class="toc-link" aria-current="page" href="/index.html">index</a></li>
</ul>
</details>
<ul>
</ul>
  <hr>  <a class="heading heading-1" href="#i-am-not-a-journalist,-i'm-a-dog-with-a-blog">I am not a journalist, I'm a dog with a blog</a></p>  <a class="heading heading-1" href="#talk-with-me-if-you-don't-like-something">Talk with me if you don't like something</a></p>  <hr>  </nav>
  <main class="text" >    <h2>index</h2><p><p>Hey, welcome to my blog. I don't have much to write here, so here's the usual disclaimers.</p>
<h1 id="i-am-not-a-journalist,-i'm-a-dog-with-a-blog">I am not a journalist, I'm a dog with a blog <a href="#i-am-not-a-journalist,-i'm-a-dog-with-a-blog">#</a></h1>
<p>Stuff on here will be occasionally emotional, probably personal and very likely biased. That shouldn't detract from the stuff here though. I can't guarantee 100% correctness of what I write but I try my best wherever possible.</p>
<p>I don't represent a company, an employer or any organization unless I say so.</p>
<h1 id="talk-with-me-if-you-don't-like-something">Talk with me if you don't like something <a href="#talk-with-me-if-you-don't-like-something">#</a></h1>
<p>I may very well have messed up something or caused trouble, <a href="https://hellbeast.eu.org/contacts">contact me and I'll take a look</a>.</p>
<p>list built at <at-date datetime="2026-04-23T20:29:58Z"><at-date><ul><li><a href="/Github%20banned%20me%20for%20no%20understandable%20reason.html">Github banned me for no understandable reason</a>, created 0 days ago</li><li><a href="/index.html">index</a>, created 1 days ago</li><li><a href="/VRChat%20Video%20Codec%20testing.html">VRChat Video Codec testing</a>, created 1 days ago</li><li><a href="/There%27s%20no%20good%20IM%20-%20Open%20IM%20is%20failing.html">There&#x27;s no good IM - Open IM is failing</a>, created 484 days ago</li><li><a href="/Fedi%20fucking%20sucks%20%28as%20a%20minor%29.html">Fedi fucking sucks (as a minor)</a>, created 484 days ago</li><li><a href="/Addendum%20to%20Fedi%20fucking%20sucks%20%28as%20a%20minor%29.html">Addendum to Fedi fucking sucks (as a minor)</a>, created 484 days ago</li><li><a href="/My%20Pains%20with%20Firefox%20Sync.html">My Pains with Firefox Sync</a>, created 484 days ago</li></ul></p>
  </p></main>
 
 </body>
 </html>
 ]]></content:encoded>
  <link>https://blog.hellbeast.eu.org/index.html</link>
  <guid isPermaLink="false">41a04513-f882-8f9e-b7b1-5cebc46648e5</guid>
  <pubDate>Wed, 22 Apr 2026 15:10:26 +0000</pubDate>
 </item> <item>
  <title>VRChat Video Codec testing</title>
  <description>![VRCEnc_cover.webp]  Scroll to the bottom for combined data / conclusions, [Table on Google Sheets is published here](https://docs.google.com/spreadsheets/d/e/2PACX-1vQxBsc2B5SJczNYwjZ6gLKG1sCrh2aMBE16nlpnVOuRH2jwXpkuBl9nr8-XSOe_x2C_gH6vz74rl22U/pubhtml</description>
  <content:encoded><![CDATA[
     <!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>VRChat Video Codec testing</title>
    <meta property="og:title" content="VRChat Video Codec testing" />
    <meta property="og:type" content="article" /> <meta property="og:image" content="/assets/Media/videoencodepost/VRCEnc_cover.webp" />
 <meta property="og:image:url" content="/assets/Media/videoencodepost/VRCEnc_cover.webp" /> <meta property="og:description" content="![VRCEnc_cover.webp]  Scroll to the bottom for combined data / conclusions, [Table on Google Sheets is published here](https://docs.google.com/spreadsheets/d/e/2PACX-1vQxBsc2B5SJczNYwjZ6gLKG1sCrh2aMBE16nlpnVOuRH2jwXpkuBl9nr8-XSOe_x2C_gH6vz74rl22U/pubhtml" />
    <link rel="alternate" type="application/rss+xml"
     title="RSS Feed for Regalia's blog"
     href="/feed.xml" />
    <script src="/main.js"></script>
    <script src="/at-date.js"></script>
    <link rel="stylesheet" href="/styles.css">
    <link rel="stylesheet" href="/pygments.css">
  </head>
  <body>
  <nav class="tag-toc"><details><summary>Blogging</summary>
<ul>
<li><a class="toc-link"  href="/Addendum%20to%20Fedi%20fucking%20sucks%20%28as%20a%20minor%29.html">Addendum to Fedi fucking sucks (as a minor)</a></li>
<li><a class="toc-link"  href="/Fedi%20fucking%20sucks%20%28as%20a%20minor%29.html">Fedi fucking sucks (as a minor)</a></li>
<li><a class="toc-link"  href="/Github%20banned%20me%20for%20no%20understandable%20reason.html">Github banned me for no understandable reason</a></li>
<li><a class="toc-link"  href="/My%20Pains%20with%20Firefox%20Sync.html">My Pains with Firefox Sync</a></li>
<li><a class="toc-link"  href="/There%27s%20no%20good%20IM%20-%20Open%20IM%20is%20failing.html">There&#x27;s no good IM - Open IM is failing</a></li>
<li><a class="toc-link" aria-current="page" href="/VRChat%20Video%20Codec%20testing.html">VRChat Video Codec testing</a></li>
<li><a class="toc-link"  href="/index.html">index</a></li>
</ul>
</details>
<ul>
</ul>
  <hr>  <a class="heading heading-1" href="#tl;dr">tl;dr</a></p>  <a class="heading heading-1" href="#primer">Primer</a></p>  <a class="heading heading-1" href="#testing-and-data">Testing and data</a></p>  <a class="heading heading-2" href="#test">Test</a></p>  <a class="heading heading-2" href="#limitations">Limitations</a></p>  <a class="heading heading-2" href="#quest-2-playback">Quest 2 playback</a></p>  <a class="heading heading-2" href="#pc-(windows-10)-playback">PC (Windows 10) playback</a></p>  <a class="heading heading-2" href="#pc-(linux)-playback">PC (Linux) playback</a></p>  <a class="heading heading-1" href="#combined-table-and-conclusions">Combined table and conclusions</a></p>  <a class="heading heading-2" href="#baselines">Baselines</a></p>  <a class="heading heading-3" href="#player-independent">Player independent</a></p>  <a class="heading heading-4" href="#what-about-avc?">What about AVC?</a></p>  <a class="heading heading-3" href="#avpro">AVPro</a></p>  <a class="heading heading-3" href="#unity-player">Unity Player</a></p>  <hr>  </nav>
  <main class="text" >    <h2>VRChat Video Codec testing</h2><p><p><img src="/assets/Media/videoencodepost/VRCEnc_cover.webp"></p>
<p>Scroll to the bottom for combined data / conclusions, <a href="https://docs.google.com/spreadsheets/d/e/2PACX-1vQxBsc2B5SJczNYwjZ6gLKG1sCrh2aMBE16nlpnVOuRH2jwXpkuBl9nr8-XSOe_x2C_gH6vz74rl22U/pubhtml">Table on Google Sheets is published here</a></p>
<p>Currently there's little literature about encoding films for VRChat, <a href="https://thegreatpug.com/vrchat-making-a-theater/">the Great Pug has published an article in 2018</a> about creating a theater which talks about how they encoded their videos.</p>
<p>This is a fairly old article (while useful) that describes the usage of h264 and aac audio. VRChat themselves meanwhile only <a href="https://web.archive.org/web/20240114211110/https://creators.vrchat.com/worlds/udon/video-players/#optimizing-your-videos">recommends setting faststart</a> and gives no guidance beyond that.</p>
<p>We are now in 2024 with the world slowly moving away from h264 video and onto better compression formats.</p>
<p>That sparked my interest if this is viable for VRChat in a friend group of mine.</p>
<p>In this article, I have compiled napkin tests of what combinations of videos work on what platforms in what scenarios in VRChat. While I believe my data is useful in some form, <em><strong>you should test this yourself</strong></em> to be sure. If your Saw trap fails because you used h265 without precautions, that's not on me.</p>
<h1 id="tl;dr">tl;dr <a href="#tl;dr">#</a></h1>
<p>I don't know my users and world: mp4(vp9+aac)<br />
<del>Windows only, encode speed is critical: mp4(hevc, ac3) (if everyone has extension)</del></p>
<p>AVPro:<br />
Unknown users: webm(vp9+opus)<br />
PC only: webm(av1+opus) (if everyone has extension, free)<br />
Windows only: webm(av1+opus) (if everyone has extension, free)</p>
<p>UPlayer:<br />
Unknown users: mp4(vp9+aac)<br />
PC only: mp4(av1+aac) (if everyone has extension, free)<br />
Windows only: mp4(av1+ac3)</p>
<h1 id="primer">Primer <a href="#primer">#</a></h1>
<p>Assuming you don't know what any of this means, this section will try to bring you up to speed. You can skip this section you're familiar with video encoding.</p>
<p>Doing video is incredibly expensive in storage terms, you are storing potentially thousands of small images spliced together and audio to accompany it.<br />
In order to cut back on the storage and bandwidth costs, video compression is used to reduce the size of video. Video compression allows trading computing resources (i.e. your CPU or GPU doing work) for smaller file sizes. This is how video streaming services such as YouTube and Netflix are able to exist in the first place (although video still remains very expensive in the grand scheme of things).</p>
<p><img src="/assets/Media/videoencodepost/VRCEnc_CompressionDemonstration.png"><br />
(Even though we have the same video, one is significantly smaller (35MB vs 84MB, a -58% reduction)! Huzzah!)</p>
<p>Some jargon:<br />
A specific compression algorithm is called a codec.<br />
Running videos through a certain codec is called &quot;encoding&quot;, turning that 'encoded' video into something you can watch is called &quot;decoding&quot;.<br />
Taking a video in one codec and turning it into another is called &quot;transcoding&quot;.</p>
<p>Away from the abstract and heading towards the practical now:<br />
File formats such as <code>webm</code> and <code>mp4</code> are not actually a specific codec, but they are so-called &quot;container&quot; formats. Their job is to hold the video and audio, as well as subtitles or other data, and describe their contents in a way that video player software can understand.<br />
This is how both video (as in moving pictures) and audio can be combined into a single file, rather than two separate files.<br />
This also allows combining multiple video and audio tracks in DVDs for example.</p>
<p><img src="/assets/Media/videoencodepost/VRCEnc_MediaInfo.png"><br />
(Tools like MediaInfo can be used to figure out what the contents of a video are. In this case, our smaller file was a webm file containing AV1 with Opus audio.)</p>
<p>The same effectively applies for audio, although audio is cheaper than video.</p>
<p>This way of doing it gives us (usually) a lot of flexibility on how we can combine video and audio, allowing us to mix and match different types of video and audio compression formats.</p>
<p>The focus of this article is specifically on that, which formats work when we mix and match them.</p>
<p>There are two families of video compression we're focusing on, h26* and the webm family.</p>
<ul>
<li>h264 is a very widely supported codec and commonly used in mp4, it's widely supported across platforms. It occupies a lingua franca for video because almost all platforms support it.</li>
<li>h265 is the successor for h264, according to ffmpeg giving 25–50% savings for the same quality compared to h264. It's supported much less however.</li>
</ul>
<p>The issue about the h26* family is that they are patent-encumbered, needing people wishing to use the tech to pay licensing fees.<br />
For h264, Cisco has released OpenH264 which is open source, where they cover the licensing costs and making it free to use.<br />
The same can't be said for h265 however, which requires paying a licensing pool for usage, which restricts support for it across operating systems.</p>
<p>The webm family in comparison has video codecs which are free to use, allowing them to have greater compatibility across systems:</p>
<ul>
<li>VP9 is commonly used in webms and competes with h26*, according to ffmpeg giving 25–50% savings compared to h264.</li>
<li>AV1 is the successor to VP9, according to ffmpeg giving 30% savings for the same quality compared to VP9. Support is worse but advancing much faster due to its openness.</li>
</ul>
<p>An advantage that the h26* family has over the webm family is that there is hardware acceleration for encoding, meaning that most consumer GPUs can encode video significantly faster due to dedicated hardware on it than doing it for the CPU.<br />
However, AV1 has been steadily gaining hardware support from the 4090 and from Intel Arc GPUs.</p>
<h1 id="testing-and-data">Testing and data <a href="#testing-and-data">#</a></h1>
<p>For these tests, I'll naively use a hierarchy of &quot;best&quot; to &quot;worst&quot; compression formats, generally following compression improvements across every format.<br />
Things at the top are preferred over things at the bottom.</p>
<p>For video:</p>
<ol>
<li>AV1</li>
<li>VP9</li>
<li>HEVC (i.e h265)</li>
<li>AVC (i.e h264)</li>
</ol>
<p>For audio:</p>
<ol>
<li>Opus</li>
<li>AC-3 (also known as Dolby Digital)</li>
<li>AAC</li>
</ol>
<p>Technically, AC3 is worse than AAC in terms of quality, we prefer it hierarchically since it's more commonly used for movies to provide surround sound.<br />
If you don't care for surround, or you don't have an original AC3 track to keep in the file, <a href="https://listening-test.coresv.net/results.htm">Opus generally outperforms AAC</a>.</p>
<h2 id="test">Test <a href="#test">#</a></h2>
<p>Use <a href="https://github.com/regalialong/VRCEnc/blob/main/generate_files.sh"><code>generate_files.sh</code></a> to transcode a video sample, host it on an HTTP web server (VRChat unfortunately doesn't support <code>file://</code> URIs), I did it on MinIO, although nginx should probably do the same. Play back various re-encoded video files in <a href="https://vrchat.com/home/world/wrld_c60b0ea5-f552-44a6-9a88-c89291bcf1bb">ProTV Showcase</a> and test what works.</p>
<p>Just for the sake of anybody in the future:<br />
All testing done on build 1442, ProTV version by world self reported as 2.3.12.<br />
My system is a NVIDIA GeForce RTX 3080 with a AMD Ryzen 7 5800X3D.</p>
<p>Linux tested on my personal Arch install, running Plasma 6.0.3 with kernel version 6.8.5-arch1-1 and nvidia-550.67-6. Game itself runs per <a href="https://github.com/GloriousEggroll/proton-ge-custom/releases/tag/GE-Proton9-2">GE-Proton9-2</a><br />
Windows 10 tested on Pro 22H2 running on a virtual machine with the GPU passed in, with a paravirtualized disk and networking.<br />
Quest 2 tested on v63.</p>
<h2 id="limitations">Limitations <a href="#limitations">#</a></h2>
<p>This test purely goes into what video format combinations play, there are multiple things that aren't considered but are still important practically and worth testing in the future:</p>
<ul>
<li>These tests don't actually evaluate if videos benefit from the switch of compression algorithm, just if they play, although they generally should benefit.</li>
<li>We don't consider the additional overhead from more complex video compression methods.</li>
<li>We don't test the upper ceiling for VR video quality, such as resolution and bitrate.
<ul>
<li>Since VR is often its own video stream being transmitted to a headset, which has compression on top of the film itself being compressed, I believe there is an upper ceiling for perceivable video quality within VR. This requires separate testing.</li>
</ul>
</li>
<li>Encode settings are left at ffmpeg's defaults, we don't test the incompatibility of different encode settings.</li>
<li>This doesn't test how things such as subtitles or fonts included could affect video playback, this requires testing because we experienced some issues with it.</li>
<li>The Windows 10 test results are done on the Pro version of Windows:
<ul>
<li>Windows N versions do not ship with what Microsoft describes as the <a href="https://support.microsoft.com/en-us/windows/media-feature-pack-for-windows-10-11-n-february-2023-2aaf89b8-f9d3-4322-98d0-612c9bea9c01">Media Feature Pack</a>, which provides support for Opus and Dolby Digital (ac3) audio, although this can be installed for free on top of N versions.</li>
<li>In my testing, Windows 10 LTSC also does not ship with this and also doesn't have the option to retrofit this.
<ul>
<li>According to a friend of mine, you may be able to extract and transplant the DLLs from the Media Feature Pack installer, register them and that might fix audio. However this is out of scope, YMMV.</li>
</ul>
</li>
<li>My Windows 11 virtual machine shipped with the HEVC from Device Manufacturer extension (elaborated later), I don't really understand why but W11 might have more media support, YMMV.</li>
</ul>
</li>
</ul>
<h2 id="quest-2-playback">Quest 2 playback <a href="#quest-2-playback">#</a></h2>
<p>Note that the Quest 2 does not have support for AV1.</p>
<table>
<thead>
<tr>
<th>Quest 2 playback (UPlayer)</th>
<th>aac</th>
<th>opus</th>
<th>ac3</th>
</tr>
</thead>
<tbody>
<tr>
<td>avc (mp4)</td>
<td>PASS</td>
<td>PASS</td>
<td>FAILA</td>
</tr>
<tr>
<td>vp9 (webm)</td>
<td>N/A¹</td>
<td>PASS</td>
<td>N/A¹</td>
</tr>
<tr>
<td>av1 (webm)</td>
<td>N/A¹</td>
<td>FAIL</td>
<td>N/A¹</td>
</tr>
<tr>
<td>vp9 (mp4)</td>
<td>PASS</td>
<td>PASS</td>
<td>FAILA</td>
</tr>
<tr>
<td>av1 (mp4)</td>
<td>FAIL</td>
<td>FAIL</td>
<td>FAIL</td>
</tr>
<tr>
<td>hevc (mp4)</td>
<td>PASS</td>
<td>PASS</td>
<td>FAILA</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th>Quest 2 playback (AVPro)</th>
<th>aac</th>
<th>opus</th>
<th>ac3</th>
</tr>
</thead>
<tbody>
<tr>
<td>avc (mp4)</td>
<td>PASS</td>
<td>PASS</td>
<td>FAILA</td>
</tr>
<tr>
<td>vp9 (webm)</td>
<td>N/A¹</td>
<td>PASS</td>
<td>N/A¹</td>
</tr>
<tr>
<td>av1 (webm)</td>
<td>N/A¹</td>
<td>FAIL</td>
<td>N/A¹</td>
</tr>
<tr>
<td>vp9 (mp4)</td>
<td>PASS</td>
<td>PASS</td>
<td>FAILA</td>
</tr>
<tr>
<td>av1 (mp4)</td>
<td>FAILV</td>
<td>FAILV</td>
<td>FAIL</td>
</tr>
<tr>
<td>hevc (mp4)</td>
<td>PASS</td>
<td>PASS</td>
<td>FAILA</td>
</tr>
</tbody>
</table>
<p>PASS: Working video playback<br />
FAIL: Complete video playback failure<br />
FAILA: Working visual playback but missing audio<br />
FAILV: Working audio playback but missing visuals</p>
<p>¹ webm container format restricts codec inputs</p>
<h2 id="pc-(windows-10)-playback">PC (Windows 10) playback <a href="#pc-(windows-10)-playback">#</a></h2>
<p>VRChat's video players use the Windows Media Foundation as video decode handler on Windows, Windows doesn't ship all by default instead bundles them into &quot;video extensions&quot; on the Microsoft store. The table confirms these are <em><strong>required</strong></em> to play certain formats through Media Foundation.<br />
Verify that the required extensions are installed on end-user systems using <code>Get-AppxPackage -Name Microsoft.*VideoExtension</code>.</p>
<table>
<thead>
<tr>
<th>Windows playback (UPlayer)</th>
<th>aac</th>
<th>opus</th>
<th>ac3</th>
</tr>
</thead>
<tbody>
<tr>
<td>avc (mp4)</td>
<td>PASS</td>
<td>FAILA</td>
<td>PASS</td>
</tr>
<tr>
<td>vp9 (webm)</td>
<td>N/A¹</td>
<td>FAIL²</td>
<td>N/A¹</td>
</tr>
<tr>
<td>vp9 (mp4)</td>
<td>PASS</td>
<td>FAILA</td>
<td>PASS</td>
</tr>
<tr>
<td>av1 (webm, MFE)</td>
<td>N/A¹</td>
<td>FAIL²</td>
<td>N/A¹</td>
</tr>
<tr>
<td>av1 (mp4, MFE)</td>
<td>PASS</td>
<td>FAILA</td>
<td>PASS</td>
</tr>
<tr>
<td>hevc (mp4, MFE)</td>
<td>PASS</td>
<td>FAILA</td>
<td>PASS</td>
</tr>
<tr>
<td><strong>No extensions:</strong></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>av1 (webm, NOEXT)</td>
<td>N/A¹</td>
<td>FAIL</td>
<td>N/A¹</td>
</tr>
<tr>
<td>av1 (mp4, NOEXT)</td>
<td>FAIL</td>
<td>FAIL</td>
<td>FAIL</td>
</tr>
<tr>
<td>hevc (mp4, NOEXT)</td>
<td>FAIL</td>
<td>FAIL</td>
<td>FAIL</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th>Windows playback (AVPro)</th>
<th>aac</th>
<th>opus</th>
<th>ac3</th>
</tr>
</thead>
<tbody>
<tr>
<td>avc (mp4)</td>
<td>PASS</td>
<td>FAIL</td>
<td>PASS</td>
</tr>
<tr>
<td>vp9 (webm)</td>
<td>N/A¹</td>
<td>PASS</td>
<td>N/A¹</td>
</tr>
<tr>
<td>vp9 (mp4)</td>
<td>PASS</td>
<td>FAIL</td>
<td>PASS</td>
</tr>
<tr>
<td>av1 (webm, MFE)</td>
<td>N/A¹</td>
<td>PASS</td>
<td>N/A¹</td>
</tr>
<tr>
<td>av1 (mp4, MFE)</td>
<td>PASS</td>
<td>FAIL</td>
<td>PASS</td>
</tr>
<tr>
<td>hevc (mp4, MFE)</td>
<td>PASS</td>
<td>FAIL</td>
<td>PASS</td>
</tr>
</tbody>
</table>
<p>PASS: Working video playback<br />
FAIL: Complete video playback failure<br />
FAILA: Working visual playback but missing audio<br />
MFE: Has a corresponding WMF extension installed<br />
NOEXT: Had WMF extension uninstalled for validation, these are always expected to fail</p>
<p>¹ webm container format restricts codec inputs<br />
² This failure is likely related due to broken webm handling by UPlayer.</p>
<h2 id="pc-(linux)-playback">PC (Linux) playback <a href="#pc-(linux)-playback">#</a></h2>
<p>This is expected to have fewer options for playback due to missing video decoding infrastructure for the patent encumbered formats.</p>
<table>
<thead>
<tr>
<th>Linux playback (UPlayer)</th>
<th>aac</th>
<th>opus</th>
<th>ac3</th>
</tr>
</thead>
<tbody>
<tr>
<td>avc (mp4)</td>
<td>PASS</td>
<td>PASS</td>
<td>FAILA</td>
</tr>
<tr>
<td>vp9 (webm)</td>
<td>N/A¹</td>
<td>FAIL²</td>
<td>N/A¹</td>
</tr>
<tr>
<td>av1 (webm)</td>
<td>N/A¹</td>
<td>FAIL²</td>
<td>N/A¹</td>
</tr>
<tr>
<td>av1 (mp4)</td>
<td>PASS</td>
<td>PASS</td>
<td>FAILA</td>
</tr>
<tr>
<td>vp9 (mp4)</td>
<td>PASS</td>
<td>PASS</td>
<td>FAILA</td>
</tr>
<tr>
<td>hevc (mp4)</td>
<td>FAIL</td>
<td>FAIL</td>
<td>FAIL</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th>Linux playback (AVPro)</th>
<th>aac</th>
<th>opus</th>
<th>ac3</th>
</tr>
</thead>
<tbody>
<tr>
<td>avc (mp4)</td>
<td>PASS</td>
<td>PASS</td>
<td>FAILA</td>
</tr>
<tr>
<td>vp9 (webm)</td>
<td>N/A¹</td>
<td>PASS</td>
<td>N/A¹</td>
</tr>
<tr>
<td>av1 (webm)</td>
<td>N/A¹</td>
<td>PASS</td>
<td>N/A¹</td>
</tr>
<tr>
<td>av1 (mp4)</td>
<td>PASS</td>
<td>PASS</td>
<td>FAILA</td>
</tr>
<tr>
<td>vp9 (mp4)</td>
<td>PASS</td>
<td>PASS</td>
<td>FAILA</td>
</tr>
<tr>
<td>hevc (mp4)</td>
<td>FAILV</td>
<td>FAILV</td>
<td>FAIL</td>
</tr>
</tbody>
</table>
<p>PASS: Working video playback<br />
FAIL: Complete video playback failure<br />
FAILA: Working visual playback but missing audio</p>
<p>¹ webm container format restricts codec inputs<br />
² This failure is likely related due to broken webm handling by UPlayer.</p>
<h1 id="combined-table-and-conclusions">Combined table and conclusions <a href="#combined-table-and-conclusions">#</a></h1>
<p>You may prefer to <a href="https://docs.google.com/spreadsheets/d/e/2PACX-1vQxBsc2B5SJczNYwjZ6gLKG1sCrh2aMBE16nlpnVOuRH2jwXpkuBl9nr8-XSOe_x2C_gH6vz74rl22U/pubhtml">view this over Google Sheets</a> which has coloring.</p>
<table>
<thead>
<tr>
<th>Combined table</th>
<th>W10 (U)</th>
<th>Linux (U)</th>
<th>Q2 (U)</th>
<th></th>
<th>W10 (A)</th>
<th>Linux (A)</th>
<th>Q2 (A)</th>
</tr>
</thead>
<tbody>
<tr>
<td>av1, opus [webm]</td>
<td>FAIL</td>
<td>FAIL</td>
<td>FAIL</td>
<td></td>
<td>PASS</td>
<td>PASS</td>
<td>FAIL</td>
</tr>
<tr>
<td>av1, aac [mp4]</td>
<td>PASS</td>
<td>PASS</td>
<td>FAIL</td>
<td></td>
<td>PASS</td>
<td>PASS</td>
<td>FAILV</td>
</tr>
<tr>
<td>av1, opus [mp4]</td>
<td>FAILA</td>
<td>PASS</td>
<td>FAIL</td>
<td></td>
<td>FAIL</td>
<td>PASS</td>
<td>FAILV</td>
</tr>
<tr>
<td>av1, ac3 [mp4]</td>
<td>PASS</td>
<td>FAILA</td>
<td>FAIL</td>
<td></td>
<td>PASS</td>
<td>FAILA</td>
<td>FAIL</td>
</tr>
<tr>
<td>vp9, opus [webm]</td>
<td>FAIL</td>
<td>FAIL</td>
<td>PASS</td>
<td></td>
<td>PASS</td>
<td>PASS</td>
<td>PASS</td>
</tr>
<tr>
<td>vp9, aac [mp4]</td>
<td>PASS</td>
<td>PASS</td>
<td>PASS</td>
<td></td>
<td>PASS</td>
<td>PASS</td>
<td>PASS</td>
</tr>
<tr>
<td>vp9, opus [mp4]</td>
<td>FAILA</td>
<td>PASS</td>
<td>PASS</td>
<td></td>
<td>FAIL</td>
<td>PASS</td>
<td>PASS</td>
</tr>
<tr>
<td>vp9, ac3 [mp4]</td>
<td>PASS</td>
<td>FAILA</td>
<td>FAILA</td>
<td></td>
<td>PASS</td>
<td>FAILA</td>
<td>FAILA</td>
</tr>
<tr>
<td>hevc, aac [mp4]</td>
<td>PASS</td>
<td>FAIL</td>
<td>PASS</td>
<td></td>
<td>PASS</td>
<td>FAILV</td>
<td>PASS</td>
</tr>
<tr>
<td>hevc, opus [mp4]</td>
<td>FAILA</td>
<td>FAIL</td>
<td>PASS</td>
<td></td>
<td>FAIL</td>
<td>FAILV</td>
<td>PASS</td>
</tr>
<tr>
<td>hevc, ac3 [mp4]</td>
<td>PASS</td>
<td>FAIL</td>
<td>FAILA</td>
<td></td>
<td>PASS</td>
<td>FAIL</td>
<td>FAILA</td>
</tr>
<tr>
<td>avc, aac [mp4]</td>
<td>PASS</td>
<td>PASS</td>
<td>PASS</td>
<td></td>
<td>PASS</td>
<td>PASS</td>
<td>PASS</td>
</tr>
<tr>
<td>avc, opus [mp4]</td>
<td>FAILA</td>
<td>PASS</td>
<td>PASS</td>
<td></td>
<td>FAIL</td>
<td>PASS</td>
<td>PASS</td>
</tr>
<tr>
<td>avc, ac3 [mp4]</td>
<td>PASS</td>
<td>FAILA</td>
<td>FAILA</td>
<td></td>
<td>PASS</td>
<td>FAILA</td>
<td>FAILA</td>
</tr>
</tbody>
</table>
<p>U=Unity Player, A=AVPro<br />
PASS: Working playback<br />
FAILA: Missing audio<br />
FAILV: Missing video<br />
FAIL: Complete playback failure<br />
This table implies the system has the video extensions for Windows.</p>
<p>There are some quirks we can draw out of this:</p>
<ul>
<li>Q2 never supports AV1 or AC3 audio</li>
<li>W10 as of writing fails to use opus for non-webm formats</li>
<li>PC Unity Player fails to parse VP9/AV1 webms, <a href="https://forum.unity.com/threads/5-years-ago-webm-vp9-support-was-promised-now-nothing-any-probability-of-follow-through.1231605">because Unity forgot to implement it.</a>
<ul>
<li>In my opinion this is a bug, it might be worth a canny ticket.</li>
</ul>
</li>
<li>AVPro is able to handle webm correctly</li>
<li>AVPro manages to FAILV where UPlayer would FAIL</li>
</ul>
<h2 id="baselines">Baselines <a href="#baselines">#</a></h2>
<p>Assuming the data is 100% absolute and correct (it probably isn't), depending on which player, multiple baselines can be drawn:</p>
<h3 id="player-independent">Player independent <a href="#player-independent">#</a></h3>
<p>No matter what player, mp4(vp9+aac) works across players on every operating system. The VP9 video extension is preinstalled for Windows 10 consumer builds, avoiding Video Extension hell.<br />
A problem with VP9 is its slow encoding speed. There is plenty of literature online on how to increase the encoding speed for VP9 however due to its use in the VOD sector.</p>
<p>There is also SVT-VP9 <a href="https://github.com/OpenVisualCloud/SVT-VP9">here</a> by the same team that sped up the encode for AV1, this one is not included by default in ffmpeg however. It can be compiled as a ffmpeg plugin <a href="https://github.com/OpenVisualCloud/SVT-VP9/blob/master/ffmpeg_plugin/README.md">as described here</a>. I haven't tested or used this so YMMV.</p>
<blockquote>
<p><code>libvpx-vp9</code> can save about 20–50% bitrate compared to <code>libx264</code> (the default <a href="https://trac.ffmpeg.org/wiki/Encode/H.264">H.264</a> encoder), while retaining the same visual quality.</p>
</blockquote>
<p>If there's only Windows players, mp4(av1+ac3) is better but AV1 requires a video extension, see AVPro section.</p>
<h4 id="what-about-avc?">What about AVC? <a href="#what-about-avc?">#</a></h4>
<p>AVC is also a universally supported option from our table but the compression is worse compared to VP9, so it doesn't make sense to use it unless you need encoding speed (since h264 can be hardware accelerated unlike VP9).</p>
<h3 id="avpro">AVPro <a href="#avpro">#</a></h3>
<p>webm(vp9+opus) is the best generalist baseline for AVPro. mp4 is not an option due the W10 non-webm opus bug mentioned above.</p>
<p>For PC only, webm(av1+opus) is the <em>technically</em> correct best combination.<br />
The <em>technically</em> part kicks in because W10 users need the <a href="https://apps.microsoft.com/detail/9mvzqvxjbq9v?hl=en-us&gl=US">AV1 Video Extension</a> on their systems before AV1 video works, meaning every viewer has to make sure they have this installed.<br />
If everyone installs it from the Microsoft store for free, this is probably the best option all around.</p>
<p>AV1 similar to VP9 had a history of bad encode speeds however SVT-AV1 is a multithreaded CPU encoder that has been fairly competitive with the other formats from what I was able to tell, <a href="https://trac.ffmpeg.org/wiki/Encode/AV1#SVT-AV1">it's included in ffmpeg</a> as <code>libsvtav1</code>.</p>
<blockquote>
<p>Depending on the use case, AV1 can achieve about 30% higher compression efficiency than VP9, and about 50% higher efficiency than H.264.</p>
</blockquote>
<p>For Windows only, assuming encode speed is critical, mp4(hevc, ac3) is inferior to AV1 but an option with hardware encoding.<br />
The problem is W10 users need the wordy <a href="https://apps.microsoft.com/detail/9n4wgh0z6vhq?">HEVC Video Extensions from Device Manufacturer</a> on their systems before HEVC video works, meaning every viewer has to make sure they have this installed.<br />
Unlike AV1, the issue is that the HEVC Video Extension is paid. Some systems may have this preinstalled already from their GPU, YMMV. There used to be an exploit that allowed you to get it from the store for free, this has been fixed and therefore now requires the video extension to be sideloaded or paid for.</p>
<h3 id="unity-player">Unity Player <a href="#unity-player">#</a></h3>
<p>UPlayer has two bugs working against it:</p>
<ul>
<li>W10 fails to load opus audio for non-webm formats (i.e mp4)</li>
<li>UPlayer fails to load webm outright, even though they contain native formats (VP9,AV1)<br />
This makes our choices tighter.</li>
</ul>
<p>mp4(vp9+aac) is the best generalist choice for UPlayer. VP9 speed concerns from above apply.<br />
For PC only, mp4(av1+aac) is the best option. AV1 extension concerns above apply.<br />
For Windows only, mp4(av1+ac3) is the best option. AV1 extension concerns above apply.</p>
  </p></main>
 
 </body>
 </html>
 ]]></content:encoded>
  <link>https://blog.hellbeast.eu.org/VRChat%20Video%20Codec%20testing.html</link>
  <guid isPermaLink="false">d1dfc4e5-9830-dfbe-3f08-85cf3637ea81</guid>
  <pubDate>Wed, 22 Apr 2026 15:08:17 +0000</pubDate>
 </item> <item>
  <title>There&#x27;s no good IM - Open IM is failing</title>
  <description>&lt;div class=&quot;mbox&quot;&gt;         &lt;h3&gt;The opinion meters are through the roof&lt;/h3&gt;         &lt;p&gt;This blog is pretty opinionated but this one tops it all. While I think my opinions are valid and I try to link and source a lot of things I say here, please don&#x27;t take </description>
  <content:encoded><![CDATA[
     <!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>There&#x27;s no good IM - Open IM is failing</title>
    <meta property="og:title" content="There&#x27;s no good IM - Open IM is failing" />
    <meta property="og:type" content="article" /> <meta property="og:image" content="/assets/Media/nogoodim/imlosingit.png" />
 <meta property="og:image:url" content="/assets/Media/nogoodim/imlosingit.png" /> <meta property="og:description" content="&lt;div class=&quot;mbox&quot;&gt;         &lt;h3&gt;The opinion meters are through the roof&lt;/h3&gt;         &lt;p&gt;This blog is pretty opinionated but this one tops it all. While I think my opinions are valid and I try to link and source a lot of things I say here, please don&#x27;t take " />
    <link rel="alternate" type="application/rss+xml"
     title="RSS Feed for Regalia's blog"
     href="/feed.xml" />
    <script src="/main.js"></script>
    <script src="/at-date.js"></script>
    <link rel="stylesheet" href="/styles.css">
    <link rel="stylesheet" href="/pygments.css">
  </head>
  <body>
  <nav class="tag-toc"><details><summary>Blogging</summary>
<ul>
<li><a class="toc-link"  href="/Addendum%20to%20Fedi%20fucking%20sucks%20%28as%20a%20minor%29.html">Addendum to Fedi fucking sucks (as a minor)</a></li>
<li><a class="toc-link"  href="/Fedi%20fucking%20sucks%20%28as%20a%20minor%29.html">Fedi fucking sucks (as a minor)</a></li>
<li><a class="toc-link"  href="/Github%20banned%20me%20for%20no%20understandable%20reason.html">Github banned me for no understandable reason</a></li>
<li><a class="toc-link"  href="/My%20Pains%20with%20Firefox%20Sync.html">My Pains with Firefox Sync</a></li>
<li><a class="toc-link" aria-current="page" href="/There%27s%20no%20good%20IM%20-%20Open%20IM%20is%20failing.html">There&#x27;s no good IM - Open IM is failing</a></li>
<li><a class="toc-link"  href="/VRChat%20Video%20Codec%20testing.html">VRChat Video Codec testing</a></li>
<li><a class="toc-link"  href="/index.html">index</a></li>
</ul>
</details>
<ul>
</ul>
  <hr>  <a class="heading heading-1" href="#pick-your-poison">Pick your poison</a></p>  <a class="heading heading-2" href="#matrix">Matrix</a></p>  <a class="heading heading-3" href="#potential-conflict-of-interest-with-element?">Potential conflict of interest with Element?</a></p>  <a class="heading heading-3" href="#matrix-2.0">Matrix 2.0</a></p>  <a class="heading heading-3" href="#clients,-damned-clients,-and-implementation-sprawl">Clients, damned Clients, and Implementation Sprawl</a></p>  <a class="heading heading-3" href="#proposal-process-is-painful">Proposal process is painful</a></p>  <a class="heading heading-3" href="#soatok's-complaints-about-cryptography">Soatok's complaints about cryptography</a></p>  <a class="heading heading-3" href="#discord-matrix-bridging-is-hell">Discord-Matrix bridging is hell</a></p>  <a class="heading heading-4" href="#t2bot.io">t2bot.io</a></p>  <a class="heading heading-5" href="#is-anybody-home?">Is anybody home?</a></p>  <a class="heading heading-4" href="#the-rest-of-the-story">The rest of the story</a></p>  <a class="heading heading-3" href="#hell-is-paved-with-good-intentions">Hell is paved with good intentions</a></p>  <a class="heading heading-2" href="#xmpp">XMPP</a></p>  <a class="heading heading-3" href="#no-1:many---probably-from-irc">No 1:many - probably from IRC</a></p>  <a class="heading heading-3" href="#the-2000s-wants-its-clients-back">The 2000s wants its clients back</a></p>  <a class="heading heading-3" href="#frozen-in-time">Frozen in time</a></p>  <a class="heading heading-3" href="#nitpick:-dead-mailing-lists?">Nitpick: Dead mailing lists?</a></p>  <a class="heading heading-3" href="#trailblazer-left-in-the-dust">Trailblazer left in the dust</a></p>  <a class="heading heading-2" href="#signal">Signal</a></p>  <a class="heading heading-2" href="#irc">IRC</a></p>  <a class="heading heading-1" href="#misery">Misery</a></p>  <hr>  </nav>
  <main class="text" >    <h2>There&#x27;s no good IM - Open IM is failing</h2><p><div class="mbox">
        <h3>The opinion meters are through the roof</h3>
        <p>This blog is pretty opinionated but this one tops it all. While I think my opinions are valid and I try to link and source a lot of things I say here, please don't take this as gospel. I could reasonably be wrong about things here. I'm a dog with a blog.</p>
</div>
<p>Flamboyant article with flamboyant title. Here we go: <em><strong>All current open IM (oIM) solutions offered as alternative to Discord are bad.</strong></em><br />
This article is going to be rather brutal because the time to do a fluff article about this is over. Right now, there is a significant OSS gap for replacing Discord. Discord has established itself as the de-facto IM platform for years now, Discord <a href="https://www.theverge.com/2024/1/11/24034705/discord-layoffs-17-percent-employees">is now looking to squeeze their users for money</a>, we need a way out of this abusive relationship.</p>
<p><img src="/assets/Media/nogoodim/imlosingit.png"width="400"></p>
<p>I will create some <a href="https://en.wiktionary.org/wiki/lingo#Noun">lingo</a> here just so we're on the same page.<br />
I consider there to be 3 modes of operation for chatting:</p>
<ul>
<li>1:1 - This is direct messages, you talk with one person. This is usually one of the easiest to design.</li>
<li>1:some - This is 'group chats' or essentially a IRC channel. Here more than 2 people come together to chat into a singular room, this can often scale up to hundreds of participants. Protocols / E2EE systems made with 1:1 in mind usually start failing here.</li>
<li>1:many - This is the Guilds / &quot;&quot;Server&quot;&quot; paradigm from Discord. Compared to the previous category, while we have possibly thousands of people in one space, 1:many spaces contain multiple channels that are logically sorted and moderated under 1 entity (i.e. they are not independent separate channels like you might see for IRC channels).</li>
</ul>
<p>Discord trumps because it mastered the first two and popularized the last.  OSS has not caught up and has many many problems along the way.<br />
I'm sorry for the negativity in this article, this is a whine article. There are plenty of things these solutions do right, this is listing my gripes with them rather than praising them.</p>
<h1 id="pick-your-poison">Pick your poison <a href="#pick-your-poison">#</a></h1>
<h2 id="matrix">Matrix <a href="#matrix">#</a></h2>
<p>When you bring up Discord alternatives, Matrix will almost always come up and it does check a lot of boxes in terms of Discord features, but my time with Matrix has been really bad. I can't really recommend it in good faith, even if I wish I could.</p>
<h3 id="potential-conflict-of-interest-with-element?">Potential conflict of interest with Element? <a href="#potential-conflict-of-interest-with-element?">#</a></h3>
<p>In 2023, <a href="https://matrix.org/blog/2023/11/06/future-of-synapse-dendrite/">Element overtook the development of Synapse (current going homeserver implementation) and Dendrite (Golang based homeserver implementation)</a> from the Matrix foundation. This seems like a conflict of interest to me, as Element <em>is</em> a for-profit entity unlike the Matrix foundation.<br />
Although, Element really plainly states in <a href="https://element.io/blog/element-to-adopt-agplv3/">their own announcement</a> of the takeover:</p>
<blockquote>
<p>As founders of Matrix, we created Element as a for-profit open source company to hire the core Matrix team to be able to work on Matrix, develop a flagship Matrix-based product, bootstrap the Matrix ecosystem, and help fund the underlying core Matrix projects. As a commercial entity, Element has driven the bulk (more than 95%) of core Matrix development for the last seven years, and maintains the largest Matrix homeserver (matrix.org) on behalf of the Matrix.org Foundation.</p>
</blockquote>
<p>This is not an immediate issue. In <a href="https://element.io/blog/synapse-now-lives-at-github-com-element-hq-synapse/">Element's AGPL announcement</a>, they also quite plainly state:</p>
<blockquote>
<p>Now, CLAs come in all shapes and sizes: some good and some bad. It’s critical to understand that our reason for requiring one here is to give us the right to <a href="https://www.gnu.org/philosophy/selling-exceptions.html">sell AGPL exceptions</a>: not to “do a Hashicorp” and switch to a non-FOSS licence in future.</p>
</blockquote>
<p>At least from the current perspective of things, they don't appear to be in it to get a large userbase and then squeeze it.</p>
<p>But I'd be lying if the thought in the back of my head wasn't there:<br />
Element currently controls and maintains the main server implementation for Matrix, implementations such as Dendrite and Conduit (independent Rust implementation) exist but they're plagued with interoperability issues such as <a href="https://github.com/matrix-org/dendrite/issues/3158">Dendrite failing signature checks against Synapse servers</a>. Clearly developing your own Matrix server is a herculean task which even Element doesn't manage to get right.</p>
<p>How would the Matrix ecosystem respond to hostilities from Element? Aren't we putting our eggs into one basket?</p>
<p>This is something which will never get an answer until it actually happens.</p>
<h3 id="matrix-2.0">Matrix 2.0 <a href="#matrix-2.0">#</a></h3>
<p>In September of 2023, the Matrix foundation has unveiled the <a href="https://matrix.org/blog/2023/09/matrix-2-0/">idea of Matrix 2.0</a>. My phrasing was very careful there because Matrix 2.0, to the <a href="https://matrix.org/blog/2023/12/25/the-matrix-holiday-update-2023/#the-road-to-matrix-2-0">acknowledgement of the foundation itself at the tail end of 2023</a>, Matrix 2.0 is not actually a formalized protocol version yet but a set of independent improvements.</p>
<p>One of the more important changes is Sliding Sync, a proposal which <a href="https://github.com/matrix-org/matrix-spec-proposals/blob/9450ced7fb9cf5ea9077d029b3adf36aebfa8709/proposals/3575-sync.md"><code>introduces a way for clients to filter and sort the rooms they are joined to and then request a subset of the resulting list of rooms rather than the entire room list</code>.</a><br />
This is required because Matrix's current sync method does not scale well to larger amounts of rooms, causing clients to spend a long time on syncing.</p>
<p>Noble, technically difficult goal. The idea for Sliding Sync has been around for <a href="https://github.com/matrix-org/matrix-spec-proposals/pull/3575/commits/00220dcb981912d2e5cbb55fba944a64f7a5bf9f">as long as 2021 I believe</a> and nowadays is implemented using the <a href="https://github.com/matrix-org/sliding-sync">Sliding Sync Proxy</a>.</p>
<p>I will be blunt: As far as I'm aware, there is 1 client supporting this: <a href="https://element.io/blog/element-x-ignition/">Element X</a>, Element's flagship beta client.</p>
<p>(That's technically incorrect, there is SchildiChat Next but it simply forks Element X, so I consider it from the same heritage)</p>
<p>I'm sure this will improve as it gets more stable and established over time, but for now the entire thing seems to be an idea that entirely exists in the ballpark of Element. I bring this up independently of the centralization concern, even if they feel similar.</p>
<h3 id="clients,-damned-clients,-and-implementation-sprawl">Clients, damned Clients, and Implementation Sprawl <a href="#clients,-damned-clients,-and-implementation-sprawl">#</a></h3>
<div class="mbox">
        <h3>I don't really like this section</h3>
        <p>A good amount of these clients are mostly developed by volunteers, who don't really have the capacity to support the width of the features. Even an entity as big as Element state they're overstretched. Apply plenty of humility.</p>
</div>
With Cinny, I can upload and use emoji and sticker packs.  
On Element, I straight up can't send them, the implementation is missing.
<p><img src="/assets/Media/nogoodim/cinnyEmojiDemo.png"width="300"> <img src="/assets/Media/nogoodim/elementEmojiDemo.png"width="300"></p>
<p>On Nheko and Element, I can view threads, although in entirely different paradigms with Element giving me a more Discord-style thread selection, where each Thread acts more as its own segregated channel (that's good!). While on Nheko, it's more like a reply chain with a UI wrapper around it, no way to enumerate the Threads as far as I know.<br />
On Cinny, this is just not a thing. Not implemented yet.</p>
<p><img src="/assets/Media/nogoodim/elementThreadsDemo.png"width="300"> <img src="/assets/Media/nogoodim/nhekoThreadsDemo.png"></p>
<p>This section is weak and not actionable by nature of being extensible, you can't (or rather shouldn't) push easily non-backwards incompatible changes and you need work on actually implementing the features. But it's not enjoyable to me as a user and I've seen a good amount of complains along the lines of &quot;Why can't I do emoji?&quot;.</p>
<h3 id="proposal-process-is-painful">Proposal process is painful <a href="#proposal-process-is-painful">#</a></h3>
<p>I've not been around Matrix for long but the time spent waiting for the proposal process to do its thing is equally as painful as it must be for older users.</p>
<p>There are a lot of features missing that make the experience of using it frustrating:</p>
<ul>
<li><a href="https://github.com/element-hq/element-meta/issues/360">Clients notify you when you're obviously at your devices</a></li>
<li>Matrix doesn't allow you to customize your profile, you only get a username and an avatar.
<ul>
<li>This has been a topic for almost 10 years since writing, <a href="https://github.com/matrix-org/matrix-spec-proposals/issues/3795">with an issue being migrated from Jira in 2015</a></li>
<li>The closest solution appears to be <a href="https://github.com/matrix-org/matrix-spec-proposals/pull/1769"><code>MSC1769: Extensible profiles as rooms</code></a> from 2019
<ul>
<li>Which at least externally appears stagnant? I'm sure there's technical reasons for it, but they're not really accessibly laid out without reading through the entire thread</li>
<li>There was a <a href="https://github.com/matrix-org/matrix-spec-proposals/pull/1769#issuecomment-880039120">bump on the status in 2021</a> but this seemingly got no reply</li>
<li>The way that Matrix manages proposals is also painful here, the code review threads end up feeling very cluttered when trying to browse the thread
<ul>
<li>This is not really their fault though per-se, I think this is still fairly accessible and this still feels rather homey as developer.</li>
</ul>
</li>
</ul>
</li>
<li>Mind you, XMPP had <a href="https://xmpp.org/extensions/xep-0054.html#history">figured out profile customization back in 1999....</a></li>
</ul>
</li>
<li>Matrix has a form of custom emotes and stickers as mentioned before but they're not formalized <em>yet</em>
<ul>
<li><a href="https://github.com/element-hq/element-meta/issues/339#issuecomment-2057475632">Matthew Hodgson states</a> Element missing emojis and stickers is due to the competing proposals for it, making Element bide their time instead at the frustration of their users</li>
<li><a href="https://github.com/matrix-org/matrix-spec-proposals/pull/2545">MSC2545</a> has become the going implementation for this over time and is becoming slowly on track to get formalized</li>
</ul>
</li>
<li>There is no way to <a href="https://github.com/matrix-org/synapse/issues/3765">self-destruct a server</a> in order to tell other servers that they cannot federate with this server anymore.
<ul>
<li>Mind you, I'm not expecting a 100% clean exit, that's not possible because of federation.</li>
<li>But having some sort of decommission protocol would be nice.</li>
</ul>
</li>
</ul>
<p>Some proposals are more minor are fine being left on the table for a bit, but features such as profile customization are a critical in my opinion. I've been misgendered from time to time by accident on Matrix because I don't have the ability to show my identity to others. I can change my name to include pronouns for example, but I consider that more of a workaround.<br />
This entire thing wouldn't be an issue if I could attach it to my profile, link to a place for this on it or explain them in a biography. I never had this issue on Discord because I have the ability to customize my profile and that allows anybody who cares enough to introspect on me by, for example, reading my website.</p>
<p>And that's ignoring absolute mess that the <a href="https://github.com/matrix-org/matrix-spec-proposals/pull/3755">Pronouns proposal was</a>, I digress.</p>
<p>A lot of these issues and proposals have been sitting around for a good while, externally appearing stagnant.<br />
All of this really doesn't feel good, although I think that's easy to say with the naivete of not actually being involved in the process.</p>
<p>This ends up being a chicken and egg problem. Proposals are stable when they get merged into the spec, at which points their implementation becomes absolute, but until then proposals are in a state of uncertainty which leads developers (including Element) to only reluctantly work with them.</p>
<p>The best suggestion I can provide is that MSCs could represent a formal blocking status (the blocking label does exist but it doesn't tell you much) or relationship between MSCs, so that users can see at a glance what issues have to be implemented for this MSC to be implementable and track the status of it as a whole. A lot of these MSCs are frustrating because at a glance, they appear to be sitting idle.</p>
<p>XMPP has a thing called <a href="https://xmpp.org/about/compliance-suites/">compliance suites</a> which lists out categories of proposals to implement. This gives developers a target and users something to compare feature sets. This concept doesn't particularly work well because more or less this happens when a proposal becomes part of the Matrix spec.<br />
Matrix.org kind of <a href="https://matrix.org/ecosystem/clients/cinny/">helps by listing out what features clients support</a>, but clearly pain points remain.</p>
<h3 id="soatok's-complaints-about-cryptography">Soatok's complaints about cryptography <a href="#soatok's-complaints-about-cryptography">#</a></h3>
<p>I'm not qualified enough to talk about cryptography, and you may validly dismiss this point for appealing to authority.<br />
I would be dishonest if I would not bring up the <a href="https://gist.github.com/soatok/8aef6f67fec9c702f510ee24d19ef92b">writeup from Soatok Dreamseeker</a>, who knows a lot more about cryptography than I do.</p>
<p>While they mostly only reiterate <a href="https://nebuchadnezzar-megolm.github.io/">a research paper</a> that found the vulnerabilities in the first place, I think the entire thing probably degrades my trust in the cryptography for Matrix until a new security audit happens. Read up on it and decide for yourself.</p>
<h3 id="discord-matrix-bridging-is-hell">Discord-Matrix bridging is hell <a href="#discord-matrix-bridging-is-hell">#</a></h3>
<div class="mbox">
        <h3>This is volunteer maintained software / infrastructure</h3>
        <p>Don't go after them, they bear no fault. I hold no grudge here, thanks to all of the people involved in these projects for their work.</p>
</div>
<p>Oh boy, I get to put on a hat. I develop <a href="https://github.com/AdGoBye/AdGoBye">AdGoBye</a> which is an Adblocker or Content blocker for Social VR.<br />
We've needed to create a social space for development purposes. We like the idea of Matrix because it's more open than Discord would be for this, we're a FOSS project and we prefer FOSS for our infrastructure obviously. The original plan was to maintain both Discord and Matrix spaces and bridge them together, this is a mode of operation <a href="https://matrix.org/docs/communities/bridging/">that's encouraged by the foundation itself</a> but this ended up being a bad experience to the point that it made me erase this section which was supposed to commend Matrix for bridging.</p>
<h4 id="t2bot.io">t2bot.io <a href="#t2bot.io">#</a></h4>
<p>As recommended in the page linked, we started out with <a href="https://t2bot.io/">t2bot.io</a> which runs <a href="https://github.com/matrix-org/matrix-appservice-discord">matrix-appservice-discord</a>. This was fairly nice because they provide the infrastructure for us, we simply link the bot to our spaces and we're done....? You'd wish, we probably came at a bad time.</p>
<p>The bot would intermittently stop bridging which was a huge deal to us since it made holding a conversation flaky when your conversation partner could go away without a notice.<br />
Message edits are done pretty done in a ugly manner:<br />
<img src="/assets/Media/nogoodim/t2botDoubleMessage.png"alt="&quot;I believe Matrix Foundation is short on hands&quot; followed by the message repeated with the missing &quot;the&quot; added"><br />
Occasionally duplicating messages<br />
<img src="/assets/Media/nogoodim/t2botEmbed.png"alt="&quot;Edit: How did they manage that, it's message redaction&quot; with the Edit of the message content being a hyperlink to the original message, although with a link preview"><br />
Or sending the message with the edited content again with a link preview, interrupting the flow of conversation.<br />
A member of the server pointed out that webhooks, which is the mechanism of how &quot;puppeting&quot; works on Discord's side, <a href="https://discord.com/developers/docs/resources/webhook#edit-webhook-message">does support editing messages finally</a> which means you can edit messages.</p>
<p>You can't unbridge your space short of <strong>administrator intervention</strong>, requiring contacting the admins at t2bot.io or whoever hosts the bot to help you if you end up misconfiguring that.</p>
<p>According to <a href="https://github.com/matrix-org/matrix-appservice-discord/issues/813">this issue</a>, you can't bridge Discord's announcement channels, which is a feature that allows Discord servers to push announcements to other servers.</p>
<p>Those are some of the largest problems that the bridge has right now, I'm sure we'll find more the longer we use it.</p>
<h5 id="is-anybody-home?">Is anybody home? <a href="#is-anybody-home?">#</a></h5>
<p>The reason why it's like this is because upstream appears to <a href="https://en.wikipedia.org/wiki/Bus_factor">have been hit by a bus</a>.</p>
<p>As of writing, the <a href="https://github.com/matrix-org/matrix-appservice-discord/commits/develop/">last commit was <code>8ae61dd</code></a> which was 10 months ago.<br />
<a href="https://github.com/t2bot/matrix-appservice-discord">t2bot.io actually maintains their own fork tracking that</a>, which is ahead by 17 commits but also <a href="https://github.com/t2bot/matrix-appservice-discord/commits/t2bot.io/">had its last commit 9 months ago</a>.</p>
<p>Scrolling through the issues and matrix space of the Appservice, there are plenty of users who require triage on issues but are answered by nobody.</p>
<p>The saddest part some of the issues listed actually have PRs to be fixed:</p>
<ul>
<li><a href="https://github.com/matrix-org/matrix-appservice-discord/pull/916">916 - chore: remove embed on discord edits</a></li>
<li><a href="https://github.com/matrix-org/matrix-appservice-discord/pull/819">819 - feat: M -&gt; D native discord edits</a></li>
<li><a href="https://github.com/matrix-org/matrix-appservice-discord/pull/735">735 - Unbridge portals</a></li>
<li><a href="https://github.com/matrix-org/matrix-appservice-discord/pull/889">889 - Add Discord Announcement channels to allowed bridging types</a></li>
</ul>
<p>But there's nobody to review and merge them, no acknowledgement on the state of things officially on the situation that I was able to find.<br />
Someone will have to fork the appservice, not me because I unfortunately don't have the time or patience for it.</p>
<h4 id="the-rest-of-the-story">The rest of the story <a href="#the-rest-of-the-story">#</a></h4>
<p>Anyway, <a href="https://matrix.org/ecosystem/bridges/discord/">matrix.org</a> lists three other bridges.<br />
One is <a href="https://github.com/mautrix/discord"><code>mautrix-discord</code></a>, which I actually use which puppets an entire Discord user, so not what we need.<br />
Another is <a href="https://github.com/git-bruh/matrix-discord-bridge">matrix-discord-bridge</a>, which is unmaintained.</p>
<p>I ended up trying <a href="https://gitdab.com/cadence/out-of-your-element">Out of your Element</a> which contains more features and was made with efficiency in mind.<br />
While the bridge worked <em>mostly</em> fine over its time, it's intended to be used for a canonical Discord space, which would be managed there but allows a no-strings-attached fully managed bridging over to Matrix. That's awkward, because we already have a Matrix space.</p>
<p>I hosted it on my own homeserver, so as administrator, I hijacked the bot's channels to be owned by me and added it to our real Matrix space.</p>
<p>Mission accomplished? Would have been, but at some point the bot started to not bridge messages anymore. I think it might have been because of this, I'm not sure. To be honest due to the thing mentioned above, I don't really want to continue using this either.</p>
<p>Which leads me to today, where I'm considering abandoning support for the Discord server in favor of Matrix, probably to the detriment to my users.</p>
<h3 id="hell-is-paved-with-good-intentions">Hell is paved with good intentions <a href="#hell-is-paved-with-good-intentions">#</a></h3>
<p>I think there is potential but the overall picture is bitter enough for me to not buy into it. Realistically knowing my friend circles though, I'll be forced to stick around Matrix by Network effect (the irony is palpable).</p>
<p>If you're willing to take a one-armed protocol and accept that change will be very slow, possibly being fine with the current status quo, then Matrix might be the solution for you. But I cannot sign it off in the current state.</p>
<p><video src="/assets/Media/nogoodim/imlosingit.mp4" controls></p>
<h2 id="xmpp">XMPP <a href="#xmpp">#</a></h2>
<p>I'll be upfront about my biases, XMPP is pretty much my choice if Discord explodes tomorrow. I like the protocol and it has been battle hardened over the years, like an IRC with more features, but I'd be lying if it didn't hurt.</p>
<h3 id="no-1:many---probably-from-irc">No 1:many - probably from IRC <a href="#no-1:many---probably-from-irc">#</a></h3>
<p>XMPP unfortunately due the time it was developed is stuck with the 1:some model. You get Multi User Channels (MUCs), which give you a singular channel to talk into which multiple people get. Your server ends up being the host (i.e IRC network) for that channels and you enumerate channels on a per-server basis.</p>
<p>Similar to IRC, you can sort of emulate 1:many by splitting your channels into different channels, but they're not visually grouped under one space and instead end up exposing 5 different channels as separate entities. The problem with this that it creates channels that just exist for the meta-organization, which are treated as essentially the same worth as the real channels.</p>
<p>They don't really feel cohesive (because they were never meant to be that way), which is why 1:many is so important.</p>
<p>I lack the technical phrasing for this but I also feel like 1:some doesn't scale well in XMPP? Messages take a while to sync, lots of requests happen if you're in a busier MUC like Gajim's chat. Maybe this is closer to a UI/UX problem than a technical one, but I think it's better if protocols were designed with 1:many in mind rather than as an afterthought. Feel free to dismiss this point if I'm just wrong.</p>
<h3 id="the-2000s-wants-its-clients-back">The 2000s wants its clients back <a href="#the-2000s-wants-its-clients-back">#</a></h3>
<p>XMPP being an older protocol ends up inheriting that in the UI/UX client language as well.<br />
A lot of it feels like its emulating the design language of things like Whatsapp, which makes sense for the audience they were going for at that time but I personally feel like doesn't hold up too well nowadays.<br />
Notable examples include <a href="https://dino.im/">Dino</a> and <a href="https://www.kaidan.im">Kaidan</a>.</p>
<p><a href="https://github.com/conversejs/converse.js/">Converse.js</a> breaks the mold a bit by imitating <a href="https://kiwiirc.com/">KiwiIRC</a> instead, which might be a bit backwards but honestly doesn't look too bad:<br />
<img src="/assets/Media/nogoodim/converseJsDemo.png"width="800"></p>
<p>I think the only place where I prefer this paradigm is on Mobile, although even <a href="https://codeberg.org/inputmice/Conversations">Conversations</a> has since then implemented a more modern Material design:<br />
<img src="/assets/Media/nogoodim/conversationsScreenshot.png"width="200"></p>
<p>Talking about it with a friend, I personally feel like this creates a monoculture for clients, because I would find it difficult to not recommend <a href="https://gajim.org/">Gajim</a> (<a href="https://gajim.org/screenshots/">screenshots</a>) and <a href="https://codeberg.org/iNPUTmice/Conversations">Conversations</a> (see repo for screenshots) to newcomers as they both count as some of the most mature XMPP clients in the ecosystem.<br />
I feel like I would be setting up someone for failure if I didn't onboard them with those, and that's not a good sign.</p>
<h3 id="frozen-in-time">Frozen in time <a href="#frozen-in-time">#</a></h3>
<p>XMPP feels like its stuck back in an older time.<br />
Some features I believe XMPP needs to compete:</p>
<ul>
<li>1:many
<ul>
<li>Provide a way to categorize channels into a singular entity instead of having them be separate</li>
<li>Provide moderation and permission management based on this singular entity</li>
<li>Ideally design-wise separate 1:many from 1:some and 1:1</li>
</ul>
</li>
<li>Custom emojis (small user submitted inline images)
<ul>
<li>Sounds silly but they add a lot in terms of expression, most people coming from Discord will affirm this to you.</li>
<li>Provide a way for the user to upload images to the server (or do something similar to Fedi and have your administrator manage them instead) with a shortcode to reference it</li>
<li>Then you can type <code>:ying_science:</code> in chats and it turns it into  (<a href="https://github.com/Mynotaurus/Yingmotes">cute yinglet source</a>)</li>
<li>Clients not supporting this should just see the <code>:shortcode:</code> in place instead</li>
<li>These images aren't expected to change too much so in order to lighten the load on servers, clients should probably be encouraged to aggressively cache this, maybe impose a file size limit.</li>
</ul>
</li>
<li>Link previews
<ul>
<li>This is a serious creature comfort, having a way to introspect what the link they're heading to is really useful</li>
<li><a href="https://www.mysk.blog/2020/10/25/link-previews/">How to implement this has already been figured over the years</a></li>
<li>Based on <a href="https://github.com/conversejs/converse.js/issues/1173">this converse.js issue</a>, I believe the mechanism for this would be <a href="https://xmpp.org/extensions/xep-0367.html">XEP-0367</a> ?</li>
<li>I think that this is missing is on people's radars:
<ul>
<li>I stumbled onto <a href="https://wiki.xmpp.org/web/Gsoc2024/Dino/Inline_link_preview">Dino's Google Summer of Code project</a> for this</li>
<li>Gajim appears to have had <a href="https://dev.gajim.org/gajim/gajim-plugins/-/wikis/UrlImagePreviewPlugin">a plugin</a> for this, seems removed from the repo nowadays</li>
</ul>
</li>
</ul>
</li>
<li>Expanded styling
<ul>
<li><a href="https://xmpp.org/extensions/xep-0393.html">XEP-0393</a> specifies styling for italics, bold text, Strikethrough and Monospace (that's good!).</li>
<li>Discord but also Matrix support a greater syntax in comparison:
<ul>
<li>Spoilers, where there is a specification in <a href="https://xmpp.org/extensions/xep-0382.html">XEP-0382</a> (though currently deferred)</li>
<li>Bullet point lists (can you tell I like them)</li>
<li>&quot;Ordered&quot; i.e. numbered lists</li>
<li>Headings (I started out thinking they're dumb for IM but they help with structure for longer messages, similarly to the web content)</li>
</ul>
</li>
</ul>
</li>
<li>Extended presence?
<ul>
<li>Probably leaning too hard into Discord-oIM interop but it would be nice to show more in-depth info about what I'm doing</li>
<li>XMPP only shows me my current availability and a short text about it
<ul>
<li>Like come on, even <em>ICQ</em> had more granularity: (sarcasm in case it wasn't obvious)<br />
<img src="/assets/Media/nogoodim/icqStatuses.png"width="200"></li>
</ul>
</li>
<li>A thing I like about Discord is that I'm able to quickly see at a glance if my friends are up to, like what they're coding or how the game they're playing is going</li>
<li>It allows me to see if they might be busy or if I can join in for some activity</li>
<li>The feature was made for gaming in mind, because that's for who Discord started out as, but since then mostly molded into a generic form of 'rich' i.e. extended Presence</li>
<li>None else supports something like this, XMPP can be ahead of the curve in this regard</li>
<li>This has way more technical depth required to implement, so I struggle to give much implementation suggestions aside from pointing at <a href="https://discord.com/developers/docs/rich-presence/how-to">Discord's Rich Presence</a></li>
<li>Update: XMPP folks have informed me about <a href="https://xmpp.org/extensions/xep-0107.html">XEP-0107: User Mood</a>, <a href="https://xmpp.org/extensions/xep-0108.html">XEP-0108: User Activity</a>, <a href="https://xmpp.org/extensions/xep-0118.html">XEP-0118: User Tune</a> and <a href="https://xmpp.org/extensions/xep-0196.html">XEP-0196: User Gaming</a> which are all extensions to provide enhanced status.
<ul>
<li>The fact that I missed them probably shows that I'm not around for too long :^)</li>
<li>This obviously erodes my point and this makes me in retrospect look a bit silly, I'll keep it here with this note.</li>
<li>Maybe these extensions could be genericized in some form? It'd be interesting to see why there is lack of interest for it.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="nitpick:-dead-mailing-lists?">Nitpick: Dead mailing lists? <a href="#nitpick:-dead-mailing-lists?">#</a></h3>
<p>Update: Daniel Gultsch themselves <a href="https://gultsch.social/@daniel/112728124245290207">has chimed in to explain that most conversation happens over XMPP</a> (hi I'm flattered), hence the lack of activity on the mailing lists. Thanks!</p>
<p><a href="https://xmpp.org/community/mailing-lists/">XMPP.org has a list of mailing lists</a>, however when you actually check the <a href="https://mail.jabber.org/hyperkitty/">Hyperkitty GUI</a> for them, only the ones involved in the standardization process are actively used. This is pretty confusing to me and I don't really understand why it's this way, are there actually just no sysadmins talking about XMPP administration for example?</p>
<h3 id="trailblazer-left-in-the-dust">Trailblazer left in the dust <a href="#trailblazer-left-in-the-dust">#</a></h3>
<p>It's been a good while since XMPP has been big in the 2000s but it feels like it never recovered since, I will still prefer it out of a probably incorrect sense of 'technical correctness' compared to Matrix. Although I'm not sure if I'm not just becoming those IRC holdouts, just for XMPP.</p>
<h2 id="signal">Signal <a href="#signal">#</a></h2>
<p>I personally think that Signal doesn't qualify for this discussion. It competes with the likes of Telegram and Whatsapp, I am only including it so that I won't get techbro'd about it.<br />
I see a lot of evangelization of Signal which annoys me a lot. The people who evangelize Signal around where this post is shared get their car hit with exploding hammers. Please read the room.</p>
<p>It's fine. <a href="https://en.wikipedia.org/wiki/Signal_Protocol#Influence">The cryptography is world class</a>, the <a href="https://github.com/signalapp/Signal-Server">Server</a> and <a href="https://github.com/signalapp/Signal-Android">Client</a> are open sourced and have a good amount of eyes on it. The UI/UX is solid and takes the usual Whatsapp style UI approach, it works but it's also not really what we're looking for. I don't like that it requires a phone number, I don't like that their server has zero documentation on selfhosting, I don't like that the client exposes as far as I know no way to switch out the server (even for us techies) if you were to host your own server.</p>
<p>I think that centralizing everything on their servers will end up biting them for growth, especially as a non-profit that's reliant on donations. I think this might shatter the evangelization of Signal in the long run, Telegram had way too much money to subsidize them for user growth and even they're starting to squeeze their users for money. Signal will have to beg their users for donation, find alternative revenue streams for their service (such as creating a for-profit entity <a href="https://en.wikipedia.org/wiki/Mozilla_Corporation">similar to Mozilla</a>) or die trying.</p>
<h2 id="irc">IRC <a href="#irc">#</a></h2>
<p>To be honest, I don't want to write about it.<br />
Read <a href="https://jlu5.com/blog/im-tired-of-irc-heres-why">this article by James Lu</a> instead because it actually contains the complaints of someone who more actively uses IRC than I do. This sums up my thoughts on it with more authority. There's plenty I could add but I don't feel confident in writing about it.</p>
<p>IRC as pioneer also does not do 1:many, see my thoughts about this paradigm at the XMPP section.</p>
<h1 id="misery">Misery <a href="#misery">#</a></h1>
<p>Here's the call of action: <em><strong>The time to develop better oIM is now.</strong></em> Discord has been getting more hostile for a while and is beginning with pestering their users, the tensions will continue until they inevitably mess up and cause a user exodus.</p>
<p>That's the time we should be using to draw people onto open alternatives instead of another centralized platform like Guilded or Revolt, instead oIM continues to be on the backfoot catching up with the design philosophies that Discord established a decade ago.</p>
<p>I think what I am asking for is essentially impossible, I want a OSS instant messaging solution with the tight UI/UX of Discord but that isn't as centrally tied to a company like Element is. Doing that is way way way easier said than done, I'd call it essentially impossible. I don't have a solution for this, this is not an article where I shill my own project so we become adversaries against all the other solutions mentioned.</p>
<p>But I can pretty plainly state that existing solutions feel bad, because of diverse technical and social issues. I will still use them and I commend everyone who has the patience to be flexible because I highly doubt there will be a one glove fits all solution.</p>
<p>But please, whatever happens, please let's not repeat Discord.<br />
Discord became big because Microsoft started burning their good faith with the Skype userbase,<br />
so we switched to Discord and now Discord is burning their good faith with us.</p>
<p>How often should we repeat this until we realize where it leads?</p>
  </p></main>
 
 </body>
 </html>
 ]]></content:encoded>
  <link>https://blog.hellbeast.eu.org/There%27s%20no%20good%20IM%20-%20Open%20IM%20is%20failing.html</link>
  <guid isPermaLink="false">9a32cb5c-7687-5ea5-ec36-bf910408b72a</guid>
  <pubDate>Wed, 25 Dec 2024 06:10:10 +0000</pubDate>
 </item> <item>
  <title>Fedi fucking sucks (as a minor)</title>
  <description>&lt;div class=&quot;mbox&quot;&gt;         &lt;h3&gt;DO NOT GO AFTER ANY INDIVIDUALS&lt;/h3&gt;         &lt;p&gt;While I need to reference some people directly or indirectly here, they bear no fault and I hold no grudge against anyone. Don&#x27;t act dumb.&lt;/p&gt; &lt;/div&gt;   &lt;div class=&quot;mbox&quot;&gt;       </description>
  <content:encoded><![CDATA[
     <!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Fedi fucking sucks (as a minor)</title>
    <meta property="og:title" content="Fedi fucking sucks (as a minor)" />
    <meta property="og:type" content="article" /> <meta property="og:image" content="/assets/Media/fediminorpost/mastoArtPoll.png" />
 <meta property="og:image:url" content="/assets/Media/fediminorpost/mastoArtPoll.png" /> <meta property="og:description" content="&lt;div class=&quot;mbox&quot;&gt;         &lt;h3&gt;DO NOT GO AFTER ANY INDIVIDUALS&lt;/h3&gt;         &lt;p&gt;While I need to reference some people directly or indirectly here, they bear no fault and I hold no grudge against anyone. Don&#x27;t act dumb.&lt;/p&gt; &lt;/div&gt;   &lt;div class=&quot;mbox&quot;&gt;       " />
    <link rel="alternate" type="application/rss+xml"
     title="RSS Feed for Regalia's blog"
     href="/feed.xml" />
    <script src="/main.js"></script>
    <script src="/at-date.js"></script>
    <link rel="stylesheet" href="/styles.css">
    <link rel="stylesheet" href="/pygments.css">
  </head>
  <body>
  <nav class="tag-toc"><details><summary>Blogging</summary>
<ul>
<li><a class="toc-link"  href="/Addendum%20to%20Fedi%20fucking%20sucks%20%28as%20a%20minor%29.html">Addendum to Fedi fucking sucks (as a minor)</a></li>
<li><a class="toc-link" aria-current="page" href="/Fedi%20fucking%20sucks%20%28as%20a%20minor%29.html">Fedi fucking sucks (as a minor)</a></li>
<li><a class="toc-link"  href="/Github%20banned%20me%20for%20no%20understandable%20reason.html">Github banned me for no understandable reason</a></li>
<li><a class="toc-link"  href="/My%20Pains%20with%20Firefox%20Sync.html">My Pains with Firefox Sync</a></li>
<li><a class="toc-link"  href="/There%27s%20no%20good%20IM%20-%20Open%20IM%20is%20failing.html">There&#x27;s no good IM - Open IM is failing</a></li>
<li><a class="toc-link"  href="/VRChat%20Video%20Codec%20testing.html">VRChat Video Codec testing</a></li>
<li><a class="toc-link"  href="/index.html">index</a></li>
</ul>
</details>
<ul>
</ul>
  <hr>  <a class="heading heading-1" href="#18+-accounts-interact-with-me-(even-if-i-don't-want-them-to)">18+ accounts interact with me (even if I don't want them to)</a></p>  <a class="heading heading-1" href="#i-can't-interact-with-non-nsfw-posts-on-18+-accounts">I can't interact with non-NSFW posts on 18+ accounts</a></p>  <a class="heading heading-1" href="#there's-no-standard-way-to-tell-if-someone-is-18+">There's no standard way to tell if someone is 18+</a></p>  <a class="heading heading-2" href="#why-don't-you-use-filters?">Why don't you use filters?</a></p>  <a class="heading heading-2" href="#different-types-of-18+">Different types of 18+</a></p>  <a class="heading heading-2" href="#nuance:-there's-no-arbiter-of-nsfw">Nuance: There's no arbiter of NSFW</a></p>  <a class="heading heading-1" href="#this-is-not-normal">THIS IS NOT NORMAL</a></p>  <a class="heading heading-1" href="#some-arguments-against-this">Some arguments against this</a></p>  <a class="heading heading-2" href="#minors-shouldn't-be-on-the-internet-anyway">Minors shouldn't be on the internet anyway</a></p>  <a class="heading heading-2" href="#why-don't-you-just-stop-using-fedi?">Why don't you just stop using Fedi?</a></p>  <a class="heading heading-2" href="#why-are-you-so-sensitive-against-people-doing-nsfw?">Why are you so sensitive against people doing NSFW?</a></p>  <a class="heading heading-2" href="#why-don't-you-go-to-those-safe,-corporate-social-media-platforms-then?">Why don't you go to those safe, corporate social media platforms then?</a></p>  <a class="heading heading-2" href="#minors-are-immature,-that's-why-i-don't-want-them-around">Minors are immature, that's why I don't want them around</a></p>  <a class="heading heading-1" href="#can-i-help?">Can I help?</a></p>  <a class="heading heading-1" href="#conclusion">Conclusion</a></p>  <hr>  </nav>
  <main class="text" >    <h2>Fedi fucking sucks (as a minor)</h2><p><div class="mbox">
        <h3>DO NOT GO AFTER ANY INDIVIDUALS</h3>
        <p>While I need to reference some people directly or indirectly here, they bear no fault and I hold no grudge against anyone. Don't act dumb.</p>
</div>
<div class="mbox">
        <h3>This article has an addendum</h3>
        <p>You may view it <a href="Addendum to Fedi fucking sucks (as a minor).html" class="internal-link">here.</a>
</p>
</div>
<p>This post is difficult for me to write, because it's addressed to the void since I don't think anything here can be &quot;&quot;fixed&quot;&quot;. Keep in mind this is my personal experience, don't let me ruin your fun.</p>
<p>Here's my central point: Fedi is an overwhelmingly adult space rather than having an equal split. There is <a href="https://mastodon.art/@jsstaedtler/110668308409683502">this poll with 35k voters including me by jsstaedtler</a> which shows that Fedi is overwhelmingly inhabited by adults, that's the best data I can get for you without scraping.</p>
<p><img src="/assets/Media/fediminorpost/mastoArtPoll.png"></p>
<h1 id="18+-accounts-interact-with-me-(even-if-i-don't-want-them-to)">18+ accounts interact with me (even if I don't want them to) <a href="#18+-accounts-interact-with-me-(even-if-i-don't-want-them-to)">#</a></h1>
<p>I'm going to crack this egg because I think it's more major.<br />
I'm a doggirl and I like being one because that makes me happy, I'm going to save you the essay about this.<br />
Whenever I post about doggirl stuff and it takes off a little on the network,</p>
<p><img src="/assets/Media/fediminorpost/WaggingPost.png"><br />
<img src="/assets/Media/fediminorpost/acc1.png"><br />
<img src="/assets/Media/fediminorpost/acc1_2.png"></p>
<p><img src="/assets/Media/fediminorpost/Kissinger.png"><br />
Happens with non-doggirl posts.</p>
<p>I've noticed that my doggirl posts that do well usually get adopted into (pet play) NSFW circles, which I don't inherently mind (glad you're enjoying the post).</p>
<p>I don't really want afterdark accs interacting with my stuff, because it's an unequal relationship. They see and interact with my posts but I'm supposed to pretend they don't exist? How fucked up is that?<br />
That's ignoring that I'm underage.</p>
<p>I used to have a post where I wrote my feelings about this down with nuance, but nobody reads that.<br />
So I put down that I'm a minor in my bio, nobody reads that either.</p>
<p><img src="/assets/Media/fediminorpost/ProfileNotice.png"><br />
Now I have this very sternly written message at the top and some people still don't read this.</p>
<p>My friend probably puts it best,</p>
<blockquote>
<p>tfw at this rate you'll have to prefix [nsfw dni] to your name and that sucks</p>
</blockquote>
<h1 id="i-can't-interact-with-non-nsfw-posts-on-18+-accounts">I can't interact with non-NSFW posts on 18+ accounts <a href="#i-can't-interact-with-non-nsfw-posts-on-18+-accounts">#</a></h1>
<p>Say I see a funny post on my feed.</p>
<p><img src="/assets/Media/fediminorpost/WarThunderFunnyPost.png"></p>
<p>If you're an adult, you simply go &quot;haha&quot; and like it.<br />
If you're a minor, you are expected to check <em>every single profile</em> if they want you around or not.<br />
You skim over the profile for terms like <code>18+</code> or 🔞 , you don't see it so you share it.</p>
<p>And your skimming is punished with someone not using the terms you expect</p>
<p><img src="/assets/Media/fediminorpost/YouWentTooFast.png"></p>
<p>Second example, here's eclairwolfs profile (no harm to you, you're lovely)</p>
<p><img src="/assets/Media/fediminorpost/claireProfile.png"><br />
Did you spot it? You did because you probably have your undivided focus on this, I can tell you I don't when I'm browsing federated feed.</p>
<p>And funny story, I actually didn't spot <code>no minors</code>, I spotted it all the way down here in the fields first.</p>
<p><img src="/assets/Media/fediminorpost/claireProfileFull.png"></p>
<p>So I suck up to my mistake, remove my interactions on their posts and DM them that it was my bad.</p>
<p><img src="/assets/Media/fediminorpost/claireDM.png"><br />
(thanks for being so kind, by the way)</p>
<p>Anyway, you go on with your day.<br />
But this entire ordeal, everything here repeats ad nauseam. Over and over and over.</p>
<p><img src="/assets/Media/fediminorpost/FederatedFeed.png"></p>
<h1 id="there's-no-standard-way-to-tell-if-someone-is-18+">There's no standard way to tell if someone is 18+ <a href="#there's-no-standard-way-to-tell-if-someone-is-18+">#</a></h1>
<p>Some profiles contain NSFW content and that is fine, but there's no singular way for me to opt out of seeing that. Profiles can't mark themselves as sensitive, admins at most can force accounts to require a warning to open but that's a instance moderation tool.</p>
<h2 id="why-don't-you-use-filters?">Why don't you use filters? <a href="#why-don't-you-use-filters?">#</a></h2>
<p><img src="/assets/Media/fediminorpost/FilterScreenshot.png"><br />
I already do, Mastodon doesn't filter the keywords in the bio and fields of profiles for whatever reason.</p>
<p>Even if it worked, it wouldn't be useful here because eighteens is not on my filter. Do I block eighteens, eighteen? I might block legitimate profiles with this because eighteen is a normal word.</p>
<p>Even then, filters are terrible for this because you enter the <a href="https://en.wikipedia.org/wiki/Scunthorpe_problem">Scunthorpe problem</a>.<br />
Say I block the word &quot;minors&quot; for profiles (in order to block <code>no minors</code>), now I blocked someone because they wrote in their profile they're a minor. Or because they think people who use MDNI (minors do not interact) are weird.</p>
<p>Every phrase I block is a tightrope between blocking things I might otherwise want to see, because this is the only user mechanism for me to deal with NSFW content.</p>
<h2 id="different-types-of-18+">Different types of 18+ <a href="#different-types-of-18+">#</a></h2>
<p>Going back to Claire for a moment, if you're a attentive reader, you might have spotted something here.<br />
They don't seem to mind that people interact with the SFW stuff, and that's actually something I've noticed on Fedi a lot, there are users who simply don't want minors to interact with their NSFW content but end up restricting their entire account.</p>
<p>This for example why a profile filter also wouldn't work, users use 🔞 to indicate that some content is NSFW, even if their entire profile isn't.</p>
<h2 id="nuance:-there's-no-arbiter-of-nsfw">Nuance: There's no arbiter of NSFW <a href="#nuance:-there's-no-arbiter-of-nsfw">#</a></h2>
<p>Here's why I think this can't ever be fixed, what is NSFW or not depends from person to person.</p>
<p>Closely related example, I spoke about being a doggirl with a Discord chat of mine.<br />
TLDR; It makes me happy, it makes my friends happy, everyone is having fun.<br />
A person in there jumped to petplay, similar to what I mention above.</p>
<p><img src="/assets/Media/fediminorpost/dsc_petplay.png"><br />
I don't have a grudge against this, it's a misunderstanding, but here something that was (to me) not NSFW got subtext immediately with a NSFW topic.</p>
<p>There is no algorithm to decide if something is NSFW, there's no ruleset you can adopt, there's no standard you can develop.<br />
Expression is too diverse to dictate something like that. Trying to stamp out NSFW content is a fruitless endeavor, if you need examples, look at Tumblr.</p>
<h1 id="this-is-not-normal">THIS IS NOT NORMAL <a href="#this-is-not-normal">#</a></h1>
<p>I'll say it straight, this is not normal. There has never been social media where I felt this afraid of interacting with people, where I have to guess at times if my vis-à-vis wants to talk to me or not because their profile contains something other than what they actually feel.</p>
<p>I think for some people this is a brainworm imported from NSFW Twitter, where it's not possible to do mixed content accounts.</p>
<p>Guess what? On Fedi, we have this magical tool called content warnings that prevent showing posts to people who might not want to see it. If you tag your stuff with content warnings, I can actually filter it properly and someone must consent into seeing it.</p>
<p>At that point, you bear no responsibility for minors on your NSFW content and you have my full permission to scold them.</p>
<p>But despite this mechanism existing, a lot of accounts simply don't use it and restrict me and others from ever being able to interact with them. And that's sad.</p>
<h1 id="some-arguments-against-this">Some arguments against this <a href="#some-arguments-against-this">#</a></h1>
<h2 id="minors-shouldn't-be-on-the-internet-anyway">Minors shouldn't be on the internet anyway <a href="#minors-shouldn't-be-on-the-internet-anyway">#</a></h2>
<p>Taking this argument in good faith and full seriousness, it's impossible to live in the modern day without having exposure to the internet. The internet (in)directly has become a vehicle for people to live out human rights such as the access to information or freedom of assembly, you'll need to make the argument that people who are not 18 should not be entitled to those if it's over the web.</p>
<p>But ignoring that, this argument is silly. Do you actually think people who turn 18 automagically will know how to use the internet? They won't, you will create a generation of outcasts who will struggle with the technology and need to catch up with the rest.</p>
<h2 id="why-don't-you-just-stop-using-fedi?">Why don't you just stop using Fedi? <a href="#why-don't-you-just-stop-using-fedi?">#</a></h2>
<p>I might.</p>
<h2 id="why-are-you-so-sensitive-against-people-doing-nsfw?">Why are you so sensitive against people doing NSFW? <a href="#why-are-you-so-sensitive-against-people-doing-nsfw?">#</a></h2>
<p>I'm not, I don't care what you do as long as it's consensual and you're enjoying yourself. But the interactions above are partially not consensual and I'm not enjoying myself.</p>
<h2 id="why-don't-you-go-to-those-safe,-corporate-social-media-platforms-then?">Why don't you go to those safe, corporate social media platforms then? <a href="#why-don't-you-go-to-those-safe,-corporate-social-media-platforms-then?">#</a></h2>
<p><a href="https://glub.slipfox.xyz/notes/9mwytozpr8wgd2dk">https://glub.slipfox.xyz/notes/9mwytozpr8wgd2dk</a><br />
Also, go fuck yourself.</p>
<h2 id="minors-are-immature,-that's-why-i-don't-want-them-around">Minors are immature, that's why I don't want them around <a href="#minors-are-immature,-that's-why-i-don't-want-them-around">#</a></h2>
<p>If you read this far, you clearly don't think I'm so immature that you can't stand me. But age doesn't matter up to a point for maturity, I've seen some really behaved and mature minors and some literal manchildren.</p>
<h1 id="can-i-help?">Can I help? <a href="#can-i-help?">#</a></h1>
<p>Sure, do you have adults only account? If you do, do you actually post primarily NSFW content, to the point where you need to lock off your entire account?</p>
<p>If not, please write into your bio something like <code>Minors DNI with my NSFW posts, always behind CW</code>. This way, I know that you both orbit around NSFW people, you use CWs and you don't mind me interacting with your account for non-NSFW things.</p>
<p>Oh and please don't take it for granted that your account can interact with something. Thanks.</p>
<h1 id="conclusion">Conclusion <a href="#conclusion">#</a></h1>
<p>In conclusion, my experience on Fedi is where I'm distrustful of every account I see because I don't know if I'm allowed to interact with them because I haven't hit the magic number.</p>
<p>And when I try to carve myself my own space around that, those same accounts come into <em>my space</em> where I explicitly say they shouldn't be in, which means I can't even be myself on my own to the greater network.</p>
<p>There's no fix because the problem is a structural / culture one that only really exists for a small subset of users.</p>
<p>This is bad and I don't feel very welcome here.</p>
  </p></main>
 
 </body>
 </html>
 ]]></content:encoded>
  <link>https://blog.hellbeast.eu.org/Fedi%20fucking%20sucks%20%28as%20a%20minor%29.html</link>
  <guid isPermaLink="false">ddafb380-ae1c-2f2f-0229-bb016dda1ee4</guid>
  <pubDate>Wed, 25 Dec 2024 06:10:10 +0000</pubDate>
 </item> <item>
  <title>Addendum to Fedi fucking sucks (as a minor)</title>
  <description>So uh. I published a text mostly in anger about a topic that I thought only affected me which I barely proofread and suddenly my article gets a round-trip around the Fediverse with minors thanking me for speaking about an issue that affects them as well.  </description>
  <content:encoded><![CDATA[
     <!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Addendum to Fedi fucking sucks (as a minor)</title>
    <meta property="og:title" content="Addendum to Fedi fucking sucks (as a minor)" />
    <meta property="og:type" content="article" /> <meta property="og:image" content="/assets/Media/fediminorpost2/OhGodMyBlog.webm" />
 <meta property="og:image:url" content="/assets/Media/fediminorpost2/OhGodMyBlog.webm" /> <meta property="og:description" content="So uh. I published a text mostly in anger about a topic that I thought only affected me which I barely proofread and suddenly my article gets a round-trip around the Fediverse with minors thanking me for speaking about an issue that affects them as well.  " />
    <link rel="alternate" type="application/rss+xml"
     title="RSS Feed for Regalia's blog"
     href="/feed.xml" />
    <script src="/main.js"></script>
    <script src="/at-date.js"></script>
    <link rel="stylesheet" href="/styles.css">
    <link rel="stylesheet" href="/pygments.css">
  </head>
  <body>
  <nav class="tag-toc"><details><summary>Blogging</summary>
<ul>
<li><a class="toc-link" aria-current="page" href="/Addendum%20to%20Fedi%20fucking%20sucks%20%28as%20a%20minor%29.html">Addendum to Fedi fucking sucks (as a minor)</a></li>
<li><a class="toc-link"  href="/Fedi%20fucking%20sucks%20%28as%20a%20minor%29.html">Fedi fucking sucks (as a minor)</a></li>
<li><a class="toc-link"  href="/Github%20banned%20me%20for%20no%20understandable%20reason.html">Github banned me for no understandable reason</a></li>
<li><a class="toc-link"  href="/My%20Pains%20with%20Firefox%20Sync.html">My Pains with Firefox Sync</a></li>
<li><a class="toc-link"  href="/There%27s%20no%20good%20IM%20-%20Open%20IM%20is%20failing.html">There&#x27;s no good IM - Open IM is failing</a></li>
<li><a class="toc-link"  href="/VRChat%20Video%20Codec%20testing.html">VRChat Video Codec testing</a></li>
<li><a class="toc-link"  href="/index.html">index</a></li>
</ul>
</details>
<ul>
</ul>
  <hr>  <a class="heading heading-1" href="#non-solutions">Non-Solutions</a></p>  <a class="heading heading-2" href="#profiles-marked-as-sensitive-/-nsfw-toggle">Profiles marked as sensitive / NSFW toggle</a></p>  <a class="heading heading-2" href="#split-brain-profiles">Split-brain profiles</a></p>  <a class="heading heading-2" href="#segregation">Segregation</a></p>  <a class="heading heading-2" href="#standardized-cw-tags">Standardized CW tags</a></p>  <a class="heading heading-1" href="#workarounds">Workarounds</a></p>  <a class="heading heading-2" href="#(mastodon)-profile-preview-on-hover">(Mastodon) Profile preview on hover</a></p>  <a class="heading heading-2" href="#web-extension-/-profile-markers">Web Extension / Profile Markers</a></p>  <a class="heading heading-1" href="#cold-truth">Cold Truth</a></p>  <a class="heading heading-1" href="#personal-stuff-(feel-free-to-skip)">Personal stuff (feel free to skip)</a></p>  <hr>  </nav>
  <main class="text" >    <h2>Addendum to Fedi fucking sucks (as a minor)</h2><p><p>So uh. I published a text mostly in anger about a topic that I thought only affected me which I barely proofread and suddenly my article gets a round-trip around the Fediverse with minors thanking me for speaking about an issue that affects them as well.</p>
<p><video src="/assets/Media/fediminorpost2/OhGodMyBlog.webm" controls></p>
<p>This caused a lot of discussion that I honestly was not prepared for so while I still have your attention, I'd clarify my thoughts on the things proposed.</p>
<p>I'll try to make this less ranty, so if you were expecting the same article again, sorry.<br />
Before we start,</p>
<div class="mbox">
        <h3>OPINION ZONE: I AM NOT AUTHORITATIVE ON ANY TOPICS</h3>
        <p>Please don't take this as gospel, I'm a single random person on the internet and what I say can be wrong or proven wrong in the future.</p>
</div>
<h1 id="non-solutions">Non-Solutions <a href="#non-solutions">#</a></h1>
<h2 id="profiles-marked-as-sensitive-/-nsfw-toggle">Profiles marked as sensitive / NSFW toggle <a href="#profiles-marked-as-sensitive-/-nsfw-toggle">#</a></h2>
<p>I want to get this early because that's something I've seen suggested the most, to the point where my post has managed to get <a href="https://github.com/mastodon/mastodon/issues/9468#issuecomment-1866361895">on the Mastodon issue tracker for the proposal</a>.<br />
It's not something I can support in good faith sadly, despite being the easiest option.</p>
<p><del>CEO of Mastodon</del> <a href="https://github.com/mastodon/mastodon/issues/9468#issuecomment-465408643">Gargron puts it best in that issue</a>:</p>
<blockquote>
<p>So the various problems, summarized, are:</p>
<ul>
<li>Avatar and header images of sensitive character (possibly also display name/bio itself)</li>
<li>People who always post NSFW stuff and don't want to always mark it as such</li>
<li>Even when posts are CW'd, some people don't like lots of NSFW posts in public timelines</li>
</ul>
<p>Unfortunately, we must also look at how Twitter handles things: Twitter hides detected NSFW accounts from search results and hashtag timelines (they don't have other public timelines), and hides the entire profile behind a &quot;sensitive content&quot; spoiler when you open it. People call this shadowbanning and are not happy to be on the receiving end of it.</p>
<p>I don't know how to resolve this situation. I thought that granular NSFW toggles per-post would satisfy everyone, but I was wrong, as people whose primary work output must be put behind a NSFW spoiler (like sex workers and adult artists) are not happy that their posts are disadvantaged like that, and many want to have avatars and headers reflecting their work.</p>
</blockquote>
<p>The problem with a software NSFW toggle for profiles is that your activity would be (by design) <em>disadvantaged</em> on the network. Just because you set your profile as NSFW doesn't mean you post NSFW all the time, but because of your designation, you are intentionally hampering your chances of being discovered.</p>
<p>This is ignoring the problem that what is and isn't NSFW (like I mentioned in the previous article) isn't cut and clear, which means there will likely be disagreements if profiles or posts are safe or not.</p>
<p>All of that together would probably cause the next non-solution,</p>
<h2 id="split-brain-profiles">Split-brain profiles <a href="#split-brain-profiles">#</a></h2>
<p>Here's my argument against people splitting their profiles between SFW and NSFW.</p>
<p>I think this is a hassle. Me talking about this is abstract because it's not an issue that I actually have (I don't have multiple Fedi accounts) but a concern.</p>
<p>Effectively we want to reduce the friction between switching accounts as much as possible, because if it's a hassle to switch between accounts, most people probably aren't going to bother.<br />
They'll probably post it on the account that <em>they're most comfortable with</em> which dilutes the point of splitting the accounts in the first place.</p>
<p>The entire selling point with the Fediverse is that it's not a hassle to talk with others, you can talk with others no matter who and where you are.*<br />
* Your mileage may vary.</p>
<p>Using multiple accounts isn't a foreign idea in the tech world and we can draw examples from platforms like *shivers* Google.</p>
<p><img src="/assets/Media/fediminorpost2/GoogleAccountSwitcher.png"><br />
For multiple accounts in the Fediverse, I use <a href="https://fedilab.app/">Fedilab</a> which ships out of the box with multi account features.<br />
<img src="/assets/Media/fediminorpost2/FedilabMultiAccountAdd.png"><br />
<img src="/assets/Media/fediminorpost2/FedilabMultiAccountContextMenu.jpg"><br />
Notice how Fedilab allows switching between accounts without needing to switch context, I think this is what makes multi-accounting useful.</p>
<p>For Mastodon, this doesn't exist. <a href="https://github.com/mastodon/mastodon/issues/380">The issue for it was opened in 2017 and probably won't be resolved anytime soon.</a><br />
<img src="/assets/Media/fediminorpost2/MastodonContextMenu.png"><br />
I can log out, but that'll require me to constantly type in my credentials and that's a major hassle.</p>
<p>Sure, there's workarounds for this like:</p>
<ul>
<li>using <a href="https://support.mozilla.org/en-US/kb/containers">Firefox Multi-Account containers</a> which maintains isolated contexts (&quot;containers&quot;)</li>
<li>registering on a separate instance, which does not share context with your main one and therefore allows you to run both accounts</li>
<li>using a completely different client which supports that</li>
</ul>
<p>But this all adds mental and technical complexity that is not inherently required.</p>
<h2 id="segregation">Segregation <a href="#segregation">#</a></h2>
<p>I'm going to wear my biases on my sleeve even if this topic feels like walking on eggshells, this strikes me as a weird adult-centric idea.</p>
<p>The idea is that underage people should have a separated space where they get to do underage things while the adults do their thing.</p>
<p>Aside from grooming which is an entirely separate discussion which I'm not qualified to talk about (if you write an article about it, hmu and I'll link you here), I don't see the problem with minors interacting with adults. A lot of my friends and people I interact daily with are adults and nothing nefarious happens.</p>
<p>I also think that this idea that minors and adults must inherently be separated is… strange?<br />
I feel like that sets the subtext that adults cannot be trusted to interact with minors and therefore minors must be protected from adults and themselves.<br />
That gives me a very bad gut feeling.</p>
<p>Assuming this idea gets implemented somehow by the <a href="https://nsindex.net/wiki/Violetism">Violetist</a> Goddess anyway, ignoring all the concerns and implementation details with that, we've now split the network away into the Fediverse and the gimped Ikea Småland Fediverse.</p>
<p><del>With some support from Gargron, we might be able to get ballpit support across the Fediverse!</del></p>
<p>Calling back to the poll,<br />
<img src="/assets/Media/fediminorpost/mastoArtPoll.png"><br />
You'd create a network that is significantly smaller than the rest of the network.</p>
<p>At what point should be people be allowed to graduate to the proper Fediverse?<br />
Seriously, you have to decide another magic number at what point someone is allowed on the real Fediverse to discuss topics with adults. Will they even be able to deal with the real network?</p>
<p>I personally think that minors should be given the tools and knowledge to safely engage with the network, this requires teaching them how to avoid and deal with bad actors and troubling topics, teaching tech literacy, as well as awareness from everyone else about red flags. But this also means giving them the agency to do so in the first place.</p>
<p>I wish I could say more concrete things, but that is probably a topic for another article by smarter people with better knowledge about this.</p>
<p>If that all has been unconvincing to you, I'm only afforded the soapbox to talk to you <strong>because</strong> the network doesn't discriminate based on age. A crux of my argument is that I want to be included, I want to join discussions, I want to have a voice here even if I haven't hit the magic age number yet (but I cannot because a lot of people restrict their entire account instead of posts)</p>
<h2 id="standardized-cw-tags">Standardized CW tags <a href="#standardized-cw-tags">#</a></h2>
<p>This one would technically be a workaround if I was super optimistic but I'm not.</p>
<p>In theory, we could propose a &quot;default&quot; or &quot;recommended&quot; set of content warnings that can be used to filter out content. Except that we (are supposed to) already do that with CWs like <code>lewd</code> and <code>nsfw</code>. In general, having a CW on something is better than having none, even if the phrase added isn't easily filterable.</p>
<p>But that requires actually using CWs in the first place too,<br />
<img src="/assets/Media/fediminorpost2/FederatedFeedAnon.png"><br />
<img src="/assets/Media/fediminorpost2/FederatedFeed2.png"></p>
<p>While I don't agree with a full standard for CWs, I do think there is value in creating a index of popularly used CWs (or lingo) as a resource for newcomers.<br />
As <a href="https://tech.lgbt/@solonovamax/111631995534363846">solonovamax</a> smartly brings up, a lot of CWs use shorthands that might be unclear if you don't know what they mean.<br />
(I only recently learned what <code>OH</code> meant and I've only been here for a few months lol)</p>
<p><img src="/assets/Media/fediminorpost2/SoloOnCWs.png"></p>
<h1 id="workarounds">Workarounds <a href="#workarounds">#</a></h1>
<p>These don't actually &quot;fix&quot; the problem but make things more bearable.</p>
<h2 id="(mastodon)-profile-preview-on-hover">(Mastodon) Profile preview on hover <a href="#(mastodon)-profile-preview-on-hover">#</a></h2>
<div class="mbox">
        <h3>Mastodon has hover cards now!</h3>
        <p>It took a while but behold: <a href="https://github.com/mastodon/mastodon/pull/30754" class="internal-link">it got implemented!</a>. This section is left as-is for historical value.</p>
</div>
<p>This has a Mastodon issue, see <a href="https://github.com/mastodon/mastodon/issues/14918">here</a>.</p>
<p><img src="/assets/Media/fediminorpost2/NobleHoverSuggestion.png"><br />
I saw Noble's take on the situation and I think I actually agree with this, having a profile preview sounds like a thing that would speed up the process of checking profiles.</p>
<p>In fact, apparently the idea was so good that <a href="https://github.com/mastodon/mastodon/issues/14918#issuecomment-716070734">Gargron used to work on the idea</a>:</p>
<blockquote>
<p>I had a branch with tooltips and was planning to eventually add this. I need to check the state of that branch...</p>
</blockquote>
<p>Anyway, we write the year 2023 and it's still not a thing, seemingly work having been abandoned.</p>
<p>If it's any comfort, fellow ball fetching connoisseur and friend Vipra &amp; the contributors of ProToots might actually <a href="https://github.com/ItsVipra/ProToots/pull/75">race the Mastodon team for doing this first</a> .</p>
<p><img src="/assets/Media/fediminorpost2/ProTootsPreviewCard.png"></p>
<h2 id="web-extension-/-profile-markers">Web Extension / Profile Markers <a href="#web-extension-/-profile-markers">#</a></h2>
<p>Continuing our journey with Vipra and doing webbed extensions,<br />
<img src="/assets/Media/fediminorpost2/VippyDsc1.png"><br />
<img src="/assets/Media/fediminorpost2/VippyDsc2.png"></p>
<p>I think having a web extension to provide markers like that could be useful but I'm incredibly worried about false positives from just parsing profiles, so I personally think it'd be a patchwork workaround.<br />
<em>However</em>, it might be worth doing R&amp;D on and seeing if it works or not. I personally wanted to work on it but my backburner keeps getting longer and longer.</p>
<p>I feel like in the worst case, you could probably do something like <a href="https://pronoundb.org/">PronounDB</a> for it (although obviously we should try to minimize central solutions like that).</p>
<p>This also obviously will require duplicate work for clients and other web interfaces to support this as well, so I think this would be closer to a long-term workaround.</p>
<h1 id="cold-truth">Cold Truth <a href="#cold-truth">#</a></h1>
<p>I've outlined a few solutions to you as best as I understand them and I hope we both can shake hands on that there is no easy solution for this.</p>
<p>The real solution is a culture shift by opening up the owners of MDNI accounts to question if they truly require the restriction therefore empowering more underage people to participate in the network, as well as showing mutual respect for each other by adding CWs your posts in good faith with words that can easily be understood and filtered by those who don't want to see it.</p>
<p>This way we can maintain profiles that contain mixed content and allow people (not limited to minors, I think this is something that affects ace people as well but I don't want to speak <em>for</em> them (you guys are still cool though, keep rocking)) to opt out of NSFW content if they want to.</p>
<p>But that's not as easy as writing a pull request unfortunately.</p>
<h1 id="personal-stuff-(feel-free-to-skip)">Personal stuff (feel free to skip) <a href="#personal-stuff-(feel-free-to-skip)">#</a></h1>
<p>Anyways, hello. I never intended to reach this sort of publicity with my post and when it did, I honestly was feeling like shit, I was feeling really nauseous, the night after that post was the worst non-nap sleep I've ever tracked. I was shitting bricks even, it's terrifying to think about that potentially thousands of people might have read my writing, the writing that I don't have a lot of self-esteem about.</p>
<p>But now that I have a soapbox with the option to either let this fizzle out in silence or give my last words before it actually does fizzle out, I'd rather take this and steer my words into the right direction.</p>
<p>I don't think I'm fit for this type of publicity, I don't think I can ever talk for the entirety of all underage Fedi people. If you're reading this and you have more to say on this, please, talk as much as you can!</p>
<p>As a community, we require more discussion and visibility about things like this, I can only write so much until I drop dead.</p>
<p>Anyway, I think I should play some video games and try to calm down from all of this.</p>
  </p></main>
 
 </body>
 </html>
 ]]></content:encoded>
  <link>https://blog.hellbeast.eu.org/Addendum%20to%20Fedi%20fucking%20sucks%20%28as%20a%20minor%29.html</link>
  <guid isPermaLink="false">92e10ea9-ab8a-f463-5bdb-257765252897</guid>
  <pubDate>Wed, 25 Dec 2024 06:10:10 +0000</pubDate>
 </item> <item>
  <title>My Pains with Firefox Sync</title>
  <description>Let me start first about how I got here.  Quite honestly, I didn&#x27;t use [Firefox Sync](https://www.mozilla.org/en-US/firefox/sync/) when it got introduced. I didn&#x27;t want to make an account for my web browser. ~~[(stares at Chrome users)](https://www.wired.c</description>
  <content:encoded><![CDATA[
     <!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>My Pains with Firefox Sync</title>
    <meta property="og:title" content="My Pains with Firefox Sync" />
    <meta property="og:type" content="article" /> <meta property="og:image" content="https://files.catbox.moe/abkdzd.png" />
 <meta property="og:image:url" content="https://files.catbox.moe/abkdzd.png" /> <meta property="og:description" content="Let me start first about how I got here.  Quite honestly, I didn&#x27;t use [Firefox Sync](https://www.mozilla.org/en-US/firefox/sync/) when it got introduced. I didn&#x27;t want to make an account for my web browser. ~~[(stares at Chrome users)](https://www.wired.c" />
    <link rel="alternate" type="application/rss+xml"
     title="RSS Feed for Regalia's blog"
     href="/feed.xml" />
    <script src="/main.js"></script>
    <script src="/at-date.js"></script>
    <link rel="stylesheet" href="/styles.css">
    <link rel="stylesheet" href="/pygments.css">
  </head>
  <body>
  <nav class="tag-toc"><details><summary>Blogging</summary>
<ul>
<li><a class="toc-link"  href="/Addendum%20to%20Fedi%20fucking%20sucks%20%28as%20a%20minor%29.html">Addendum to Fedi fucking sucks (as a minor)</a></li>
<li><a class="toc-link"  href="/Fedi%20fucking%20sucks%20%28as%20a%20minor%29.html">Fedi fucking sucks (as a minor)</a></li>
<li><a class="toc-link"  href="/Github%20banned%20me%20for%20no%20understandable%20reason.html">Github banned me for no understandable reason</a></li>
<li><a class="toc-link" aria-current="page" href="/My%20Pains%20with%20Firefox%20Sync.html">My Pains with Firefox Sync</a></li>
<li><a class="toc-link"  href="/There%27s%20no%20good%20IM%20-%20Open%20IM%20is%20failing.html">There&#x27;s no good IM - Open IM is failing</a></li>
<li><a class="toc-link"  href="/VRChat%20Video%20Codec%20testing.html">VRChat Video Codec testing</a></li>
<li><a class="toc-link"  href="/index.html">index</a></li>
</ul>
</details>
<ul>
</ul>
  <hr>  <a class="heading heading-1" href="#firefox-sync">Firefox Sync</a></p>  <a class="heading heading-2" href="#syncing-delay">Syncing delay</a></p>  <a class="heading heading-3" href="#syncing-is-hard-on-mobile-/-in-general">Syncing is hard on mobile / in general</a></p>  <a class="heading heading-2" href="#same-for-sending-tabs">Same for sending tabs</a></p>  <a class="heading heading-1" href="#key-stuck,-key-stuck,-please">KEY STUCK, KEY STUCK, PLEASE</a></p>  <a class="heading heading-2" href="#on-the-sort-of...-positive">On the sort of... positive</a></p>  <a class="heading heading-4" href="#no-harm-to-anybody">No harm to anybody</a></p>  <hr>  </nav>
  <main class="text" >    <h2>My Pains with Firefox Sync</h2><p><p>Let me start first about how I got here.<br />
Quite honestly, I didn't use <a href="https://www.mozilla.org/en-US/firefox/sync/">Firefox Sync</a> when it got introduced. I didn't want to make an account for my web browser. <del><a href="https://www.wired.co.uk/article/google-chrome-browser-data">(stares at Chrome users)</a></del></p>
<p>That changed when I started dualbooting Windows and Linux. Being able to access my browser data was important for me for the transition from Windows. If all my browser data was on Windows, then I would rather boot to Windows so that I can access it all. Having two isolated profiles was a problem.</p>
<p>So, I did what any reasonable person would do in this scenario: Create a cross-OS NTFS partition for shared data between the operating systems</p>
<p>That worked for a while really well actually! But at some point the data corrupted. My extensions stopped working and went poof until I disabled and enabled them again, loading websites took forever as if it didn't load sites at all. I remember I used a website to test if the storage of Firefox was working correctly, but I can't find the exact URL.<br />
I believe the cache / storage of Firefox corrupted somehow, but I didn't have the expertise or skills to seriously analyse that.</p>
<p>While I could have just fixed that issue, creating a new profile and moved on with my day, it proved to me that cross-OS storage was probably unreliable.</p>
<p>So, what else can I use? I look up the web and</p>
<h1 id="firefox-sync">Firefox Sync <a href="#firefox-sync">#</a></h1>
<p>That leads us here. The premise is simple, you log into your Firefox account and you can sync your settings, autofill things and history to other devices. Alongside that, you can also send tabs to your different devices in case you wish to work somewhere else.</p>
<p>And honestly, that's all I could ask for Sync but there's some glaring issues.</p>
<h2 id="syncing-delay">Syncing delay <a href="#syncing-delay">#</a></h2>
<p>There is a delay for Syncing between devices. The main job of this feature is to synchronize my browser elements to other devices. When I open Firefox on Mobile for example, I expect my history to be there ASAP.</p>
<p>Right as I'm writing this, I have an article open about the Hippocratic Oath.<br />
So say, I want to go downstairs and talk with somebody about the rabbit hole I went into.<br />
I pick up my phone, I open the browser history on my mobile Firefox Developer edition and it's not there!</p>
<p>So I check the Account tab, I press Sync Now. I check again and it's not there.<br />
So I go on Desktop, check the Account button and<br />
<img src="https://files.catbox.moe/abkdzd.png" alt="Firefox Desktop being stuck on &quot;Syncing...&quot;" /><br />
ah.</p>
<p>So after I ask for a manual sync on Desktop, resync on Mobile again, I can actually view my updated browser history.</p>
<p>It can take a bit before history properly synchronizes, if at all. That's a massive pain and hampers this system.</p>
<h3 id="syncing-is-hard-on-mobile-/-in-general">Syncing is hard on mobile / in general <a href="#syncing-is-hard-on-mobile-/-in-general">#</a></h3>
<p>I disagree! I have another thing synced between my mobile and desktop (hello potential attackers), I sync my <a href="https://keepass.info">KeePass</a> database file between my phone and my PC using <a href="https://syncthing.net">Syncthing</a>.</p>
<p>Despite the limitations of Android, Syncthing manages to perfectly sync my password database without a hitch and without noticeable delay.<br />
I don't mind if Firefox runs in the background like a lot of apps do (Telegram, Syncthing) if this allows the app to more reliably operate (if a toggle is provided of course).</p>
<h2 id="same-for-sending-tabs">Same for sending tabs <a href="#same-for-sending-tabs">#</a></h2>
<p>Sync allows you to send tabs to your device, I get a notification or a tab opens on my device. And honestly, this feature can be a bit of a dice roll.</p>
<p>I believe that's an Android issue though and probably closely related to everything above. Now that I have recently opened Firefox and often, the notification for the sent tab is almost instant. But I don't always have Firefox open, especially when I work at my desktop.</p>
<p>This is probably due to Android not allowing apps to have background activity without workarounds or only work delayed. I frankly aren't educated enough on the topic to elaborate much more on this as much as I'd like to.</p>
<h1 id="key-stuck,-key-stuck,-please">KEY STUCK, KEY STUCK, PLEASE <a href="#key-stuck,-key-stuck,-please">#</a></h1>
<p>As much as I can bear those issues, there is an issue that I seriously cannot understand. <strong>Firefox Accounts does not have <a href="https://en.wikipedia.org/wiki/WebAuthn">WebAuthn</a>!</strong> That's unforgivable.<br />
If you breach my Firefox Account, you can cause a lot of damage. Firefox Sync can synchronize: <em><strong>Credit cards, Logins and passwords, Addresses</strong></em>, History, Bookmarks, Open tabs, Settings, Addons.</p>
<p>If I were to save all my data into Firefox and sync it this way, an attacker breaching my account and becoming a synced device could cause a lot of damage!</p>
<p><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1464888">There exists an issue on Bugzilla from 5 years ago as of writing</a> which has been closed and there's a Mozilla Ideas.... Idea about <a href="https://connect.mozilla.org/t5/ideas/webauthn-for-firefox-accounts/idi-p/29211">Firefox Accounts WebAuthn</a> which has been untouched.</p>
<p>How is this acceptable at this year? Big names in tech have already adopted WebAuthn and Mozilla shouldn't lag behind for an account which has so many critical things that should never ever get in the hands of someone else.</p>
<p>(sigh)</p>
<p>I digress.</p>
<h2 id="on-the-sort-of...-positive">On the sort of... positive <a href="#on-the-sort-of...-positive">#</a></h2>
<p>As harshly as I'm criticizing Sync, I do want to commend Mozilla for not making a walled garden. <a href="https://github.com/mozilla-services/syncserver">mozilla-services/syncserver</a> has a Python server for Sync, <a href="https://github.com/mozilla/fxa">mozilla/fxa</a> a NodeJS server for accounts and provides guides <a href="https://mozilla-services.readthedocs.io/en/latest/howtos/run-sync-1.5.html">here</a> and <a href="https://mozilla-services.readthedocs.io/en/latest/howtos/run-fxa.html">here</a> on how to host your own Accounts and Sync server.<br />
That's really good! If you don't trust or like Mozilla, you can simply run the server yourself. Security of these becomes your responsibility with this, and you aren't required to have an online component to sync your browsers.</p>
<p>While that last part might seem silly, <a href="https://twitter.com/ryanleesipes/status/1550249569144823808">Sync is also being implemented into Thundebird soon™</a>! I could see how for example organisations or people who really value their internal emails might not wish to have them on an external online component (even if Mozilla promises to encrypt it).</p>
<p>... With that said, that repository is a Python 2.7 server that's unmaintained.<br />
The syncserver repo reads:</p>
<blockquote>
<p><strong>Note that this repository is no longer being maintained</strong>. Use this at your own risk, and with the understanding that it is not being maintained, work is being done on its replacement, and that no support or assistance will be offered.</p>
</blockquote>
<p><a href="https://www.python.org/doc/sunset-python-2/">Python 2 also is no longer maintained.</a></p>
<p>Maintainer <code>jrconlin</code> <a href="https://github.com/mozilla-services/syncserver/issues/189#issuecomment-569951788">explains in issue 198 on Dec 31, 2019:</a></p>
<blockquote>
<p>First off, the team tasked with this (services-engineering) have been working on the new server (<a href="https://github.com/mozilla-services/syncstorage-rs/">syncstorage-rs</a>). The goal there is to make supporting Sync for millions of folks better. With the current python version, it's possible for us to lose your data if you don't have multiple clients doing regular refreshes. For us, that means using a different data storage back-end. This does not mean that we're requiring stand alone servers to do the same, and we're working hard to ensure that you can still use your SQL db of choice.</p>
<p>Needless to say, moving hundreds of millions of accounts to a new storage system is... tricky. We're moving slowly and carefully to make sure that we don't screw up. (We're also a pretty small team working on this, thus some of the radio silence since we're head down trying to get this working.)</p>
<p>[...]</p>
<p>So, the executive summary:</p>
<ol>
<li>Syncserver 1.5 should continue to be safe under python 2.7 for the short term.</li>
<li>You may be able to run Syncserver 1.5 under Pypy 2.7 if some critical security bug hits python 2.7.</li>
<li>We're working on a new rust based syncserver and hope to have it available with migration scripts in the next 6 months.</li>
</ol>
</blockquote>
<p>So yay, there's a Rust server coming! That surely will mean we don't have to use an outdat-<br />
<img src="https://files.catbox.moe/7u94aj.png" alt="Github Readme of syncstorage-rs that reads: &quot;2. Setup a local copy of syncserver, with a few special changes to syncserver.ini; make sure that you're using the following values (in addition to all the other defaults):&quot;" /></p>
<p>... Well, it's only a storage server I suppose.</p>
<p>Reading into <a href="https://blog.mozilla.org/services/2020/09/15/the-future-of-sync/">Mozilla Blog's &quot;The Future of Sync&quot;</a> article written in 2020, it seems like the idea for the <a href="https://github.com/mozilla-services/syncstorage-rs/">mozilla-services/syncstorage-rs</a> is to become the eventual rewrite and replacement for the Python 2 syncserver.</p>
<p>I understand Rome was not built in one day, but now we write the futuristic year of 2023. LLMs are the hottest thing as AI writes you code, poems, songs and even creates ungodly art by amalgamating millions of images with tags,</p>
<p>and Mozilla uses software that hasn't been maintained since roughly three years to synchronize your porn history.</p>
<h4 id="no-harm-to-anybody">No harm to anybody <a href="#no-harm-to-anybody">#</a></h4>
<p>Again, as harsh as what I've written is, I don't mean this to trash talk the people who work on this.<br />
They're doing the best they can and I only wish to have the things I don't enjoy of Sync written in a place, especially since I'm likely required to use it going forward.</p>
<p>Lots of love to you folks and thanks for helping me sync my stuff!</p>
  </p></main>
 
 </body>
 </html>
 ]]></content:encoded>
  <link>https://blog.hellbeast.eu.org/My%20Pains%20with%20Firefox%20Sync.html</link>
  <guid isPermaLink="false">5642af1a-ea00-8b69-79a6-4c36c3adef01</guid>
  <pubDate>Wed, 25 Dec 2024 06:10:10 +0000</pubDate>
 </item></channel>
</rss>