Skip to content

What's new at ElfHosted?

Approaching production

Although it's fairly arbitrary, July was our month of beta testing (June being "alpha", when things were only semi-working), and August will be our first month of "production". Most of the design questions are stabilized now (for example, BYO VPN for torrent clients, hardware transcoding, etc), the guts of the platform is now open-sourced, and it feels as if the next step is to increase the user base, in order to (a) fund the infrastructure, and (b) surface any further issues / improvements to be found.

Hardware Transcoding now available

Thanks to helpful elf-a-testers, we now have hardware transcoding support in Jellyfin, Emby, and Plex (PlexPass required).

Why is this a big deal?

Previously, the streamers would use CPU resources to transcode any media they deemed incompatible with your client. The only way to prevent one streamer hogging all the CPU was to apply a CPU limit (4 vCPUs) to each streamer, roughly tested to support up to 3 1080P CPU transcodes. This still places a heavy load on our nodes, given each node only has 16 CPUs. Oh, and 4K transcoding was just a total no-go, even with 4 vCPUs!

After enabling Intel QuickSync Video (QVS) transcoding in Jellyfin, I was able to transcode 4K HEVC media, consuming only 250m (¼ of a vCPU)1 Needless to say, this makes our platform a lot more scalable!

How well does it work?

I.. don't know. Plex has one lonely toggle which turns transcoding on/off, and Jellyfin has about 2 pages of advanced options which affect transcoding performance! It'll take a little trial-and-error to find the sweet spot per streamer, and it's impossible to test all variations / clients. So I've rolled transcoding support out to all (beta) users, and reduced the CPU allocation to the streamers to 500m (½ vCPU), so that CPU-based transcoding will fail. This may be a little extreme, but given we can now transcode 4K on ¼ vCPU, it's more transcoding grunt than we had previously.

It's likely that we'll refine the transcoding support / parameters over the next few days, so please feel free to play around, test, and send feedback in Discord.

Of course, as always, for optimal experience from your streamer, avoid any transcoding whatsover. (Direct-playing 4K media consumes 0.01 vCPU!s)

Read on for smaller announcements...

RIP ElfVPN

ElfVPN was a shared VPN which allowed the torrent clients (Deluge, qBittorrent, rutorrent) to be evaluated / used without having to bolt-on a BYO VPN subscription.

Shortly after we ramped up our test users from r/seedboxes, the VPS which ran ElfVPN was terminated by the provider for DMCA abuse.

After some consideration (details below), I've decided not to replace it, and instead withdrawn the ElfVPN products from the store.

TL;DR - From now on, in order to use the torrent clients, you will need to BYO VPN...

Passwordless logins FTW

A few weeks ago, I started looking into integrating our store / SSO login with OwnID, to solve the fact that when your SSO session times out, you have to re-sign into the store (also, in 2023, protecting all your services behind a simple password seems a little.. too little)

The development got stuck behind decomissioning longhorn (another long story, it didn't scale well!), but after finally reproducing the prod store in dev for an accurate bug report to the OwnID team.. it worked perfectly ๐Ÿคฆโ€โ™‚๏ธ

So... we now have passwordless / biometric logins for the store / SSO! ๐Ÿฅณ

Health alerts, badges, GDrive & WebDAV

Just after I bragged yesterday about the increase in pod count, a bug in the webhook handler caused all subsequent orders to get stuck for ~10 hours! If you'd made a change to your subscription during that time, or signed up, you'd have been wondering where your apps went and why nothing provisioned ๐Ÿคฆโ€โ™‚๏ธ

Here's what this looked like...

Prometheus graph showing pod count with a 10h plateu indicating webhook failure

I squished the bug and hardened the webhook receiver, then tried to process all the backlogged orders. If you received a few duplicate confirmations this morning, that'll be why. If you placed an order and didn't receive it, try cancelling and then resuming the order to force the update.

Health Alerts

What I didn't expect is how many users would sign up for service and not jump into Discord, or get in touch when things didn't work. Discord makes announcmements / updates so easy, that I realized I hadn't invested enough effort into other communications channels, like email (an emailed welcome on purchase is still on the to-do-asap list)

Since we're still at beta-level stability, and I don't want a reputation for being unreliable, I wanted a way to alert users to changes to their apps' health - I discovered that we can do this with our existing health dashboard (using Gatus), by enabling email alerting. After a brief poll of the #elf-friends channel, I've now turned this on, so if you've got any unhealthy apps (and there are a few still), you'll get one email after 20m of downtime, and one email upon recovery.

Here's what the email looks like...

Introducing RDT Client

Today we added RDT Client, a web interface to manage your torrents on Real-Debrid, AllDebrid or Premiumize.

Screenshot of RDT client

It supports the following features:

  • Add new torrents through magnets or files
  • Download all files from Real-Debrid, AllDebrid or Premiumize to your local machine automatically
  • Unpack all files when finished downloading
  • Implements a fake qBittorrent API so you can hook up other applications like Sonarr, Radarr, Lidarr, etc

The fake qBittorrent API is the killer feature - it means you can hook your Premiumize (etc) subscription to the Arrs, and auto-source and download directly as if you were using qBittorrent locally.

See more on the app page, or perform a 24h trial / subscription at the store!

ElfHosted Business model

Shortly after receiving our first actual payment for services, Stripe got in touch and asked me to clarify how the business works, to ensure we're supportable under their Restricted Businesses list

I responded as below, and thought that this would be useful to blog, since it succintly summarizes my thoughts about how ElfHosted operates.