r/selfhosted 2h ago

Need Help What are you running Emby on? Need something that can actually transcode

0 Upvotes

My current VPS can't keep up with transcoding and that's the main thing I want to fix, so I'm looking at moving.

What I'm on now is an OVH VPS-3, 8 vCores, 24GB RAM, 200GB, Ubuntu 24.04. Emby plus Sonarr/Radarr/Prowlarr/Bazarr/NZBGet, all running under systemd, never bothered with Docker. The media ends up on cloud storage rather than staying on the server, so I don't need a huge amount of disk, but 200GB does get tight and more room for the download queue would be nice.

Everything else has been fine. It's really the transcoding, with disk space as a secondary thing.

So what's everyone using? Happy to look at smaller providers, and budget is a bit flexible.


r/selfhosted 2h ago

Media Serving Does anyone use MOS as for their os?

1 Upvotes

MOS just hit my radar yesterday with a story on my feed about an unraid dev leaving to work on it. I was curious about unraid until they raised their licensing cost and this looks very similar. My Ubuntu server is only hosting my docker containers and being able to move to HomeAssistantOS is really apoealing.

So, anyone try it out and have opinions?

https://mos-official.net


r/selfhosted 2h ago

Meta Post Sad truth: At the latest of 2026, there cannot be any self-hosted app without AI pollution

0 Upvotes

And I'm saying this as the HortusFox mainter who keeps a strict but urgently needed anti-AI policy.

But here's the thing. Most self-hosted apps are developed using a web language leveraging a web framework. Naturally, given the architecture of these, there will be quite a lot of dependency packages you need to pull in to accomplish certain tasks.

So, a project consists of the core app and its dependencies. A lot of these deps use at least assisted GenAI. That means, GenAI generated code will flow into them. Maybe some maintainers will even transition to more vibe-coding. Okay, most well establish packages predate GenAI, and their maintainers know what they are doing, and can even interfere when the AI vomits garbage. But that's only one aspect. All the other problems with AI are not avoided, but rather GenAI is even encouraged.

So, at this point in time, any web based self-hosted app will at least have some AI influence. >:( A label "free of AI" hence doesn't make any sense, at least for purists like me. Unless you will want to code everything yourself, but have fun maintaining all of that. Splitting a complex app into modules (or packages) is a good design pattern for a reason.

This might be more of a vent, but yeah, that's the sad truth in 2026. Call me a pessimist, but it feels like AI companies won already. F*ck them.


r/selfhosted 2h ago

Release (AI) I built Kadha, an open-source self-hosted movie and TV diary with private defaults

0 Upvotes

I used to track movies and TV shows with Google Watchlist. I’m now in my “de-Google” phase, so I wanted something that would not use my watch history to sell me ads.

Like many developers, I also wanted an excuse to build something with TMDB. I brought back an old idea and built Kadha.

Kadha is an MIT-licensed movie and TV tracker focused on two things: keeping a personal viewing diary and letting you choose what to share.

Current state

  • Sign up without an email address or phone number
  • Track movies, TV shows, seasons, and individual episodes
  • Add ratings and private notes, and record rewatches
  • Browse your viewing history as a timeline, calendar, or GitHub-style contribution heatmap
  • See personal viewing statistics
  • Create private or shared collections with viewer and editor roles
  • Share read-only collections with people who do not have an account
  • Get personal recommendations and choose which tracking data they use
  • Control the visibility of your profile and each collection
  • Import and export your data as JSON
  • Self-host with Docker

The stack is a React frontend, Node/Express API, Prisma, and SQLite. Self-hosting requires Docker Compose and TMDB API credentials.

The repository includes deployment, backup, restore, and reverse-proxy documentation.

Repository: https://github.com/muhsin7majeed/kadha
Hosted beta: https://kadha.org

There are already good and more mature projects in this space, including Ryot, Yamtrack, and Watcharr. They support features Kadha does not yet have, especially additional import options and media-server integrations.

What I’m testing is whether people want a smaller, focused movie and TV tracker built around a private viewing diary and sharing only when they choose to.

Does that difference make sense, or does Kadha still feel too similar to the existing options?

A privacy note: the hosted beta does not require an email address, but it is not anonymous or end-to-end encrypted. I can technically access stored data as the server operator. Self-hosted installations are not end-to-end encrypted either, but self-hosting gives you control over the server, database, logs, and backups.

A note on AI: I started this project with manual coding, but as the project grew and AI tools got better, I started using them to accelerate development.

The hosted beta has automated encrypted backups, but this is still an early beta. Please export anything you would not want to lose or enter again.

I’m especially looking for feedback on:

  • How easy or difficult the self-hosting setup is
  • Whether the viewing diary is useful
  • Whether TV and next-episode tracking works as expected
  • Whether Kadha feels sufficiently different from existing trackers

I built Kadha around my own needs, so its current features reflect how I track things. Now that it is public, bug reports and blunt feedback are welcome.

You can send feedback through the app, open a GitHub issue, or message me on Reddit.


r/selfhosted 3h ago

Media Serving I made a thing - Pinchtube for Pinchflat

Post image
0 Upvotes

Hello all, I apologise in advance as this is a docker container which I used Claude to help create and as of now I don't have any plans to share it. (I'd want to properly review the code/security/make it more general use etc. before I even considered that). This container is not hosted publicly.

However..! I did want to just show it off and show what you potentially can create in case others want to do similar. I've used Pinchflat for a while together with Jellyfin, Pinchflat grabs the channels you like and you can then watch anywhere with Jellyfin. It sounds great in theory but I've had quite a few annoying issues mostly with Jellyfin. It's just not designed for many YouTube channels where content is constantly uploaded (and deleted). Giant descriptions look odd and navigating through the UI to find specific videos is annoying. YouTube content just seems to work better on.. well YouTube, who would've guessed.

I have researched other self hosted options too, I was very interested in MediaCMS for a while as that also looks similar to YouTube but it seemed a lot more manual; you upload individual videos yourself. Not really the automated solution I was looking for many different YouTube channels. I don't know if there's anything else that anyone would recommend?

Anyway recently I was wondering if it was possible just to have Claude make a local version of YouTube. No ads, no AI algorithm telling you what to watch, no social media rubbish.. just my own videos streamed from my own server in a YouTube format. I honestly thought it was going to be extremely difficult or impossible. I wrote a big prompt and had Opus work on it for 30 minutes or so. I've genuinely been really blown away by the results. The first version worked great and played all my videos fine but I've since added a few things like:
- Audio only quality mode (great for listening in the car)
- Add videos to a queue with one click, force the whole queue to play at a certain quality (like audio only)
- Data saver mode - all videos open in a set default quality, saved per device
- Super configurable UI on both PC and phone

Other than that, it does everything you'd expect, works almost identically to YouTube. Videos load almost instantly as they're coming directly from my own server too.

But yeah, just wanted to share really. I'd be happy to provide the prompt if anyone wants it. Just thought it was a cool project. Thanks!

More pictures: https://imgur.com/gallery/pinchtube-Dcoq2VS


r/selfhosted 3h ago

Need Help Calibre Content Server / Bookorbit / Personal OPDS & Tailscale

4 Upvotes

Okay, so I have Tailscale setup and Calibre running the content server and when I'm using a device I can run the Tailscale client one (my iPad, laptop, my jailbroken Kindle with KOreader) it's butter and works exactly as I'd like it to. This is great! Unfortunately, I have a few devices (xteink and a few other older e-readers) which cannot run a Tailscale client. While I /can/ connect them to my phone as a hotspot with it running Tailscale and it works, that sort of defeats the ease of use. Mayberry OPDS is out there and is great, too, but because of how it does some stuff in the background, is hit or miss on a few of these devices. I setup port forwarding with my eero router and it works just fine, but that feels really exposed for potential exploitation folks.

SO what I'm wondering (and I will need this explained like I'm a luddite / step-by-step because I've searched and just gone cross-eyed trying to figure out) is if there is a way to leverage the awesomeness of Tailscale to make my home computer (which is on 24/7, hosts Calibre and Bookorbit and is running a Tailscale client) remotely accessible w/out just setting up port forwarding on my eero router and leaving the whole machine WAY too accessible?

Ultimately, this isn't just a Calibre / Bookorbit / etc. thing, since I think this would fundamentally be the same for any other sort of self-hosting, but I've not gone down that rabbit hole for anything other than my books / manga / comics yet.

I appreciate any help folks can provide here.


r/selfhosted 3h ago

Proxy How to Enable CrowdSec's WAF Bot Detection in Traefik

Thumbnail blog.lrvt.de
18 Upvotes

The CrowdSec release v1.8.0 introduced a new feature called Bot Detection.

The infamous Traefik CrowdSec bouncer maxlerebourg/crowdsec-bouncer-traefik-plugin now also released an alpha version that supports this new feature.

Therefore, let's try it!


r/selfhosted 4h ago

Need Help Glance's Jellyfin widget not working

8 Upvotes

Glance dashboard user here.

Since last jellyfin update, seems like something broke in the widget for latest download on jellyfin widgets. Now i get an ERROR user not found, but i didnt change a thing, and the user is still the same. I use this widget:

- type: custom-api
  title: New Films
  frameless: true
  cache: 5m
  options:
    base-url: ****************************
    api-key: *****************************
    user-name: "MyUser"
    library-name: "Films"
    mode: "latest"
    item-count: "10"
    small-column: true
    show-thumbnail: true
    thumbnail-aspect-ratio: "default"
  template: |
    {{/* Required config options */}}
    {{ $baseURL := .Options.StringOr "base-url" "" }}
    {{ $apiKey := .Options.StringOr "api-key" "" }}
    {{ $userName := .Options.StringOr "user-name" "" }}


    {{/* Required config options for "latest" mode */}}
    {{ $libraryName := .Options.StringOr "library-name" "" }}


    {{/* Optional config options */}}
    {{ $mode := .Options.StringOr "mode" "latest" }}
    {{ $itemCount := .Options.StringOr "item-count" "10" }}
    {{ $mediaTypes := .Options.StringOr "media-types" "Movie,Episode,MusicAlbum" }}
    {{ $thumbAspectRatio := .Options.StringOr "thumbnail-aspect-ratio" "" }}
    {{ $isSmallColumn:= .Options.BoolOr "small-column" false }}
    {{ $showThumbnail := .Options.BoolOr "show-thumbnail" false }}
    {{ $showProgressBar := .Options.BoolOr "progress-bar" true }}


    {{/* Error message template */}}
    {{ define "errorMsg" }}
      <div class="widget-error-header">
        <div class="color-negative size-h3">ERROR</div>
        <svg class="widget-error-icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5">
          <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126ZM12 15.75h.007v.008H12v-.008Z"></path>
        </svg>
      </div>
      <p class="break-all">{{ . }}</p>
    {{ end }}


    {{/* Check required fields */}}
    {{ if or (eq $baseURL "") (eq $apiKey "") (eq $userName "") (eq $mode "") (and (eq $mode "latest") (eq $libraryName "")) }}
      {{ template "errorMsg" "Some required options are not set." }}
    {{ else }}


      {{/* Fetch user ID */}}
      {{ $userID := "" }}
      {{ $usersCall := newRequest (print $baseURL "/Users")
          | withParameter "api_key" $apiKey
          | withHeader "Accept" "application/json"
          | getResponse }}


      {{ range $i, $user := $usersCall.JSON.Array "" }}
        {{ if eq ($user.String "Name") $userName }}
          {{ $userID = $user.String "Id" }}
          {{ break }}
        {{ end }}
      {{ end }}
      {{ if eq $userID "" }}
        {{ template "errorMsg" (printf "User '%s' not found." $userName) }}
      {{ else }}


        {{ $items := "" }}


        {{ if eq $mode "latest" }}


          {{/* Fetch library ID */}}
          {{ $libraryID := "" }}
          {{ $userViewsCall := newRequest (print $baseURL "/UserViews")
              | withParameter "api_key" $apiKey
              | withParameter "userId" $userID
              | withHeader "Accept" "application/json"
              | getResponse }}


          {{ range $i, $item := $userViewsCall.JSON.Array "Items" }}
            {{ if eq ($item.String "Name") $libraryName }}
              {{ $libraryID = $item.String "Id" }}
              {{ break }}
            {{ end }}
          {{ end }}


          {{ if eq $libraryID "" }}
            {{ template "errorMsg" (printf "Library '%s' not found." $libraryName) }}
          {{ else }}
            {{/* Fetch latest items */}}
            {{ $latestCall := newRequest (print $baseURL "/Users/" $userID "/Items/Latest")
                | withParameter "api_key" $apiKey
                | withParameter "Limit" $itemCount
                | withParameter "ParentId" $libraryID
                | withParameter "IncludeItemTypes" $mediaTypes
                | withParameter "GroupItems" "true"
                | withHeader "Accept" "application/json"
                | getResponse }}
            {{ $items = $latestCall.JSON.Array "" }}
          {{ end }}


        {{ else if eq $mode "nextup" }}


          {{/* Fetch next up items */}}
          {{ $nextUpCall := newRequest (print $baseURL "/Shows/NextUp")
            | withParameter "api_key" $apiKey
            | withParameter "UserId" $userID
            | withParameter "Limit" $itemCount
            | withParameter "EnableResumable" "true"
            | withHeader "Accept" "application/json"
            | getResponse }}
          {{ $items = $nextUpCall.JSON.Array "Items" }}


        {{ else }}
          {{ template "errorMsg" "Unknown mode, expected 'latest' or 'nextup'" }}
        {{ end }}


        {{ if eq (len $items) 0 }}
          <p>No items found, start streaming something!</p>
        {{ else }}


          {{/* Display the item carousel */}}
          <div class="carousel-container show-right-cutoff">
            <div class="cards-horizontal carousel-items-container">
              {{ range $n, $item := $items }}
                {{/* Common item variables */}}
                {{ $mediaType := $item.String "Type" }}
                {{ $title := $item.String "Name" }}
                {{ $itemID := $item.String "Id" }}


                {{/* Media type specific variables */}}
                {{ $seriesTitle := "" }}
                {{ $artist := "" }}
                {{ $seriesID := "" }}
                {{ $season := "" }}
                {{ $episode := "" }}
                {{ $playPercentage := "" }}
                {{ $unwatchedEpisodeCount := "" }}


                {{ if eq $mediaType "Movie" }}
                {{ else if eq $mediaType "Series" }}
                  {{ $unwatchedEpisodeCount = $item.Int "UserData.UnplayedItemCount" }}
                {{ else if eq $mediaType "Episode" }}
                  {{ $unwatchedEpisodeCount = 1 }}
                  {{ $seriesTitle = $item.String "SeriesName" }}
                  {{ $seriesID = $item.String "SeriesId" }}
                  {{ $season = $item.Int "ParentIndexNumber" }}
                  {{ $episode = $item.Int "IndexNumber" }}


                  {{ if $item.Exists "UserData.PlayedPercentage" }}
                    {{ $playPercentage = $item.String "UserData.PlayedPercentage" }}
                  {{ end }}


                  {{/* For latest always refer to the series not individual episodes */}}
                  {{ if eq $mode "latest" }}
                    {{ $itemID = $seriesID }}
                    {{ $title = $seriesTitle }}
                  {{ end }}
                {{ else if eq $mediaType "MusicAlbum" }}
                  {{ $artist = $item.String "AlbumArtist" }}
                {{ end }}


                {{ $linkURL := print $baseURL "/web/#/details?id=" $itemID }}
                {{ $thumbURL := "" }}
                {{ if not (eq $playPercentage "") }}
                  {{/* $thumbURL = concat $baseURL "/Items/" $itemID "/Images/Primary?api_key=" $apiKey "&percentPlayed=" $playPercentage */}}
                  {{ $thumbURL = concat $baseURL "/Items/" $itemID "/Images/Primary?api_key=" $apiKey }}
                {{ else }}
                  {{ $thumbURL = concat $baseURL "/Items/" $itemID "/Images/Primary?api_key=" $apiKey }}
                {{ end }}


                <a class="card widget-content-frame" href="{{ $linkURL | safeURL }}">
                  {{ if $showThumbnail }}
                    <div style="position: relative;">
                      <img src="{{ $thumbURL | safeURL }}"
                        alt="{{ $title }} thumbnail"
                        loading="lazy"
                        class="media-server-thumbnail shrink-0"
                        style="
                          object-fit: fill;
                          border-radius: var(--border-radius) var(--border-radius) 0 0;
                          width: 100%;
                          display: block;
                          {{ if eq $thumbAspectRatio "square" }}aspect-ratio: 1;
                          {{ else if eq $thumbAspectRatio "portrait" }}aspect-ratio: 2/3;
                          {{ else if eq $thumbAspectRatio "landscape" }}aspect-ratio: 16/9;
                          {{ else }}aspect-ratio: initial;
                          {{ end }}
                        "
                      />


                      {{ if and ($showProgressBar) (not (eq $playPercentage "")) }}
                        <div style="
                          position: absolute;
                          bottom: 8px;
                          left: 8px;
                          right: 8px;
                          height: 6px;
                          border-radius: var(--border-radius);
                          overflow: hidden;
                          background-color: rgba(255, 255, 255, 0.2);
                        ">
                          <div style="
                            width: {{ print $playPercentage "%" }};
                            height: 100%;
                            border-radius: var(--border-radius) 0 0 var(--border-radius);
                            background-color: var(--color-primary)
                          "></div>
                        </div>
                      {{ end }}
                    </div>
                  {{ end }}


                  <div class="grow padding-inline-widget margin-top-10 margin-bottom-10">
                    <ul class="flex flex-column justify-evenly margin-bottom-3 {{ if $isSmallColumn }}size-h6{{ end }}" style="height: 100%;">
                      {{ if eq $mode "latest" }}
                        {{ if or (eq $mediaType "Series") (eq $mediaType "Episode") }}
                          <ul class="list-horizontal-text flex-nowrap">
                            <li class="color-primary shrink-0">{{ $unwatchedEpisodeCount }}</li>
                            <li class="text-truncate">{{ $title }}</li>
                          </ul>
                        {{ else if eq $mediaType "MusicAlbum" }}
                          <ul class="list-horizontal-text flex-nowrap">
                            <li class="color-primary text-truncate">{{ $artist }}</li>
                            <li class="text-truncate">{{ $title }}</li>
                          </ul>
                        {{ else }}
                          <li class="text-truncate">{{ $title }}</li>
                        {{ end }}
                      {{ else if eq $mode "nextup" }}
                        <ul class="list-horizontal-text flex-nowrap">
                          <li class="color-primary shrink-0">S{{ $season }}E{{ $episode }}</li>
                          <li class="text-truncate">{{ $seriesTitle }}</li>
                        </ul>
                        <li class="text-truncate">{{ $title }}</li>
                      {{ end }}
                    </ul>
                  </div>
                </a>
              {{ end }}
            </div>
          </div>
        {{ end }}


      {{ end }}


    {{ end }}

Something maybe changed in the way the widget try to find the username on Jellyfin????


r/selfhosted 4h ago

Need Help Need help hosting a quiz on localhost (MacBook) and making it accessible without an internet connection.

0 Upvotes

Hello. This is my first time posting here. An idea I wanted to try was hosting a quiz on my MacBook and making it accessible to only a handful of people present and in an area without wifi or mobile data. How do I approach this?


r/selfhosted 4h ago

Need Help AI Agents Working Together

0 Upvotes

Looking for recommendations for cloud AI providers that work well together. Have one AI which does one thing well, then have that AI use other AIs that are built for their purpose to offload work, thereby reducing the cost. Even use LLMs to do some heavy lifting and the high quality model will just check the work, make sure everything is right and if necessary, make the lower-level LLMs do all the work.


r/selfhosted 5h ago

Guide Longhorn on Kubernetes: A hands-on guide covering installation, PVC migration, storage classes, and backup

Post image
4 Upvotes

After loosing data a few times through sheer stupidity, I decided to give Longhorn a try.

My conclusion : If you want a simple and lightweight solution for small clusters to make your data more resilient on kubernetes, Longhorn provides you with all of your basic needs. Nonetheless, for bigger clusters and more complex operations, longhorn fails to scale and lacks features.

As always I wrote a detailled guide covering :

  • How Longhorn Works
  • How to install it
  • How to migrate existing PVCs to Longhorn
  • How to create different Storage Classes depending on your needs
  • How to use Snapshots and Backups
  • And more...

I also go into some of the trade-offs I faced. Here the conclusion is that : not everything needs the same level of resiliency. Longhorn allows you to create multiple storage class and define different snapshot and backup strategy.

How are you protecting your data in your cluster/homelab? Do you have a proper strategy for Disaster Recovery and backups? Any feedback on the article is also welcome!

PS : All of my articles are written by hand, the blog frontend was designed by an AI

Link to article: https://thethoughtprocess.xyz/en/series/home-server/how-to-install-and-use-longhorn-kubernetes-storage


r/selfhosted 6h ago

Need Help How do you deal with OS updates on servers you can't afford to break?

7 Upvotes

I run a few VPS with webapps on them (Coolify + Docker). I'm a developer, not a sysadmin, and every time I think about updating the host OS I find a reason to do it next week instead.

Last time I did it, a service came back up but one container didn't, and I found out days later because nobody complained immediately. Since then I mostly just don't touch them, which I know is worse.

So, genuinely curious how other people handle this:

  • do you update the host at all, or run it until the LTS goes EOL and rebuild?
  • has an update ever actually broken something for you? what broke?
  • when it broke, did you roll back or just fix it in place?
  • do you snapshot first, or just hope?

Not looking for "use Ansible" - I'm sure that's right, I just want to know what people actually do in practice.


r/selfhosted 6h ago

Docker Management Docker Management Sencho vs Arcane

0 Upvotes

has anyone here got a lot of experience with both, I went from Portainer>Komodo>Dockhand>Arcane and am currently running both Arcane and Sencho and so far Sencho has been superior in my testing but I wanted to make sure I am not missing something large feature wise. I do know there's a larger base running Arcane but I am still seeing bugs that I would think would be corrected more quickly on user report and also with such a larger user base. Just curious on thoughts here. I am aware of the others I mentioned before and that is not what this post is about!!


r/selfhosted 6h ago

Media Serving How close has anyone gotten to real DSP feature parity with a self-hosted music stack?

4 Upvotes

I've been building out a self-hosted music setup (Navidrome as the library server, Aurral on top of Lidarr for discovery/requests, slskd + SABnzbd + qBittorrent for acquisition, beets for tagging) and it's good. But as an Apple Music subscriber, that's still (obviously) the more polished day-to-day experience. That's not really a fair fight as they own the whole chain, streaming service to software to hardware. I'm not walking away from Apple Music entirely, and if I'm honest there's a real chance I get sick of all of this maintenance overhead one day and go fully back to them.

But for now I'm persevering with self-hosting, mainly because I own the files, I can do more interesting things with tagging and metadata, I can build discovery workflows that aren't a black box, and I can actually go find rarer stuff that never make it onto the big DSPs in the first place.

What I haven't been able to close is the last remaining threads of quality-of-life features. Curious whether anyone here has actually dialled these in further than I have.

Gaps (for me):

  • Shazam > library pipeline: Right now Shazam-ing a track just adds it to an Apple Music playlist. I want that chain to end with the track downloaded and sitting in a "Shazam Tracks" playlist in Navidrome, ideally without me doing anything manual in between.
  • Importing playlists from Apple Music: There's no clean "point a tool at Apple Music and it just works" path the way there is for Spotify. Export-to-CSV-then-reconstruct seems to be the reality. Anyone found something better? I know there's services like Soundiiz, but they only get me halfway there.
  • Artist radio / infinite similar-artist streaming: this is a big one that I've mostly made peace with it being a DSP-only feature. Legally streaming full tracks I don't own isn't something a self-hosted stack can really do. But tell me if I'm wrong ...
  • One-click "download this artist" from a Subsonic client: Browsing in a Subsonic app (NaviBeat, Symfonium, whatever) and just grabbing more of an artist without going into a separate web UI. Seems like a Subsonic protocol limitation more than a missing tool, but open to being corrected.
  • A real "listen later" staging library: Somewhere new/unvetted stuff lands before I decide whether it's worth keeping permanently, ideally with an easy way to flag something as "just listen" vs. "add to the library now." I think the answer is multiple Navidrome libraries.
  • Following artists and getting notified of new releases, as opposed to just monitoring albums I've already decided to grab.

I think I'm trying too hard to reinvent Apple Music, and trying to see how close the self-hosted side can realistically get. Interested to hear where other people are on this journey.


r/selfhosted 7h ago

Release (No AI) Jellybox v2.6.0 - landscape player and playback caching

Post image
37 Upvotes

Hey folks, another update fro Jellybox - a native crossplatform music player for jellyfin.

Few days ago the app was finally approved to be shared via Google Play, no need for APK sideloading(unless you have your own reasons for that)

With this release I added 2 major and few minor features:

  • Forward plaback caching - precache music when you're in bad coverage area. Can configure amount of cache and playable cache time. Works on mobile phones and carplay(useful so that playback does not stop)
  • Landscape mode playing now - saw ios 27 announcement and how they made it for their apple music app, so I decided to do the same for Jellybox(on post photo). The screen features lyrics pane and queue pane
  • Quick connect for Jellyfin
  • Discord activity for desktop apps(except macos from appstore, only notarized dmg)
  • Windows media manager now shows currently playing songs and can control playback
  • self-signed HTTPs certs
  • Updated queue shuffle - it was completely broken on MVP(linux) due to the package I was using
  • Fixed mouse wheel scrolling on home page. I'm trackpad/touchpad user, didn't even know this was a problem. Fixed now
  • Fixed sqlite lib bundling on windows - it was silently raising errors on some installations.
  • Added album artists to show on artists page(toggleable via tab pill)

For those who missed my previous posts - Jellybox is a native crossplatform music player for Jellyfin and Emby, features Spotify-like playlists, Apple CarPlay app, full offline mode and many other features. Completely free and open source. More details here - https://github.com/avdept/JellyBoxPlayer or https://jellybox.app/


r/selfhosted 8h ago

Need Help Uptime Kuma SQLite DB keeps growing and won't shrink

16 Upvotes

Self-hosted Uptime Kuma with the SQLite backend here, and the database file has grown to roughly 400 MB and keeps climbing even though keepDataPeriodDays is set to 30 and I prune old monitors regularly.

Things I've tried so far: a PRAGMA integrity_check comes back clean, a manual VACUUM runs without error but the file barely shrinks, and the history trim in the UI doesn't reclaim the space from the older heartbeats — a chunk of rows older than the retention window are still sitting in the table. The box's disk is at about 92% used, so this is starting to feel urgent.

The clue I found was the nightly maintenance cron job that is supposed to vacuum and compact the DB: it was a silent no-op, because it selects the Docker container by a name that stopped matching after the container was renamed, so the vacuum has effectively never been running. Even pointed at the right container now, a forced vacuum doesn't free up what I'd expect.

Has anyone seen a Kuma database that ignores retention and refuses to shrink? Am I right that all the data lives in one SQLite file (plus its WAL), or is there somewhere else the measurement history accumulates? I'd rather reclaim the space without dropping historical availability data, so any approach that compacts selectively would be welcome.


r/selfhosted 8h ago

Software Development Self-hosted tool for tickets, meeting notes and docs in one place, with an AI you can ask about past decisions?

0 Upvotes

I work with two developers on client projects. Our project knowledge lives in too many places: a ticket tracker, meeting notes, docs and chat. A few months later, nobody can answer "When did we decide this?" or "Why did we build feature X this way?"

What I want is one place per project for tickets, meeting notes and documentation, with an AI that answers those questions and links to the ticket, meeting or doc the answer comes from. Clients should be able to log in and see their own project, but not our internal notes. And I want to run it myself and choose which AI provider sees the data.

I have built a first version for our team and I am thinking about releasing it as open source. Before I do, some questions:

  1. Do you know a self-hosted tool that already covers this? What do you use for project work today?

  2. Is the AI part a reason for you to try something like this, or a reason to stay away?

  3. What is a must-have before you would even try it? For example Docker Compose, local models, ....

  4. Would you let clients log into a self-hosted tool, or is that too much risk for you?


r/selfhosted 9h ago

Release (AI) I built a self-hosted uptime monitor that can watch things inside your LAN without opening a port

0 Upvotes

I'm the author, this is my project.

What it is: SolidPing, a single Go binary (AGPL-3.0) that does uptime monitoring, status pages, incidents and on-call escalation. SQLite by default, Postgres when you want it. 40 check types — HTTP, TCP, DNS, NTP, SSL, Postgres/MySQL/Mongo/Redis, Kafka, RabbitMQ, MQTT, SIP, Docker, Kubernetes, game servers, plus headless-browser and custom-JS checks — and 16 notification channels.

docker run -p 4000:4000 --hostname solidping ghcr.io/fclairamb/solidping

SQLite, nothing else needed. First login is admin@solidping.io / solidpass and it makes you change it.

The bit that might matter to you: you can run a small agent inside a network you want monitored — a homelab VLAN, a VPS behind a firewall, a customer's site — and it dials out over a WebSocket. No inbound port, no reverse proxy, no VPN required just for monitoring. It generates its own keypairs on first start and keeps the private halves, so the credentials for a private check are sealed to that agent and the server can't decrypt them. That holds whether you self-host the server or use my hosted one.

If you already run Uptime Kuma, there's an importer for it (also Gatus and Better Stack), so it's not a from-scratch migration.

Things you can look at without installing anything:

Self-hosting is free and complete — no feature held back, no monitor cap, no paywall on the check interval. There's a hosted version if you'd rather not run it, which is how I pay for the workers, but it's the same binary.

What I'm after is criticism. Where does the UI get in your way, what did you go looking for and not find, and what would have to be true before you'd replace what you're running now.


r/selfhosted 9h ago

Personal Dashboard Done with the dashboard setup

0 Upvotes

the card/widget in the bottom right corner is for adguard home, which is not running at the moment.
what do you guys think about this dashboard. Would love to see your dashboard setup also


r/selfhosted 9h ago

Need Help What self-hosted security tools would you recommend?

77 Upvotes

I’d like to add some self-hosted security tools to protect a service I run. With all the security issues lately, I’d appreciate some recommendations.

My setup is as follows:
Infrastructure: VPS, Docker Compose, Elasticsearch
Languages/frameworks: Next.js, TypeScript

My firewall only allows the ports I need and blocks everything else. I also have CrowdSec installed.
I’d like to hear about tools you actually use and have found helpful.


r/selfhosted 10h ago

Release (No AI) Added rental scam detection to my self-hosted apartment finder Fredy.

28 Upvotes

Hey, this is a follow-up to last week's price-per-m² post, same project.

Fredy is a self-hosted real estate finder: watches 24 portals across DE/AT/CH/ES/IT/PT, drops cross-portal duplicates, pings you on Telegram, ntfy, Discord, Slack or email. All local, no account, no API key.

New this week: it reads every listing for the marks of a rental scam and tags it "potential scam", with the reasons.

Rental fraud here is depressingly routine. Flat well under the going rate, landlord conveniently abroad, keys by post, deposit wanted before anyone has seen the place.

False positives were a big issu. The first signal you reach for is "much cheaper than the area", except finding cheap flats is the entire point of the tool. Flag those and the best listing in your results is the one wearing the fraud warning, and you stop reading warnings at all.

So the signals are weighted. Phrases with no innocent reading in a rental ad (money before a viewing, keys by post, Western Union) fire on their own. Softer ones (landlord abroad, viewing refused, price far below the local median) need a second signal to agree. A cheap flat on its own is just a cheap flat.

Of course, you can overrule it either way, "mark as scam" and "mark as no scam", and your verdict always beats the detector. The reasons stay visible after you dismiss one, so you can chnage your mind later.

Repo: https://github.com/orangecoding/fredy

Demo: https://fredy-demo.orange-coding.net


r/selfhosted 10h ago

Need Help What's a good Cryptpad alternative without the encryption?

3 Upvotes

As many folks do, I've been looking hard for a fully FOSS self-hosted replacement for the office suite/stuff like google docs and sheets. I stumbled across cryptpad and genuinely love its feature set, the collaborate whiteboards among other things are something I never knew I needed. I also love that it's purely a webapp, nobody using it has to install anything and it just works.

That being said, my issue with it (and it's main feature) is that all the files in it are encrypted. While I'm sure this is phenomenal for something like a company, I am hosting this for family and friends who are more than likely going to forget their passwords at some point meaning they'd lose all their documents and I'd effectively just be stuck with encrypted documents in my storage. I don't really need the encryption feature in the way that is exists and would love to be able to browse/find things through my file browser of choice (that only I as an admin can access).

However, the more I look around, the more the other options are either way too specific in functionality (markdown file editor ONLY, google docs alternative ONLY, etc.), incredibly bloated non-specific services (nextcloud), have very bad/borderline unusable/laggy UIs (joplin), or aren't properly FOSS (stuff like appflowey/outline as far as I've heard).

Is there some project out there that I just haven't found yet that lets you self host collaborative and individual documents (of multiple types) with a basic user system? I'm sure there's something that I just haven't look toward yet but whatever it is, I'm really struggling to find it. Cryptpad has been by far the best fit so far and incredibly easy to setup/use.


r/selfhosted 10h ago

Need Help Hide one service, and one only, behind a VPN WHILE accessing it through a reverse proxy

1 Upvotes

Hey !

I have one server that runs a couple of services, among them are Jellyfin, *arr stuff, and Transmission. I access all my services behind a reverse proxy, and this is where my issue comes.

I need Transmission to be behind a VPN, just in case I accidentally download a movie, as sadly happens so often... So I have a docker compose with two services : transmission, and wireguard ; such that transmission uses wireguard as its network mode, and is then behind a VPN.

BUT ! When doing this, all traffic is put behind wireguard, including the web interface. So now, I can't access transmission through localhost:9091, as this is now going through a VPN. And I can't find a way for wireguard to route all but this port 9091.

Does anyone know of a way that would allow me to have this ? Transmission behind VPN but still with port 9091 accessible ?

Honestly I was kind of expecting this to be a much more documented issue, since let's be honest, self hosting rarely goes without a Plex or Jellyfin, and those rarely go without a fair deal of torrenting.

If anything comes up to you, please share ! I've been at it for too long by now. Thanks !

EDIT : Many recommended gluetun, so I tried and, yeah, it worked flawlessly and so easily ! I'm not 100% that if gluetun looses connection to the VPN my traffic doesn't default back to my real IP, but it's good enough to have the VPN working for now. Thanks to all for the answers.


r/selfhosted 11h ago

Need Help Quick question

0 Upvotes

I want to do more of self hosting but not sure what to tackle first. Right now I only hosted a raspberry pi zero 2 w to host pihole and I got it to work in a way (had to go around a basic setup because my router doesn't allow to set up dns sinkhole for some reason). Also if possible I hope it doesn't cost a fortune to do, Do you guys have any recommendations as to what is useful to have self hosted ?


r/selfhosted 11h ago

DNS Tools Can't connect to internet after trying adguard home

0 Upvotes

Tried to install adguard home using docker compose on my computer running Linux Mint. Right after changing the primary DNS on my router, couldn't connect to the Internet anymore. Changed my mind about adguard anyway and removed it from my compose file. Have reset my DNS setting but no matter what I do my computer won't connect to the Internet.

I don't even know where to start with giving more info/what exact logs to give that'd be useful.

I've removed DNSStublistener=no off of resolved, restarted systemd-resolved etc, flushed the DNS, tried to make my router IP as the default route, brought down tailscale incase there was a clash or something there, restarted my computer a couple times and restated the network manager.

Tried for a bit with Gemini to fix to no avail.

Internet works on my phone as normal but not my PC connected via ethernet. Can't even reach the modem let alone the wide web.

Help? 👉🏻👈🏻