pages/jellyfin-help/index.html

418 lines
26 KiB
HTML
Raw Normal View History

2024-02-23 11:28:32 -05:00
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Jellyfin Help | Mafyuh&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="If you are new to Jellyfin or Self-Hosted media in general, this will be a resource to help you get started.
💡 All of the software that makes up this setup are free and open-source. If you have any integrity concerns you can review all of the code on your own. All of the media and Jellyfin are located in-home. Requests, Sign-Up&rsquo;s, Links and Server Status are all located in Oracle Cloud.">
<meta name="author" content="Matt">
<link rel="canonical" href="https://mafyuh.com/jellyfin-help/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css" integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z&#43;V9&#43;cO1A=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://mafyuh.com/assets/favicon/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://mafyuh.com/assets/favicon/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://mafyuh.com/assets/favicon/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://mafyuh.com/assets/favicon/apple-touch-icon.png">
<link rel="mask-icon" href="https://mafyuh.com/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" hreflang="en" href="https://mafyuh.com/jellyfin-help/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
<style>
@media (prefers-color-scheme: dark) {
:root {
--theme: rgb(29, 30, 32);
--entry: rgb(46, 46, 51);
--primary: rgb(218, 218, 219);
--secondary: rgb(155, 156, 157);
--tertiary: rgb(65, 66, 68);
--content: rgb(196, 196, 197);
--code-block-bg: rgb(46, 46, 51);
--code-bg: rgb(55, 56, 62);
--border: rgb(51, 51, 51);
}
.list {
background: var(--theme);
}
.list:not(.dark)::-webkit-scrollbar-track {
background: 0 0;
}
.list:not(.dark)::-webkit-scrollbar-thumb {
border-color: var(--theme);
}
}
</style>
</noscript><script defer data-domain="mafyuh.com" src="https://stats.mafyuh.com/js/script.js"></script>
<meta property="og:title" content="Jellyfin Help" />
<meta property="og:description" content="If you are new to Jellyfin or Self-Hosted media in general, this will be a resource to help you get started.
💡 All of the software that makes up this setup are free and open-source. If you have any integrity concerns you can review all of the code on your own. All of the media and Jellyfin are located in-home. Requests, Sign-Up&rsquo;s, Links and Server Status are all located in Oracle Cloud." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://mafyuh.com/jellyfin-help/" /><meta property="article:section" content="" />
<meta property="article:published_time" content="2023-10-11T00:13:40+00:00" />
<meta property="article:modified_time" content="2023-10-11T00:13:40+00:00" /><meta property="og:site_name" content="Mafyuh&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Jellyfin Help"/>
<meta name="twitter:description" content="If you are new to Jellyfin or Self-Hosted media in general, this will be a resource to help you get started.
💡 All of the software that makes up this setup are free and open-source. If you have any integrity concerns you can review all of the code on your own. All of the media and Jellyfin are located in-home. Requests, Sign-Up&rsquo;s, Links and Server Status are all located in Oracle Cloud."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1 ,
"name": "Jellyfin Help",
"item": "https://mafyuh.com/jellyfin-help/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Jellyfin Help",
"name": "Jellyfin Help",
"description": "If you are new to Jellyfin or Self-Hosted media in general, this will be a resource to help you get started.\n💡 All of the software that makes up this setup are free and open-source. If you have any integrity concerns you can review all of the code on your own. All of the media and Jellyfin are located in-home. Requests, Sign-Up\u0026rsquo;s, Links and Server Status are all located in Oracle Cloud.",
"keywords": [
],
"articleBody": "If you are new to Jellyfin or Self-Hosted media in general, this will be a resource to help you get started.\n💡 All of the software that makes up this setup are free and open-source. If you have any integrity concerns you can review all of the code on your own. All of the media and Jellyfin are located in-home. Requests, Sign-Ups, Links and Server Status are all located in Oracle Cloud.\nLinks I post all of links on my main links page. They will be updated as things change and are added. This should be the only link you need in reference to this system.\nGetting Started First thing you need is a compatible device, most smart TVs and cell phones are. Then you need the Jellyfin app. You can find download links here. You should be able to find it just by searching for Jellyfin in your app store. iOS devices can also use the native Swiftfin app for better compatibility. (Android devices can also download Findroid for a more modern experience than Jellyfins)\nSign Up Obviously the first thing to do is make an account. Click “Jellyfin Sign-up” on the main links page and create an account. This process is free for now, just fill in the form, verify your email and you are good. This process creates a user that can be used on auth website, Jellyfin and Jellyseer.\n💡 Email verification is now required.\nJellyfin Now that youve made an account, you can login to Jellyfin. I recommend starting on your cell phone before doing your TV, to make it easier to do on your TV. You can skip the cell phone step though, as you already have an account.\nNow just put in your credentials that you just filled in on the signup website, using username and password. (not email)\nNow that you are signed in you can start watching on your phone. But to quickly sign in to your TV, put in the server URL and it should give you a Quick Connect code by default.\nOn you phones Jellyfin app, Click the Profile icon on the top right of the page, then choose Quick Connect, input your code then click authorize.\nYour TV should now be logged into your account and ready to start streaming.\nJellyfin Tips Some more things I do right away is organize the way the libraries are presented to me. You can do this under Profile - Home - Library Order. This way you dont scroll past irreverent libraries constantly to find what you watch most. (for me Requests, Movies and TV always top 3.)\nBy default on the TV application, when in a library, the poster size is a bit too small and set to horizontal which makes it feel off from regular streaming services. To fix this, just click the settings on the top right, then change the Image Size to X-Large and the Grid Direction to Vertical. Pictured below is defaults.\nOnce corrected, it should look this\nYou will have to do this to each library unfortunately.\nRequesting An awesome feature Ive implemented into my Jellyfin sever is requesting. All users created on Jellyfin are also created on Jellyseerr, the software I run to handle requests. You can find the link to Jellyseerr on the main links page.\nMovies are set to automatically approve, which means any movie you request should immediately start downloading on my end, assuming my systems can find the movie. Assuming its a relatively popular movie, it should download and be available on Jellyfin within 5 minutes. There are caveats and things that can interfere with this process but it remains consistent. All movies should download in 1080p. (old videos in lower resolution may not download, if it shows processing for more than 30 mins, it will notify me and I will manually find)\nRequester gets email when Jellyfin recognizes the file changes.\nTV Shows on the other hand, due to their usually high episode and season count, are set to manually approve. I rarely approve TV shows due to this reason.\nAll requested content gets automatically deleted 7 days after requester watches in full, to avoid this from happening if you wish to re-watch later, add the specific movie or TV show to your Favorites.\nYou can only use a web browser to
"wordCount" : "934",
"inLanguage": "en",
"datePublished": "2023-10-11T00:13:40Z",
"dateModified": "2023-10-11T00:13:40Z",
"author":{
"@type": "Person",
"name": "Matt"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://mafyuh.com/jellyfin-help/"
},
"publisher": {
"@type": "Organization",
"name": "Mafyuh's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://mafyuh.com/assets/favicon/favicon.ico"
}
}
}
</script>
</head>
<body class="" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
} else if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://mafyuh.com/" accesskey="h" title="Mafyuh&#39;s Blog (Alt + H)">
<img src="https://mafyuh.com/assets/favicon/favicon.svg" alt="" aria-label="logo"
height="35">Mafyuh&#39;s Blog</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
<ul class="lang-switch"><li>|</li>
</ul>
</div>
</div>
<ul id="menu">
<li>
<a href="https://mafyuh.com/tags/" title="Tags">
<span>Tags</span>
</a>
</li>
<li>
<a href="https://mafyuh.com/archives/" title="Archives">
<span>Archives</span>
</a>
</li>
<li>
<a href="https://mafyuh.com/search/" title="Search (Alt &#43; /)" accesskey=/>
<span>Search</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<article class="post-single">
<header class="post-header">
<div class="breadcrumbs"><a href="https://mafyuh.com/">Home</a></div>
<h1 class="post-title entry-hint-parent">
Jellyfin Help
</h1>
<div class="post-meta"><span title='2023-10-11 00:13:40 +0000 UTC'>October 11, 2023</span>&nbsp;·&nbsp;5 min&nbsp;·&nbsp;934 words&nbsp;·&nbsp;Matt
</div>
</header> <div class="toc">
<details >
<summary accesskey="c" title="(Alt + C)">
<span class="details">Table of Contents</span>
</summary>
<div class="inner"><nav id="TableOfContents">
<ul>
<li><a href="#links">Links</a></li>
<li><a href="#getting-started">Getting Started</a></li>
<li><a href="#sign-up">Sign Up</a></li>
<li><a href="#jellyfin">Jellyfin</a></li>
<li><a href="#jellyfin-tips">Jellyfin Tips</a></li>
<li><a href="#requesting">Requesting</a></li>
<li><a href="#requesting-through-discord">Requesting through Discord</a></li>
<li><a href="#common-jellyfin-errors">Common Jellyfin Errors</a></li>
</ul>
</nav>
</div>
</details>
</div>
<div class="post-content"><p>If you are new to Jellyfin or Self-Hosted media in general, this will be a resource to help you get started.</p>
<p>💡 All of the software that makes up this setup are free and open-source. If you have any integrity concerns you can review all of the code on your own. All of the media and Jellyfin are located in-home. Requests, Sign-Up&rsquo;s, Links and Server Status are all located in Oracle Cloud.</p>
<h2 id="links">Links<a hidden class="anchor" aria-hidden="true" href="#links">#</a></h2>
<p>I post all of links on my main links page. They will be updated as things change and are added. This should be the only link you need in reference to this system.</p>
<p><img loading="lazy" src="/assets/img/jellyfin-links.png#center" alt="Links Image" />
</p>
<h2 id="getting-started">Getting Started<a hidden class="anchor" aria-hidden="true" href="#getting-started">#</a></h2>
<p>First thing you need is a compatible device, most smart TV&rsquo;s and cell phone&rsquo;s are. Then you need the Jellyfin app. You can find download links <a href="https://jellyfin.org/downloads/">here</a>. You should be able to find it just by searching for Jellyfin in your app store. iOS devices can also use the native <a href="https://apps.apple.com/us/app/swiftfin/id1604098728">Swiftfin</a> app for better compatibility. (Android devices can also download <a href="https://play.google.com/store/apps/details?id=dev.jdtech.jellyfin">Findroid</a> for a more modern experience than Jellyfin&rsquo;s)</p>
<h2 id="sign-up">Sign Up<a hidden class="anchor" aria-hidden="true" href="#sign-up">#</a></h2>
<p>Obviously the first thing to do is make an account. Click &ldquo;Jellyfin Sign-up&rdquo; on the main links page and create an account. This process is free for now, just fill in the form, verify your email and you are good. This process creates a user that can be used on auth website, Jellyfin and Jellyseer.</p>
<p>💡 Email verification is now required.</p>
<h2 id="jellyfin">Jellyfin<a hidden class="anchor" aria-hidden="true" href="#jellyfin">#</a></h2>
<p>Now that you&rsquo;ve made an account, you can login to Jellyfin. I recommend starting on your cell phone before doing your TV, to make it easier to do on your TV. You can skip the cell phone step though, as you already have an account.</p>
<p><img loading="lazy" src="/assets/img/jf-login.png#center" alt="JF Login" />
</p>
<p>Now just put in your credentials that you just filled in on the signup website, using username and password. (not email)</p>
<p>Now that you are signed in you can start watching on your phone. But to quickly sign in to your TV, put in the server URL and it should give you a Quick Connect code by default.</p>
<p><img loading="lazy" src="/assets/img/jf-quick-login.jpg#center" alt="JF Quick Login" />
</p>
<p>On you phone&rsquo;s Jellyfin app, Click the Profile icon on the top right of the page, then choose Quick Connect, input your code then click authorize.</p>
<p><img loading="lazy" src="/assets/img/quick-login-code.png#center" alt="JF Login Code" />
</p>
<p>Your TV should now be logged into your account and ready to start streaming.</p>
<h2 id="jellyfin-tips">Jellyfin Tips<a hidden class="anchor" aria-hidden="true" href="#jellyfin-tips">#</a></h2>
<ol>
<li>Some more things I do right away is organize the way the libraries are presented to me.</li>
</ol>
<p>You can do this under <strong>Profile - Home - Library Order</strong>. This way you don&rsquo;t scroll past irreverent libraries constantly to find what you watch most. (for me Requests, Movies and TV always top 3.)</p>
<p><img loading="lazy" src="/assets/img/jf-library.png#center" alt="JF Library" />
</p>
<ol start="2">
<li>By default on the TV application, when in a library, the poster size is a bit too small and set to horizontal which makes it feel off from regular streaming services.</li>
</ol>
<p><img loading="lazy" src="/assets/img/jf-display.jpg#center" alt="JF Display" />
</p>
<p>To fix this, just click the settings on the top right, then change the Image Size to X-Large and the Grid Direction to Vertical. Pictured below is defaults.</p>
<p><img loading="lazy" src="/assets/img/jf-settings.jpg" alt="JF-Settings" />
</p>
<p>Once corrected, it should look this</p>
<p><img loading="lazy" src="/assets/img/jf-corrected.jpg" alt="JF-Corrected" />
</p>
<p>You will have to do this to each library unfortunately.</p>
<h2 id="requesting">Requesting<a hidden class="anchor" aria-hidden="true" href="#requesting">#</a></h2>
<p>An awesome feature I&rsquo;ve implemented into my Jellyfin sever is requesting. All users created on Jellyfin are also created on Jellyseerr, the software I run to handle requests. You can find the link to Jellyseerr on the main links page.</p>
<p>Movies are set to automatically approve, which means any movie you request should immediately start downloading on my end, assuming my systems can find the movie. Assuming it&rsquo;s a relatively popular movie, it should download and be available on Jellyfin within 5 minutes. There are caveats and things that can interfere with this process but it remains consistent. All movies should download in 1080p. (old videos in lower resolution may not download, if it shows processing for more than 30 mins, it will notify me and I will manually find)</p>
<p>Requester gets email when Jellyfin recognizes the file changes.</p>
<p>TV Shows on the other hand, due to their usually high episode and season count, are set to manually approve. I rarely approve TV shows due to this reason.</p>
<p>All requested content gets automatically deleted 7 days after requester watches in full, to avoid this from happening if you wish to re-watch later, add the specific movie or TV show to your Favorites.</p>
<p>You can only use a web browser to request content (unless you join discord server). However Android devices have an option to Install as an app from their browser. To do this first load the request website on your device, once loaded click your browser&rsquo;s options menu, generally 3 dots on the top/bottom right of the screen. Then choose install app.</p>
<p><img loading="lazy" src="/assets/img/android-install.png#center" alt="Android app install" />
</p>
<h2 id="requesting-through-discord">Requesting through Discord<a hidden class="anchor" aria-hidden="true" href="#requesting-through-discord">#</a></h2>
<p>Rarely used but still there is my Discord server for requesting content, not as pretty as Jellyseerr, but works the same.</p>
<p>The currently available commands are:
/request tv
/request tv-tvdb
/request movie
/request movie-tmdb
/help
/ping</p>
<p>Here&rsquo;s how to use a command
/request movie Deadpool 2</p>
<h2 id="common-jellyfin-errors">Common Jellyfin Errors<a hidden class="anchor" aria-hidden="true" href="#common-jellyfin-errors">#</a></h2>
<p>Giving up&hellip;Too many Errors</p>
<p>This error seems to be caused by the default media player Jellyfin uses on most TV&rsquo;s.</p>
<p>To fix this, go to your Jellyfin Home page, (landing page when your first open app) then <strong>Settings</strong> - <strong>Playback</strong> - under <strong>Video</strong> click <strong>Preferred media player</strong>. By default this is set to LibVLC, change this to Automatically choose as pictured.</p>
<p><img loading="lazy" src="/assets/img/jf-media.jpg" alt="JF Media Player" />
</p>
<p>Go back and try to watch the same video and it should work, if not you can download <a href="https://play.google.com/store/apps/details?id=com.brouken.player&amp;hl=en_US&amp;gl=US">Just Video Player</a> and set external app as Preferred Media Player to Just player app. I havent had a single issue since doing this. VLC also works.</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
</footer>
</article>
</main>
<footer class="footer">
<span>&copy; 2024 <a href="https://mafyuh.com/">Mafyuh&#39;s Blog</a></span>
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>