335 lines
18 KiB
HTML
335 lines
18 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en" dir="auto" data-theme="auto">
|
||
|
||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script><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="noindex, nofollow">
|
||
<title>VHSky.cz – ohlédnutí za rokem 2025 🎬 | Oscloud News</title>
|
||
<meta name="keywords" content="vhsky, peertube">
|
||
<meta name="description" content="VHSky.cz vzniklo jako PeerTube instance pro komunitní videoobsah. Rok 2025 byl prvním rokem, kdy se ukázalo, že má smysl projekt dělat dál.
|
||
Proč vlastně PeerTube? 🤔
|
||
YouTube se stal faktickým monopolem na video hosting. Pravidla se mění podle toho, jak se to hodí korporátu, algoritmy rozhodují o tom, co se dostane k divákům, a celý systém stojí na centralizovaném modelu, který tvůrcům dává minimální kontrolu.
|
||
VHSky.cz vzniklo jako alternativa pro ty, kteří chtějí publikovat videa bez reklam, bez sledování a bez závislosti na jedné komerční platformě. Ne jako náhrada YouTube, ale jako svobodná možnost vedle něj.">
|
||
<meta name="author" content="archos">
|
||
<link rel="canonical" href="http://localhost:1313/posts/vhsky-2025/">
|
||
<link crossorigin="anonymous" href="/assets/css/stylesheet.343cc480b9ffc8f04ccbe5e968ad674880cab773ec19905e93033065c1e7a804.css" integrity="sha256-NDzEgLn/yPBMy+XpaK1nSIDKt3PsGZBekwMwZcHnqAQ=" rel="preload stylesheet" as="style">
|
||
<link rel="icon" href="http://localhost:1313/favicon.ico">
|
||
<link rel="icon" type="image/png" sizes="16x16" href="http://localhost:1313/favicon-16x16.png">
|
||
<link rel="icon" type="image/png" sizes="32x32" href="http://localhost:1313/favicon-32x32.png">
|
||
<link rel="apple-touch-icon" href="http://localhost:1313/apple-touch-icon.png">
|
||
<link rel="mask-icon" href="http://localhost:1313/safari-pinned-tab.svg">
|
||
<meta name="theme-color" content="#2e2e33">
|
||
<meta name="msapplication-TileColor" content="#2e2e33">
|
||
<link rel="alternate" hreflang="en" href="http://localhost:1313/posts/vhsky-2025/">
|
||
<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);
|
||
color-scheme: dark;
|
||
}
|
||
|
||
.list {
|
||
background: var(--theme);
|
||
}
|
||
|
||
.toc {
|
||
background: var(--entry);
|
||
}
|
||
}
|
||
|
||
@media (prefers-color-scheme: light) {
|
||
.list::-webkit-scrollbar-thumb {
|
||
border-color: var(--code-bg);
|
||
}
|
||
}
|
||
|
||
</style>
|
||
</noscript>
|
||
<script>
|
||
if (localStorage.getItem("pref-theme") === "dark") {
|
||
document.querySelector("html").dataset.theme = 'dark';
|
||
} else if (localStorage.getItem("pref-theme") === "light") {
|
||
document.querySelector("html").dataset.theme = 'light';
|
||
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||
document.querySelector("html").dataset.theme = 'dark';
|
||
} else {
|
||
document.querySelector("html").dataset.theme = 'light';
|
||
}
|
||
|
||
</script><script defer src="https://analytics.oscloud.cz/script.js" data-website-id="70aaf052-385c-41fb-9cfe-d3b3c6f54f2d"></script>
|
||
|
||
</head>
|
||
<body id="top">
|
||
<header class="header">
|
||
<nav class="nav">
|
||
<div class="logo">
|
||
<a href="http://localhost:1313/" accesskey="h" title="Oscloud News (Alt + H)">
|
||
<img src="http://localhost:1313/logo.png" alt="" aria-label="logo"
|
||
height="32">Oscloud News</a>
|
||
<div class="logo-switches">
|
||
<button id="theme-toggle" accesskey="t" title="(Alt + T)" aria-label="Toggle theme">
|
||
<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>
|
||
</div>
|
||
</div>
|
||
<ul id="menu">
|
||
<li>
|
||
<a href="http://localhost:1313/" title="🇨🇿">
|
||
<span>🇨🇿</span>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a href="http://localhost:1313/archives/" title="Archiv">
|
||
<span>Archiv</span>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a href="http://localhost:1313/search/" title="Vyhledávání">
|
||
<span>Vyhledávání</span>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a href="http://localhost:1313/tags/" title="Tagy">
|
||
<span>Tagy</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</header>
|
||
<main class="main">
|
||
|
||
<article class="post-single">
|
||
<header class="post-header">
|
||
<div class="breadcrumbs"><a href="http://localhost:1313/">Home</a> » <a href="http://localhost:1313/posts/">Posts</a></div>
|
||
<h1 class="post-title entry-hint-parent">
|
||
VHSky.cz – ohlédnutí za rokem 2025 🎬
|
||
</h1>
|
||
<div class="post-meta"><span title='2025-12-13 00:00:00 +0000 UTC'>December 13, 2025</span> · <span>3 min</span> · <span>archos</span>
|
||
|
||
</div>
|
||
</header>
|
||
<div class="post-content"><p>VHSky.cz vzniklo jako PeerTube instance pro komunitní videoobsah. Rok 2025 byl prvním rokem, kdy se ukázalo, že má smysl projekt dělat dál.</p>
|
||
<h2 id="proč-vlastně-peertube-">Proč vlastně PeerTube? 🤔<a hidden class="anchor" aria-hidden="true" href="#proč-vlastně-peertube-">#</a></h2>
|
||
<p>YouTube se stal faktickým monopolem na video hosting. Pravidla se mění podle toho, jak se to hodí korporátu, algoritmy rozhodují o tom, co se dostane k divákům, a celý systém stojí na centralizovaném modelu, který tvůrcům dává minimální kontrolu.</p>
|
||
<p>VHSky.cz vzniklo jako alternativa pro ty, kteří chtějí publikovat videa bez reklam, bez sledování a bez závislosti na jedné komerční platformě. Ne jako náhrada YouTube, ale jako svobodná možnost vedle něj.</p>
|
||
<p>PeerTube umožňuje provozovat vlastní instanci, mít kontrolu nad obsahem i pravidly a nestavět projekt na komerčních algoritmech. Decentralizace, open source a vlastní data nejsou slogan, ale základní princip.</p>
|
||
<h2 id="čísla-která-mluví-">Čísla, která mluví 📊<a hidden class="anchor" aria-hidden="true" href="#čísla-která-mluví-">#</a></h2>
|
||
<p>Za rok jsme překonali hranici 20 000 zhlédnutí (aktuálně 20 191). Na instanci je 809 videí, 330 registrovaných uživatelů a 340 komentářů. Celkem hostujeme přes 500 GB video obsahu.</p>
|
||
<p>Nejde o závratná čísla ve srovnání s YouTube, ale ukazují, že komunita roste organicky a že obsah má pro lidi smysl.</p>
|
||
<img src="/images/vhsky.png" alt="Statistiky platformy" width="600">
|
||
<h2 id="co-fungovalo-">Co fungovalo ✅<a hidden class="anchor" aria-hidden="true" href="#co-fungovalo-">#</a></h2>
|
||
<h3 id="technické-zázemí">Technické zázemí<a hidden class="anchor" aria-hidden="true" href="#technické-zázemí">#</a></h3>
|
||
<p>Během roku jsme přesunuli média na S3 úložiště u společnosti <a href="https://www.hetzner.com/">Hetzner</a>. Pro diváky jde o neviditelnou změnu, ale technicky o zásadní krok – data jsou oddělená od aplikačního serveru a zálohování je výrazně jednodušší a spolehlivější.</p>
|
||
<p>U stejného poskytovatele běží také VPS s runnerem, který zajišťuje náročnější úlohy, například automatické generování titulků. Díky tomu může hlavní instance zůstat lehká a stabilní i při vyšší zátěži.</p>
|
||
<h3 id="komunitní-spolupráce-">Komunitní spolupráce 🤝<a hidden class="anchor" aria-hidden="true" href="#komunitní-spolupráce-">#</a></h3>
|
||
<p>Společně se nám podařilo připravit českou verzi videa, které slouží jako barvitý úvod do světa sociální sítě Fediverse. Video představuje alternativní pohled na sociální média – s respektem k soukromí, důrazem na uživatele a bez vlivu velkých technologických firem.</p>
|
||
<p>Na překladu a zpracování se podíleli:</p>
|
||
<ul>
|
||
<li>autor videa: <a href="https://mastodon.social/@_elena">Elena Rossini</a> a tým</li>
|
||
<li>produkce: <a href="https://social.dytrych.cloud/@jan">Jan Dytrych</a></li>
|
||
<li>dabing: <a href="https://mastodon.arch-linux.cz/@Onqa6">Zloběna</a></li>
|
||
<li>časování audia: <a href="https://schmaker.eu/profile/schmaker">Schmaker</a></li>
|
||
<li>skript: Jann</li>
|
||
</ul>
|
||
<iframe title="Úvod do Fediverse: Moderní podoby sociální sítě" width="560" height="315" src="https://vhsky.cz/videos/embed/hNuFEJwjbcubMgsVnqtoXz" style="border: 0px;" allow="fullscreen" sandbox="allow-same-origin allow-scripts allow-popups allow-forms"></iframe>
|
||
<h2 id="openalt-2025">OpenAlt 2025<a hidden class="anchor" aria-hidden="true" href="#openalt-2025">#</a></h2>
|
||
<p>OpenAlt byl pro VHSky.cz největší technickou zkouškou. Bylo dopředu jasné, že samotný server instance by kompletní streamování a transkódování všech přednášek nezvládl. PeerTube naštěstí umožňuje využít vzdálené runnery, které převezmou výpočetně náročné úlohy.</p>
|
||
<p>Zásadní ale je, že transkódování nelze kombinovat – buď běží celé lokálně, nebo celé na runnerech. Bylo tedy nutné zajistit dostatek výkonu, který by pokryl vše. Díky vstřícnosti Adama Štraucha a týmu z rosti.cz jsme mohli využít zapůjčený výkonný stroj, na kterém běžel samostatný runner určený výhradně pro OpenAlt.</p>
|
||
<p>Díky tomuto zázemí se podařilo všechny přednášky odstreamovat.</p>
|
||
<iframe title="PeerTube - software za Vhsky.cz (Jiří Eischmann)" width="560" height="315" src="https://vhsky.cz/videos/embed/dpzeh2rWGrqMvWG9gU9RoP" style="border: 0px;" allow="fullscreen" sandbox="allow-same-origin allow-scripts allow-popups allow-forms"></iframe>
|
||
<h2 id="poděkování-">Poděkování 🙏<a hidden class="anchor" aria-hidden="true" href="#poděkování-">#</a></h2>
|
||
<p>Velké poděkování patří moderátorům, kteří udržují komunitu funkční a atmosféru slušnou – zvlášť <a href="https://schmaker.eu/profile/schmaker">Schmakerovi</a> za dlouhodobou a konzistentní práci.</p>
|
||
<p>Díky také <a href="https://eischmann.cz/">Jiřímu Eischmannovi</a>, bez kterého by VHSky.cz vůbec nevznikly.</p>
|
||
<p>A velké díky Adamu Štrauchovi a týmu z <a href="https://rosti.cz/">rosti.cz</a> za poskytnutí výkonného zázemí pro OpenAlt runnery a za dlouhodobě vstřícný přístup k open-source projektům. Bez této podpory by streamování OpenAltu v takovém rozsahu nebylo možné.</p>
|
||
<h2 id="co-dál-">Co dál 🚀<a hidden class="anchor" aria-hidden="true" href="#co-dál-">#</a></h2>
|
||
<p>Pokračovat v obsahu a dál zapojovat komunitu – i tady patří velký dík Schmakerovi, který na tom odvádí obrovský kus práce.</p>
|
||
<p>Pokud to vyjde, rádi bychom se příští rok znovu objevili na OpenAltu – s větším klidem a zkušenostmi z letoška.</p>
|
||
<h2 id="závěr">Závěr<a hidden class="anchor" aria-hidden="true" href="#závěr">#</a></h2>
|
||
<p>VHSky.cz není o číslech, reklamě ani honbě za rychlým růstem. Dává smysl tehdy, když dává smysl lidem, kteří ho sledují, podporují nebo se na něm jakkoli podílejí. Rok 2025 ukázal, že tenhle přístup funguje.</p>
|
||
<p>Díky všem, kteří u toho byli – ať už sledováním, pomocí, finanční podporou nebo obyčejnou zpětnou vazbou. Právě tohle drží projekt při životě. Pokračujeme dál.</p>
|
||
|
||
|
||
</div>
|
||
|
||
<footer class="post-footer">
|
||
<ul class="post-tags">
|
||
<li><a href="http://localhost:1313/tags/vhsky/">Vhsky</a></li>
|
||
<li><a href="http://localhost:1313/tags/peertube/">Peertube</a></li>
|
||
</ul>
|
||
<nav class="paginav">
|
||
<a class="prev" href="http://localhost:1313/posts/stastny-novy-rok-2026/">
|
||
<span class="title">« Prev</span>
|
||
<br>
|
||
<span>Šťastný nový rok 2026</span>
|
||
</a>
|
||
<a class="next" href="http://localhost:1313/posts/vitejte-na-oscloud-news/">
|
||
<span class="title">Next »</span>
|
||
<br>
|
||
<span>Vítejte na Oscloud News</span>
|
||
</a>
|
||
</nav>
|
||
|
||
</footer>
|
||
</article>
|
||
</main>
|
||
|
||
<footer class="footer">
|
||
<span>© 2026 <a href="http://localhost:1313/">Oscloud News</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) {
|
||
|
||
const scrollPosition = localStorage.getItem("menu-scroll-position");
|
||
if (scrollPosition) {
|
||
menu.scrollLeft = parseInt(scrollPosition, 10);
|
||
}
|
||
|
||
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", () => {
|
||
const html = document.querySelector("html");
|
||
if (html.dataset.theme === "dark") {
|
||
html.dataset.theme = 'light';
|
||
localStorage.setItem("pref-theme", 'light');
|
||
} else {
|
||
html.dataset.theme = '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>
|