Tomo TV, a Jellyfin Client
Available on Apple TV, iPhone, iPad and Mac. Movies, live TV, music and books from your server, with nearly every codec decoded on-device in Apple's native player.

Tomo TV plays MKV, HDR10, Dolby Vision, Dolby Atmos, TrueHD, DTS-HD and picture subtitles on the device itself. Anything Apple's player can't read is converted on your Apple TV, iPhone, iPad or Mac, so your server just sends the file.
There are no in-app purchases, no analytics, and no account to create beyond your Jellyfin login. The app is available in English, German, French and Spanish. It hosts no media of its own; see the terms of use.
01 / Your Jellyfin library
Movies, shows, music, photos and books
Every library on your server appears with its artwork and item count. Continueputs whatever you're partway through on the first screen, with Favorites and New below it. Photos open full screen with a slideshow, and on iPhone, iPad and Mac you can pinch to zoom and share the original file. Songs show lyrics that follow along, from your server or lrclib.net, and picking a line plays from it. Books open in a built-in reader for PDF, EPUB, MOBI, Kindle and comic archives, and your reading position is saved to Jellyfin.
Your recent items and channels also appear in the Apple TV Top Shelf, so you can resume from the home screen. tvOS
Lab notes: generating video thumbnails on device and synced Jellyfin lyrics on Apple TV.


02 / Live TV and DVR
Live TV with a guide and DVR
Watch live TV from your server's tuners, with a guide that runs two weeks ahead and shows recent frames from the channels. The Channels view shows every channel in a grid, and favorites and groups filter both views. Record a single program or a whole series from its info panel; a program from an XMLTV guide records as a single airing.

Channels play through the same on-device engine as your files, with captions, DVB subtitles and teletext.
The remote's channel-skip gesture changes channels, and for a short while after each change the channels on either side keep loading in the background. tvOS
When your server marks commercial breaks, iPhone, iPad and Mac can skip them automatically, an option in Channel Settings. Apple TV shows a Skip Commercial button instead, so you choose.
If your provider allows only a few streams at once, set the number for each playlist in Channel Settings, from 1 to 5, or leave it on Auto to learn it from the provider. When the provider allows one stream, a recording comes first: opening another of its channels offers to watch the recording as it is written, or to stop it and play.
Lab notes: channel surfing with AVKit and channel previews that loop.



03 / Native playback
Apple's own player, for everything
Everything plays in Apple's native player, so AirPlay, Picture in Picture and the subtitle and audio menus work as they do in any Apple app. Switching audio tracks doesn't restart playback, and your subtitle choice carries over to the next episode.
Swipe down for chapters and Up Next. If your server has intro and credit markers, the player shows Skip Intro and Skip Credits buttons. tvOS

Watch together with Jellyfin's SyncPlay. Start a group in Settings, and anyone with a phone or iPad signed into the same server joins by scanning a code. Play, pause and seeking stay in sync, and playback waits until everyone is ready. SyncPlay works with video only.
Each video's info panel opens on Resume or Play and Show in Folder, with Favorite, Watched and Progress in one capsule below, then lists the codec, resolution, bit depth and bitrate of every stream and where the file lives on your server. A series or season panel marks every episode watched or unwatched at once.

Diagnostics, in Settings under About Tomo TV, records your last playback session: how the file was played and why, its streams, any errors, and which formats the device decodes in hardware. On iPhone, iPad and Mac you can copy or share it. Apple TV has no clipboard, so it saves the log to your Jellyfin account, where your phone can pick it up.
Lab notes, all on Apple TV: Dolby Vision Profile 7, PGS subtitles without transcoding, Dolby Atmos and TrueHD, Up Next with AVContentProposal and scrub thumbnails without trickplay.
04 / Direct play and transcoding
What your server is asked to do
Before you press Play, the info panel tells you which of these three ways a file will play. If it needs the server and transcoding is off, the panel says so.
| Path | Decoded by | Your server |
|---|---|---|
| Direct PlayH.264, HEVC and AV1 that this device can decode at full resolution. Any container change happens on the device. | Apple's player | sends the file |
| Re-encoded on this deviceFormats Apple's player can't read, when this device can convert them in real time. | Tomo TV, on this device | sends the file |
| Transcoded by the serverFiles this device can't play, or a smaller stream on a slow connection, if your server and Settings allow it. | your server | transcodes it |
On a fast connection, your server just sends the original file. On a slow one, streaming adapts: playback switches to a smaller stream from the server, with stereo AAC audio, and goes back to the original once the connection recovers, without restarting. Dolby Atmos and lossless surround need the original.
The Server transcoding setting controls how much the server does. When needed, the default, allows those smaller streams. Only for unsupported files keeps the original even if it buffers. Off plays only what the device supports. A quality preset (480p, 540p, 720p, 1080p or 4K) limits server transcodes; files that play directly are never downscaled.
Lab note: when should a Jellyfin client transcode?

05 / Offline downloads
Watch without a connection
Download a movie, an episode, a whole folder or an album and play it with no network at all. Keep the original, or a smaller copy at 1080p, 720p or 480p that your server converts on the way down, in your audio language with the subtitle you would see. Originals can be paused and resumed, and a storage gauge shows how much space downloads use and how much is left. iPhone, iPad and Mac


Music and audiobooks download the same way and play in a native queue with gapless playback, and Apple Lossless and FLAC stay lossless. On iPhone, playback continues in the background with Lock Screen controls, and on iPhone, iPad and Mac a mini player stays on screen while you browse.
06 / Search and filters
Search everything, filter any library
Search by title, genre, artist or year. Movies and episodes appear together, and matching live channels and programs airing through tomorrow lead the same grid. Join two searches with a plus, as in veguitas + house, to see what either finds.

Filter any library by watched status, genre and year, or shuffle it.

Start in minutes
- Install Tomo TV from the App Store on your Apple TV, iPhone, iPad or Mac. You need a Jellyfin server with your media and an account on it.
- Connect your server. Scan Network finds servers on your local network, or you can enter an address like
http://192.168.1.100:8096. Addresses behind a reverse proxy, such as10.0.0.5/jellyfin, work too. - Sign in with your Jellyfin username and password, or with Quick Connectfrom a device that's already signed in.
If a connection fails, the app lists every address it tried and why each one failed. You can save as many servers and accounts as you like and switch between them in one tap. To try the app without a server, press Go on the empty Add Server field to connect to Jellyfin's public demo.

Formats
MKV, MP4, AVI, MOV and TS. The codec, the device and the connection decide whether a stream is copied or converted.
Video, played as stored
- H.264
- HEVC
- HDR10
- HLG
- Dolby Vision P8.1
- Dolby Vision P8.4
- AV1 (where the chip decodes it)
Video, converted on the device
- Dolby Vision P7 (as P8.1)
- AV1 (elsewhere)
- VVC / H.266
- VP8
- VP9
- VP3 to VP7
- MPEG-1
- MPEG-2
- MPEG-4
- Xvid
- DivX 3
- WMV
- VC-1
- H.263
- H.261
- FLV
- RealVideo
- Theora
- Cinepak
- DV
- AVS1
- AVS3
- ProRes
- DNxHD
- CineForm
- MJPEG
- FFV1
- FFVHuff
- MagicYUV
- Lagarith
- SheerVideo
- JPEG 2000
- JPEG-LS
- HuffYUV
- UT Video
- Indeo
- RPZA
- TrueMotion
- Sorenson
- Camtasia
- QuickTime RLE
- Microsoft Video 1
- MS RLE
- Hap
- DXV
- Snow
Audio, played as stored
- Dolby Digital
- Dolby Digital Plus
- Dolby Atmos
- AAC
- Apple Lossless
- FLAC
Audio, converted to FLAC
- TrueHD
- DTS
- DTS-HD Master Audio
- PCM
- MP3
- Opus
- Vorbis
- WMA
- RealAudio
- ATRAC
- WavPack
- Monkey's Audio
- TAK
- Shorten
- Musepack
- MP2 and MP1
- Speex
- AMR
- ADPCM
- QDesign
- Dolby E
- ALS
- TTA
Subtitles
- SRT
- Embedded text
- ASS / SSA
- PGS
- DVD / VobSub
- DVB
- XSUB
- Teletext (live)
- CEA-608 / 708 captions (live)
Books
- EPUB
- MOBI
- AZW / AZW3
- CBZ
- CBR
- CBT
- CB7
Anything not listed plays from your server instead.
Requirements
- Apple TV running tvOS 16.4 or later
- iPhone or iPad running iOS or iPadOS 16.4 or later
- Mac running macOS 13.4 or later, Apple Silicon or Intel
- The iPad app also installs on Apple Vision Pro, where it runs as the iPad app
- Jellyfin server 10.8+
- Server transcoding (FFmpeg) is optional; the device plays most files on its own
- Skip Intro, Skip Credits and Skip Commercial need Jellyfin 10.10+ and a segments provider plugin
- Live TV needs a tuner and a guide source set up on your server; a channel protected by FairPlay, Widevine or PlayReady won't play
- Free, with no in-app purchases
Troubleshooting
- A video won't play
- The error screen shows an error code and, if the file needed the server, whether transcoding was turned off for your account or in the app's Server transcoding setting. On the server, transcoding is under Dashboard → Playback → Transcodingand requires FFmpeg; each user's transcoding permission is in their user settings. Diagnostics records the same code for a bug report.
- Can't reach a server
- Include the port, as in
http://192.168.1.100:8096. HTTP is fine on a local network; for access from outside your home, use HTTPS with a valid certificate. - Buffering or slow playback
- Set Server transcoding to When needed with quality on Auto, and allow transcoding on your server. Playback then switches to a smaller stream on a slow connection and back on its own. With Only for unsupported files or Off, a slow connection buffers instead.
Privacy
Tomo TV collects nothing about you. It has no analytics, no tracking, no ads, no crash reporting of its own, and no account with us. It collects no data from anyone.
What the app keeps, it keeps on your device: the address of each server you add, your sign-in for it in the device Keychain, one entry per server and account, the files you download, the measured speed of your link to each server, the last playback session for Diagnostics, each account's Live TV favorites and channel groups, the XMLTV guides it downloads, the frames and short clips it records of each channel for the guide, the lyrics it has found for each song, and the posters it makes from your videos when the server has none. None of that is sent to us. Deleting the app deletes all of it.
The app talks to the Jellyfin servers you add, to Jellyfin's public demo server when you connect to it (an empty Add Server field, or Try Demo Server when your library can't load), to the XMLTV guide addresses you or your tuner's playlists list, and to a live channel's own source when the device can read it directly. Those servers see your sign-in, what you play and how far you got, under their own operators' policies. When your server has no lyrics for a song, lrclib.net is asked for them and gets only the song's artist, title and length; turn off Find missing lyricsto stop it. The first time the app listens to a song in a language, the system downloads Apple's speech model for it; the listening itself stays on the device. Video and audio stream straight to your device from your server or the channel's source, with no server of ours in between.
Tomo TV is made by Keiver Hernandez. Questions about privacy go to contact@keiver.dev. The website hosting this page has its own policy, covering the site rather than the app: keiver.dev privacy policy.
Support
Questions, bugs or feedback: contact@keiver.dev. Attach the Diagnostics log if you can: Settings, About Tomo TV, Diagnostics, then Copy on iPhone, iPad or Mac. Issues are also welcome at github.com/keiver/tomotv/issues.
Terms of use
Tomo TV is a player for a Jellyfin server you run or have been given access to. It hosts no media, distributes none, and ships with no content of its own. You are responsible for the media on your server, for having the right to play it where you live, and for how you use the app. We are not responsible for how the client is used.
Live TV works the same way. The app provides no channels, playlists or guides: it plays the channels your server's tuners list and reads the guide addresses you or their playlists add. You are responsible for having the right to access every source you add. Do not use the app to watch or record anything you have no right to.
The app is free and provided as is, without warranty of any kind, under the MIT License in its repository. To the extent the law allows, we are not liable for any loss or damage arising from its use.
If you believe this page or the app's listing uses your work or your mark without permission, write to contact@keiver.dev and it will be looked at promptly.
Tomo TV is a free, open-source, independent client for Jellyfin and is not affiliated with or endorsed by the Jellyfin project. Jellyfin is a trademark of its respective owner. Apple, Apple TV, iPhone, iPad, Mac, AirPlay and App Store are trademarks of Apple Inc. Dolby, Dolby Atmos and Dolby Vision are trademarks of Dolby Laboratories Licensing Corporation. DTS and DTS-HD are trademarks of DTS, Inc. All other marks belong to their owners.
The screenshots show Blender open movies under their Creative Commons licenses: Big Buck Bunny, © 2008 Blender Foundation | bigbuckbunny.org (CC BY 3.0); Elephants Dream, Blender Foundation | orange.blender.org (CC BY 2.5); Sintel, © Blender Foundation | durian.blender.org (CC BY 3.0); Tears of Steel, (CC) Blender Foundation | mango.blender.org (CC BY 3.0); Cosmos Laundromat, (CC) Blender Foundation | gooseberry.blender.org (CC BY 3.0); Spring, © Blender Foundation | cloud.blender.org/spring (CC BY 4.0); Caminandes, Blender Foundation | caminandes.com (CC BY 3.0); and The Daily Dweebs, Blender Animation Studio | dailydweebs.com (CC BY-SA 4.0). Sita Sings the Blues is by Nina Paley, dedicated to the public domain under CC0. The General, His Girl Friday, Jungle Book, Utopia (shown under its other title, Robinson Crusoeland), House on Haunted Hill, Carnival of Souls, Charlie Chaplin Festival, The Fast and the Furious (1955) and Voyage to the Planet of Prehistoric Women are in the public domain in the United States.
Open Source
tomotv
A free and open source Jellyfin client for Apple TV, iPad, iPhone and Mac.
expo-tvos-search
The native tvOS search field and keyboard, ready to use in your own Expo app.
Built on open source
The playback engine and the book reader link these libraries unmodified, as static archives. FFmpeg is used under the LGPL version 3. The exact binaries in the app are built by scripts/ffmpeg/build.sh in the Tomo TV repository from the versions pinned in scripts/ffmpeg/sources.sh, and published with their checksums at github.com/keiver/tomotv. The complete source of each library is available from the project links below; for the source or build of a particular release, ask at contact@keiver.dev. Full license texts are in the app under Settings → Open Source.
- FFmpeg (libavformat, libavcodec, libavutil, libswresample, libswscale, libavfilter), LGPL 3.0, container remuxing, audio and video decoding, and pixel conversion
- Mbed TLS (Apache 2.0), TLS for the engine's https connections to your server
- dav1d (BSD 2-Clause), AV1 decoding, and uavs3d (BSD 3-Clause), AVS3 decoding
- libass (ISC), linked into the FFmpeg build for its subtitle filters, with FreeType (FreeType License), HarfBuzz (MIT) and GNU FriBidi (LGPL 2.1+) beneath it
- libzvbi (LGPL 2.0+), teletext subtitle decoding on live channels
- libxml2 (MIT), DASH manifest parsing on live channels, linked from the system
- libarchive (BSD 2-Clause), with XZ Utils (0BSD), reading comic archives and EPUB containers in the book reader
- foliate-js (MIT), its MOBI and KF8 parser ported to Swift for the book reader
- React Native (react-native-tvos) and Expo (MIT), the application framework and native module ecosystem
- React Native Video (MIT), the video player component