Thanks, that narrows it down a lot. Fathom renders through libmpv and currently leans on its default frame timing, where a well-tuned client instead syncs frames to the display refresh.
Two questions would let me pin it down:
Which official client are you comparing against: the web client in a browser, or the Jellyfin Media Player desktop app? It matters because a browser hands video to a hardware overlay that is tear-free by design, while Jellyfin Media Player runs the same engine Fathom does, just configured differently.
What OS are you on, and what is your monitor's refresh rate (60, 120, 144Hz)? On Linux, which desktop or compositor?
On the fix side, the next dev build adds a "Smooth Motion (Display Sync)" option under Settings > Playback > Advanced that paces frames to your monitor's refresh. That is the usual cure for this kind of judder, so please try it when you have a moment.
The same build also adds a Diagnostics screen under Settings > About. Open it, turn on Diagnostic Logging, start the video again, let the stutter happen for a few seconds, then use "Copy Diagnostics" and paste the result here. That shows me the exact decode path and frame timing instead of me guessing. It strips out anything sensitive before copying.
Glad 10.11.11 fixed the login. Since it's the same with hardware acceleration on or off, decoding isn't the bottleneck, it's likely delivery or frame timing. Two quick checks: in your Jellyfin dashboard, is that session Direct Play or Transcode? And does the same file play smoothly in plain mpv/VLC (Fathom uses libmpv underneath)? That'll tell us if it's server/network vs. something on the Fathom side.
Yeah, unfortunately that's a Google account/billing thing, not a playback thing. Fathom only fetches the video stream on your machine; it doesn't touch your account or Premium. That "verify your country" check is much stricter than playback and wants a residential IP in the country, so datacenter VPN ranges like Proton's can get "flagged". Nothing i think a media client alone can get around.
Sorry about that. That message is a network timeout, so the Quick Connect request isn't getting a response back within the window. Since you had to enter the server address to reach that screen, plain reachability and your cert are should be fine, so it's something specific to the Quick Connect path.
Two things would help me narrow it down:
Does normal username/password sign-in work against the same server, or does that time out too? If password works and only Quick Connect hangs, that isolates it to the Quick Connect endpoints.
Is Jellyfin behind a reverse proxy (nginx/Caddy/Traefik), and which Jellyfin version?
Good idea, I think this could be a solid fit for Fathom. I haven't tried TubeArchivist myself yet, but I'll add it to my to-do list to look into. Thanks for the pointer!
Interesting idea, but that's out of scope for this app, Fathom is just a Jellyfin/YouTube/Seerr client, with no torrent or P2P layer, so there's nothing for I2P to integrate with.
Unfortunately, it's Jellyfin-only. Emby and Jellyfin came from the same codebase originally, but their APIs and auth have drifted apart enough that Fathom's Jellyfin-specific calls won't work against Emby. No Emby support planned, the focus is Jellyfin, alongside the Seerr and YouTube pieces.
Sign-in goes through Jellyfin's normal username/password endpoint (AuthenticateByName) plus Quick Connect, which is the same path the LDAP plugin hooks into, so LDAP logins generally work with a standard client like this, it shouldn't be the blocker by itself. A few things worth trying: if your server has Quick Connect enabled, try that (it sidesteps the password path entirely and is a good way to isolate the problem); double-check the server URL has the scheme and port (e.g. https://host:8096/); and a self-signed HTTPS cert can also cause a failure. If you can paste the exact error you're seeing, I'll dig in, and a GitHub issue is welcome.
Yes, the YouTube side is fully client-side, the app resolves and fetches the stream directly, the Jellyfin server isn't involved at all. So YouTube sees the connection of whatever machine is running Fathom, using that machine's IP and location. Fathom doesn't spoof anything itself, but because it's client-side, running it at home or behind a VPN is what should decide the location YouTube sees.
Thanks for pointing this out. As I’ve mentioned before, I have always been transparent about utilizing AI assistance to help develop my apps. I wasn’t aware of the requirement to include a specific tag for them, but I appreciate you letting me know. I will make sure to include [AIP] in the title of my posts going forward.
Thanks for giving it a chance. Alot of time, effort, and testing went into this self hosted app. I am a longtime Mealie user and though its an absolutely great recipe manager, there were a few more things i wanted to see in an app like this, and thus CookTrace was born. Feel free to report any bugs or feature requests on the github page.
Thank you. Hoping to continue to improve the products in meaningful ways. Always appreciate your continued support!
submitted, thank you!
yes both are included as an available option to enable/disable!
Thanks, that narrows it down a lot. Fathom renders through libmpv and currently leans on its default frame timing, where a well-tuned client instead syncs frames to the display refresh.
Two questions would let me pin it down:
Which official client are you comparing against: the web client in a browser, or the Jellyfin Media Player desktop app? It matters because a browser hands video to a hardware overlay that is tear-free by design, while Jellyfin Media Player runs the same engine Fathom does, just configured differently.
What OS are you on, and what is your monitor's refresh rate (60, 120, 144Hz)? On Linux, which desktop or compositor?
On the fix side, the next dev build adds a "Smooth Motion (Display Sync)" option under Settings > Playback > Advanced that paces frames to your monitor's refresh. That is the usual cure for this kind of judder, so please try it when you have a moment.
The same build also adds a Diagnostics screen under Settings > About. Open it, turn on Diagnostic Logging, start the video again, let the stutter happen for a few seconds, then use "Copy Diagnostics" and paste the result here. That shows me the exact decode path and frame timing instead of me guessing. It strips out anything sensitive before copying.
https://github.com/Fathom-Media/fathom/releases/tag/v0.9.1-dev.3
Glad 10.11.11 fixed the login. Since it's the same with hardware acceleration on or off, decoding isn't the bottleneck, it's likely delivery or frame timing. Two quick checks: in your Jellyfin dashboard, is that session Direct Play or Transcode? And does the same file play smoothly in plain mpv/VLC (Fathom uses libmpv underneath)? That'll tell us if it's server/network vs. something on the Fathom side.
Yeah, unfortunately that's a Google account/billing thing, not a playback thing. Fathom only fetches the video stream on your machine; it doesn't touch your account or Premium. That "verify your country" check is much stricter than playback and wants a residential IP in the country, so datacenter VPN ranges like Proton's can get "flagged". Nothing i think a media client alone can get around.
Sorry about that. That message is a network timeout, so the Quick Connect request isn't getting a response back within the window. Since you had to enter the server address to reach that screen, plain reachability and your cert are should be fine, so it's something specific to the Quick Connect path.
Two things would help me narrow it down:
Does normal username/password sign-in work against the same server, or does that time out too? If password works and only Quick Connect hangs, that isolates it to the Quick Connect endpoints.
Is Jellyfin behind a reverse proxy (nginx/Caddy/Traefik), and which Jellyfin version?
Good idea, I think this could be a solid fit for Fathom. I haven't tried TubeArchivist myself yet, but I'll add it to my to-do list to look into. Thanks for the pointer!
Interesting idea, but that's out of scope for this app, Fathom is just a Jellyfin/YouTube/Seerr client, with no torrent or P2P layer, so there's nothing for I2P to integrate with.
Unfortunately, it's Jellyfin-only. Emby and Jellyfin came from the same codebase originally, but their APIs and auth have drifted apart enough that Fathom's Jellyfin-specific calls won't work against Emby. No Emby support planned, the focus is Jellyfin, alongside the Seerr and YouTube pieces.
Sign-in goes through Jellyfin's normal username/password endpoint (AuthenticateByName) plus Quick Connect, which is the same path the LDAP plugin hooks into, so LDAP logins generally work with a standard client like this, it shouldn't be the blocker by itself. A few things worth trying: if your server has Quick Connect enabled, try that (it sidesteps the password path entirely and is a good way to isolate the problem); double-check the server URL has the scheme and port (e.g. https://host:8096/); and a self-signed HTTPS cert can also cause a failure. If you can paste the exact error you're seeing, I'll dig in, and a GitHub issue is welcome.
Yes, the YouTube side is fully client-side, the app resolves and fetches the stream directly, the Jellyfin server isn't involved at all. So YouTube sees the connection of whatever machine is running Fathom, using that machine's IP and location. Fathom doesn't spoof anything itself, but because it's client-side, running it at home or behind a VPN is what should decide the location YouTube sees.
here are a few pics. i have to setup some demo screenshots for github, on my to do!
yes here are a few of different areas:


Appreciate the kind words, thank you.
Happy to hear! You are very welcome!
Updated, thank you.
Thanks for pointing this out. As I’ve mentioned before, I have always been transparent about utilizing AI assistance to help develop my apps. I wasn’t aware of the requirement to include a specific tag for them, but I appreciate you letting me know. I will make sure to include [AIP] in the title of my posts going forward.
Thanks for giving it a chance. Alot of time, effort, and testing went into this self hosted app. I am a longtime Mealie user and though its an absolutely great recipe manager, there were a few more things i wanted to see in an app like this, and thus CookTrace was born. Feel free to report any bugs or feature requests on the github page.
RC2 now includes improved import functionality. I believe this will address your concern above!