<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Video on sagenhaft</title>
    <link>https://sagenhaft.space/tags/video/</link>
    <description>Recent content in Video on sagenhaft</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    
    <lastBuildDate>Sun, 04 Oct 2026 13:00:00 -0700</lastBuildDate><atom:link href="https://sagenhaft.space/tags/video/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Videostack</title>
      <link>https://sagenhaft.space/videostack/</link>
      <pubDate>Sun, 04 Oct 2026 13:00:00 -0700</pubDate>
      
      <guid>https://sagenhaft.space/videostack/</guid>
      <description>&lt;p class=&#34;text-lg text-neutral-600 dark:text-neutral-300 -mt-2 mb-6&#34;&gt;&#xA;  A fast, native library and player for your video collection — search what was said, and jump straight to that moment.&#xA;&lt;/p&gt;&#xA;&lt;div class=&#34;not-prose my-8 flex flex-col sm:flex-row items-center gap-8 sm:gap-10&#34;&gt;&#xA;  &lt;img src=&#34;icon.png&#34; alt=&#34;Videostack App Icon&#34; class=&#34;w-28 h-28 rounded-2xl shadow-lg ring-1 ring-black/5 dark:ring-white/10 flex-shrink-0&#34; /&gt;&#xA;  &lt;div class=&#34;p-6 rounded-2xl bg-gradient-to-br from-primary-500/10 via-primary-500/5 to-transparent border border-primary-500/20 shadow-sm backdrop-blur-sm flex flex-col items-center sm:items-start text-center sm:text-left&#34;&gt;&#xA;    &lt;div class=&#34;flex items-center gap-3 mb-3&#34;&gt;&#xA;      &lt;span class=&#34;text-xs font-medium px-3 py-1 rounded-md bg-primary-100 text-primary-800 dark:bg-primary-900/60 dark:text-primary-300&#34;&gt;macOS 27+&lt;/span&gt;&#xA;      &lt;span class=&#34;text-xs text-neutral-500 dark:text-neutral-400&#34;&gt;Version 1.0.0 &amp;bull; 23.1 MB &amp;bull; Apple Silicon&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;flex flex-col sm:flex-row sm:items-center gap-3&#34;&gt;&#xA;      &lt;a href=&#34;Videostack.dmg&#34; class=&#34;inline-flex items-center gap-3 rounded-xl bg-primary-600 px-6 py-3 text-base font-bold text-white shadow transition hover:bg-primary-500 hover:shadow-md focus:outline-none focus:ring-2 focus:ring-primary-500 dark:bg-primary-500 dark:hover:bg-primary-400 !no-underline whitespace-nowrap&#34;&gt;&#xA;        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; class=&#34;w-5 h-5 flex-shrink-0&#34; viewBox=&#34;0 0 512 512&#34; fill=&#34;currentColor&#34;&gt;&lt;path d=&#34;M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z&#34;/&gt;&lt;/svg&gt;&#xA;        &lt;span&gt;Download Videostack for Mac (DMG)&lt;/span&gt;&#xA;      &lt;/a&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;p class=&#34;text-xs text-neutral-500 dark:text-neutral-400 mt-4 sm:mt-5&#34;&gt;&#xA;      By downloading, you accept that Videostack is provided &amp;ldquo;as is&amp;rdquo; without warranty (see &lt;a href=&#34;#disclaimer&#34; class=&#34;underline hover:text-primary-600 dark:hover:text-primary-400&#34;&gt;disclaimer&lt;/a&gt;).&#xA;    &lt;/p&gt;</description>
      <content:encoded><![CDATA[<p class="text-lg text-neutral-600 dark:text-neutral-300 -mt-2 mb-6">
  A fast, native library and player for your video collection — search what was said, and jump straight to that moment.
</p>
<div class="not-prose my-8 flex flex-col sm:flex-row items-center gap-8 sm:gap-10">
  <img src="icon.png" alt="Videostack App Icon" class="w-28 h-28 rounded-2xl shadow-lg ring-1 ring-black/5 dark:ring-white/10 flex-shrink-0" />
  <div class="p-6 rounded-2xl bg-gradient-to-br from-primary-500/10 via-primary-500/5 to-transparent border border-primary-500/20 shadow-sm backdrop-blur-sm flex flex-col items-center sm:items-start text-center sm:text-left">
    <div class="flex items-center gap-3 mb-3">
      <span class="text-xs font-medium px-3 py-1 rounded-md bg-primary-100 text-primary-800 dark:bg-primary-900/60 dark:text-primary-300">macOS 27+</span>
      <span class="text-xs text-neutral-500 dark:text-neutral-400">Version 1.0.0 &bull; 23.1 MB &bull; Apple Silicon</span>
    </div>
    <div class="flex flex-col sm:flex-row sm:items-center gap-3">
      <a href="Videostack.dmg" class="inline-flex items-center gap-3 rounded-xl bg-primary-600 px-6 py-3 text-base font-bold text-white shadow transition hover:bg-primary-500 hover:shadow-md focus:outline-none focus:ring-2 focus:ring-primary-500 dark:bg-primary-500 dark:hover:bg-primary-400 !no-underline whitespace-nowrap">
        <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 flex-shrink-0" viewBox="0 0 512 512" fill="currentColor"><path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/></svg>
        <span>Download Videostack for Mac (DMG)</span>
      </a>
    </div>
    <p class="text-xs text-neutral-500 dark:text-neutral-400 mt-4 sm:mt-5">
      By downloading, you accept that Videostack is provided &ldquo;as is&rdquo; without warranty (see <a href="#disclaimer" class="underline hover:text-primary-600 dark:hover:text-primary-400">disclaimer</a>).
    </p>
  </div>
</div>
<div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl">
  Videostack is a native macOS app for the videos that collect on your disk: cooking lessons, lectures, talks, music performances, and downloaded YouTube clips. Point it at a folder and it builds a browsable library with thumbnails, indexes the subtitles so you can search what was <em>said</em>, and plays every format in its own player — opening a search result at the exact second the words were spoken. Your videos stay where they are; nothing leaves your Mac.
</div>

<hr>

<h2 class="relative group">Highlights at a Glance
    <div id="highlights-at-a-glance" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#highlights-at-a-glance" aria-label="Anchor">#</a>
    </span>
    
</h2>

<div class="not-prose my-8 grid gap-4 sm:grid-cols-2 grid-balance lg:grid-cols-3 grid-balance-3">
  







<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg>
</span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Search What Was Said</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">Subtitles next to your videos are indexed with SQLite FTS5. Results show the matching lines with timestamps and update as you type.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512">
<path fill="currentColor" d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Plays Every Format</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">A built-in player powered by libVLC handles mp4, mov, webm, mkv, avi and more, with frame previews while scrubbing, playback speed, and full screen.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"/></svg>
</span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">YouTube, Kept Locally</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">Paste a link to save a video with its English subtitles via yt-dlp, and fill in channel, description, and upload date for clips you already have.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M287.9 0C297.1 0 305.5 5.25 309.5 13.52L378.1 154.8L531.4 177.5C540.4 178.8 547.8 185.1 550.7 193.7C553.5 202.4 551.2 211.9 544.8 218.2L433.6 328.4L459.9 483.9C461.4 492.9 457.7 502.1 450.2 507.4C442.8 512.7 432.1 513.4 424.9 509.1L287.9 435.9L150.1 509.1C142.9 513.4 133.1 512.7 125.6 507.4C118.2 502.1 114.5 492.9 115.1 483.9L142.2 328.4L31.11 218.2C24.65 211.9 22.36 202.4 25.2 193.7C28.03 185.1 35.5 178.8 44.49 177.5L197.7 154.8L266.3 13.52C270.4 5.249 278.7 0 287.9 0L287.9 0zM287.9 78.95L235.4 187.2C231.9 194.3 225.1 199.3 217.3 200.5L98.98 217.9L184.9 303C190.4 308.5 192.9 316.4 191.6 324.1L171.4 443.7L276.6 387.5C283.7 383.7 292.2 383.7 299.2 387.5L404.4 443.7L384.2 324.1C382.9 316.4 385.5 308.5 391 303L476.9 217.9L358.6 200.5C350.7 199.3 343.9 194.3 340.5 187.2L287.9 78.95z"/></svg></span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Pick Up Where You Left Off</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">Playback position is saved automatically, so half-watched videos appear in Continue Watching. Bookmark any moment and jump back with a double-click.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M48 32H197.5C214.5 32 230.7 38.74 242.7 50.75L418.7 226.7C443.7 251.7 443.7 292.3 418.7 317.3L285.3 450.7C260.3 475.7 219.7 475.7 194.7 450.7L18.75 274.7C6.743 262.7 0 246.5 0 229.5V80C0 53.49 21.49 32 48 32L48 32zM112 176C129.7 176 144 161.7 144 144C144 126.3 129.7 112 112 112C94.33 112 80 126.3 80 144C80 161.7 94.33 176 112 176z"/></svg>
</span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Organized by Folder &amp; Tag</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">Each video is tagged with the folder it lives in. Add your own tags, drag videos onto them, and filter by title, file name, or category.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
<path fill="currentColor" d="M144 144v48H304V144c0-44.2-35.8-80-80-80s-80 35.8-80 80zM80 192V144C80 64.5 144.5 0 224 0s144 64.5 144 144v48h16c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V256c0-35.3 28.7-64 64-64H80z"/></svg></span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Local, No Accounts</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">No sign-up, no cloud library, no tracking. The index lives in a single database on your Mac, and your videos are read in place, never copied or uploaded.</div>
  
</article>


</div>

<hr>

<h2 class="relative group">Why Videostack?
    <div id="why-videostack" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-videostack" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Saved videos pile up in folders by topic, and Finder only shows file names. Finding <em>the clip where the chef explained the folding technique</em> or <em>the lecture where that theorem came up</em> means opening videos one by one and scrubbing through them.</p>
<p>The usual alternatives each miss something:</p>
<ul>
<li><strong>Finder &amp; QuickLook:</strong> Find a file by name, but know nothing about what&rsquo;s inside — and QuickTime won&rsquo;t open webm or mkv.</li>
<li><strong>Media Servers:</strong> Built for streaming movies to a TV. They want a server, a scanner that renames things, and an account.</li>
<li><strong>YouTube Watch Later:</strong> Only works while the video is still online, and searches titles rather than what was said.</li>
</ul>
<p>Videostack was built to be <strong>⌘F for your video collection</strong>: one search box across every word in every subtitle, a grid you can browse at a glance, and a player that starts at the moment you were looking for.</p>
<hr>

<h2 class="relative group">How It Works
    <div id="how-it-works" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#how-it-works" aria-label="Anchor">#</a>
    </span>
    
</h2>

<h3 class="relative group">1. Add Videos
    <div id="1-add-videos" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-add-videos" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Choose <strong>File ▸ Scan Videos Folder</strong> to index the folder set in Settings, or click <strong>+</strong> to add any folder or files. For each video, Videostack reads its duration, renders a thumbnail, indexes any subtitle file next to it (<code>video.srt</code> or <code>video.en.srt</code>), and tags it with the folder it sits in, so <code>videos/cooking/…</code> lands in <strong>cooking</strong>. Titles are cleaned up from yt-dlp-style file names.</p>
<p>Your videos are never copied or modified. Removing a video from the library deletes only its index entry; the file itself stays where it is.</p>

<h3 class="relative group">2. Search
    <div id="2-search" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2-search" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>The search field at the top does two things at once:</p>
<ul>
<li><strong>Free text</strong> searches the subtitles (and fetched YouTube descriptions) of every video, with search-as-you-type prefix matching.</li>
<li><strong>Scoped filters</strong> narrow the library by metadata: <code>title:</code>, <code>filename:</code> (or <code>file:</code>), and <code>category:</code> (or <code>folder:</code>). Quote values with spaces, e.g. <code>title:&quot;sourdough starter&quot;</code>.</li>
</ul>
<p>Combine them freely, for example <code>lamination category:baking</code>. Double-click a result to start playing at that line.</p>

<h3 class="relative group">3. Watch
    <div id="3-watch" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#3-watch" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>The player keeps its controls out of the way until you move the mouse. Press <strong>Space</strong> to play or pause, <strong>←</strong>/<strong>→</strong> to skip 10 seconds, and <strong>F</strong> for full screen. Drag the scrubber to see frame previews, change the playback speed, or bookmark the current moment with an optional label. Open player windows are restored the next time you launch.</p>

<h3 class="relative group">4. Bring In YouTube Videos
    <div id="4-bring-in-youtube-videos" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#4-bring-in-youtube-videos" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>With <a href="https://github.com/yt-dlp/yt-dlp"  target="_blank" rel="noreferrer">yt-dlp</a> installed (<code>brew install yt-dlp ffmpeg</code>), <strong>File ▸ Download from YouTube…</strong> saves a video into a category subfolder of your Videos Folder together with its English subtitles, then indexes it right away. If the video is already in your library, Videostack takes you to it instead of downloading a second copy. <strong>File ▸ Fetch YouTube Metadata</strong> adds the channel, description, and upload date to videos whose file names carry a YouTube id.</p>
<hr>

<h2 class="relative group">Search Syntax
    <div id="search-syntax" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#search-syntax" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Full-text search uses SQLite FTS5 and supports:</p>
<ul>
<li><strong>All words:</strong> <code>fold butter</code> finds passages containing both words.</li>
<li><strong>Boolean operators:</strong> <code>bread AND rye NOT sourdough</code>, and <code>OR</code> for alternatives.</li>
<li><strong>Prefixes:</strong> <code>ferment*</code> matches ferment, fermentation, fermented… Bare words get a <code>*</code> automatically, for search-as-you-type.</li>
<li><strong>Exact phrases:</strong> <code>&quot;autolyse the dough&quot;</code> matches the words in that order.</li>
</ul>
<hr>

<h2 class="relative group">Security &amp; Distribution
    <div id="security--distribution" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#security--distribution" aria-label="Anchor">#</a>
    </span>
    
</h2>

  
  
  
  



<div
  
    class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
  
  >
  <span
    
      class="text-primary-400 pe-3 flex items-center"
    
    >
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="currentColor" d="M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.7 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0zm0 66.8V444.8C394 378 431.1 230.1 432 141.4L256 66.8l0 0z"/></svg></span>
  </span>

  <span
    
      class="dark:text-neutral-300"
    
    ><strong>Signed, Notarized, Verified Updates:</strong> Every release is checked by Apple before you download it, and every update is checked by Videostack before it installs.</span>
</div>

<ul>
<li><strong>Gatekeeper &amp; Notarization:</strong> Distributed as a Developer ID–signed, notarized, and stapled disk image (<code>Videostack.dmg</code>), built with the hardened runtime.</li>
<li><strong>Signed Updates:</strong> Updates are delivered with <a href="https://sparkle-project.org/"  target="_blank" rel="noreferrer">Sparkle</a> over HTTPS. Each update carries an EdDSA signature that the installed app verifies against a public key built into it; an update that fails verification is refused.</li>
<li><strong>Reads Videos Where They Live:</strong> Videostack indexes files in place rather than copying them into a container, and runs yt-dlp from your Homebrew installation when you ask it to, so it runs outside the App Sandbox. It only reads the files and folders you add, and it never modifies them.</li>
</ul>
<hr>

<h2 class="relative group">Privacy: Your Library Stays on Your Mac
    <div id="privacy-your-library-stays-on-your-mac" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#privacy-your-library-stays-on-your-mac" aria-label="Anchor">#</a>
    </span>
    
</h2>

  
  
  
  



<div
  
    class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
  
  >
  <span
    
      class="text-primary-400 pe-3 flex items-center"
    
    >
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
<path fill="currentColor" d="M144 144v48H304V144c0-44.2-35.8-80-80-80s-80 35.8-80 80zM80 192V144C80 64.5 144.5 0 224 0s144 64.5 144 144v48h16c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V256c0-35.3 28.7-64 64-64H80z"/></svg></span>
  </span>

  <span
    
      class="dark:text-neutral-300"
    
    ><strong>Your Data Stays Yours:</strong> Videostack does not collect, track, or share any personal information, usage metrics, or telemetry.</span>
</div>

<ul>
<li><strong>Zero Analytics or Telemetry:</strong> There are no analytics libraries, tracking pixels, crash reporters, or third-party telemetry SDKs inside Videostack.</li>
<li><strong>No Accounts:</strong> You never create an account, enter an email, or register with any service.</li>
<li><strong>Strictly Local Index:</strong> The search index, tags, bookmarks, watch positions, and thumbnails live in <code>~/Library/Application Support/Videostack/</code> on your Mac. Your videos and their subtitles are never uploaded anywhere.</li>
<li><strong>Spotlight Stays On-Device:</strong> Titles, channels, and tags are added to the macOS Spotlight index, which is local to your Mac.</li>
<li><strong>Network Requests, Only These:</strong>
<ul>
<li><strong>YouTube (only when you ask):</strong> Downloading a video or fetching metadata runs yt-dlp, which contacts YouTube for that video. If yt-dlp isn&rsquo;t installed, metadata falls back to YouTube&rsquo;s public oEmbed endpoint, which receives only the video&rsquo;s URL. Nothing about your library is sent.</li>
<li><strong>Update check:</strong> About once a day, Videostack downloads a small update feed from <code>sagenhaft.space</code>. The request identifies the app version so a newer release can be offered; Sparkle&rsquo;s optional system-profile reporting is turned off, so no hardware or usage details are sent.</li>
</ul>
</li>
</ul>
<hr>

<h2 class="relative group">Technology Stack
    <div id="technology-stack" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#technology-stack" aria-label="Anchor">#</a>
    </span>
    
</h2>
<ul>
<li><strong>Language &amp; Toolchain:</strong> Swift 6.4 (strict concurrency, actor isolation), Xcode 27</li>
<li><strong>User Interface:</strong> SwiftUI and AppKit</li>
<li><strong>Playback &amp; Thumbnails:</strong> <a href="https://www.videolan.org/vlc/libvlc.html"  target="_blank" rel="noreferrer">libVLC</a> via <a href="https://github.com/harflabs/SwiftVLC"  target="_blank" rel="noreferrer">SwiftVLC</a></li>
<li><strong>Search &amp; Storage:</strong> SQLite FTS5 (BM25 ranking), via the system SQLite library</li>
<li><strong>System Integration:</strong> Core Spotlight</li>
<li><strong>YouTube (optional):</strong> <a href="https://github.com/yt-dlp/yt-dlp"  target="_blank" rel="noreferrer">yt-dlp</a> and ffmpeg, installed separately</li>
<li><strong>Updates:</strong> <a href="https://sparkle-project.org/"  target="_blank" rel="noreferrer">Sparkle 2</a></li>
<li><strong>Target:</strong> macOS 27+ (Apple Silicon)</li>
</ul>
<hr>

<h2 class="relative group">Third-Party Software &amp; Licensing
    <div id="third-party-software--licensing" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#third-party-software--licensing" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Videostack integrates and relies on several open-source projects:</p>

<h3 class="relative group">libVLC &amp; VideoLAN (LGPL v2.1)
    <div id="libvlc--videolan-lgpl-v21" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#libvlc--videolan-lgpl-v21" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Videostack uses <strong><a href="https://www.videolan.org/vlc/libvlc.html"  target="_blank" rel="noreferrer">libVLC</a></strong> (via <a href="https://github.com/harflabs/SwiftVLC"  target="_blank" rel="noreferrer">SwiftVLC</a>) for media decoding, video playback, and thumbnail extraction.</p>
<ul>
<li><strong>License:</strong> libVLC is copyright © <a href="https://www.videolan.org/"  target="_blank" rel="noreferrer">VideoLAN</a> and its contributors. It is free software distributed under the terms of the <strong><a href="https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html"  target="_blank" rel="noreferrer">GNU Lesser General Public License (LGPL) v2.1</a></strong> (or later).</li>
<li><strong>Source Code:</strong> You can obtain the complete, unmodified source code for libVLC directly from VideoLAN&rsquo;s repository at <a href="https://code.videolan.org/videolan/vlc"  target="_blank" rel="noreferrer">code.videolan.org/videolan/vlc</a> or via their <a href="https://www.videolan.org/vlc/download-sources.html"  target="_blank" rel="noreferrer">source archives</a>.</li>
<li><strong>Dynamic Linking &amp; Relinking:</strong> In compliance with the LGPL v2.1, libVLC is dynamically linked as an embedded framework (<code>VLCKit.framework</code> / <code>libvlc.dylib</code>). Users may inspect, modify, or replace the libVLC binaries within the application bundle.</li>
<li><strong>Trademark:</strong> <em>VLC</em> and <em>VideoLAN</em> are registered trademarks of the VideoLAN non-profit organization. Videostack is an independent software project and is not affiliated with, endorsed by, or sponsored by VideoLAN.</li>
</ul>

<h3 class="relative group">yt-dlp &amp; FFmpeg Integration
    <div id="yt-dlp--ffmpeg-integration" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#yt-dlp--ffmpeg-integration" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Videostack provides an optional helper to save videos and subtitles into your local library.</p>
<ul>
<li><strong>External Installation:</strong> Videostack <strong>does not bundle, package, or distribute</strong> <a href="https://github.com/yt-dlp/yt-dlp"  target="_blank" rel="noreferrer">yt-dlp</a> or <a href="https://ffmpeg.org/"  target="_blank" rel="noreferrer">FFmpeg</a>. It is designed to invoke the user&rsquo;s independently installed binaries (e.g., installed via <code>brew install yt-dlp ffmpeg</code>).</li>
<li><strong>License:</strong> <a href="https://github.com/yt-dlp/yt-dlp"  target="_blank" rel="noreferrer">yt-dlp</a> is released under <a href="https://unlicense.org/"  target="_blank" rel="noreferrer">The Unlicense</a> (public domain software). <a href="https://ffmpeg.org/"  target="_blank" rel="noreferrer">FFmpeg</a> is licensed under the LGPL v2.1+ / GPL v2+.</li>
<li><strong>Compliance &amp; Copyright:</strong> Videostack does not host, mirror, or redistribute third-party video content. Users are solely responsible for complying with applicable copyright laws, fair use provisions, and the terms of service of any third-party website or platform they choose to download from.</li>
<li><strong>Non-Affiliation:</strong> Videostack is independent and has no official relationship, sponsorship, or affiliation with yt-dlp, YouTube, or Google LLC.</li>
</ul>
<hr>

<h2 class="relative group">Download &amp; Installation
    <div id="download--installation" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#download--installation" aria-label="Anchor">#</a>
    </span>
    
</h2>
<div class="not-prose my-6 p-6 rounded-2xl border border-primary-500/30 bg-primary-500/5">
  <div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4 pb-4 border-b border-neutral-200/70 dark:border-neutral-800">
    <div>
      <h3 class="text-xl font-bold text-neutral-900 dark:text-white mb-1">Videostack for macOS</h3>
      <p class="text-sm text-neutral-600 dark:text-neutral-300">
        macOS 27+ &bull; Apple Silicon &bull; Signed &amp; Notarized
      </p>
    </div>
    <div class="flex-shrink-0">
      <a href="Videostack.dmg" class="inline-flex items-center justify-center gap-3 rounded-xl bg-primary-600 px-6 py-3 text-base font-bold text-white shadow-md transition hover:bg-primary-500 hover:shadow-lg focus:outline-none focus:ring-2 focus:ring-primary-500 dark:bg-primary-500 dark:hover:bg-primary-400 !no-underline whitespace-nowrap">
        <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 flex-shrink-0" viewBox="0 0 512 512" fill="currentColor"><path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/></svg>
        <span>Download (23.1 MB)</span>
      </a>
    </div>
  </div>
  <div class="pt-3 text-xs text-neutral-500 dark:text-neutral-400 font-mono break-all">
    <span class="font-sans font-semibold text-neutral-700 dark:text-neutral-300">SHA-256:</span> fbe8b42643db6fee97ccb112c316f7296c7b7891977dac243b7f8395c4fc36a4
  </div>
</div>
<p class="text-sm text-neutral-600 dark:text-neutral-300 -mt-2 mb-6 italic">
  By downloading, installing, or running Videostack, you acknowledge and agree to the disclaimer and limitation of liability below.
</p>
<p>To install, mount <code>Videostack.dmg</code> and drag <strong>Videostack</strong> to your <code>/Applications</code> folder. On first launch, choose your Videos Folder in <strong>Videostack ▸ Settings…</strong> (it defaults to <code>~/Movies</code>), then <strong>File ▸ Scan Videos Folder</strong>. For YouTube downloads, install yt-dlp and ffmpeg with <code>brew install yt-dlp ffmpeg</code>. Videostack checks for updates automatically; you can also choose <strong>Videostack ▸ Check for Updates…</strong> at any time.</p>
<div id="disclaimer"></div>

  
  
  
  



<div
  
    class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
  
  >
  <span
    
      class="text-primary-400 pe-3 flex items-center"
    
    >
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/></svg>
</span>
  </span>

  <span
    
      class="dark:text-neutral-300"
    
    ><p><strong>Disclaimer &amp; Limitation of Liability</strong></p>
<p>By downloading, installing, or using Videostack, you expressly agree that this software is provided free of charge on an <strong>&ldquo;as is&rdquo;</strong> and <strong>&ldquo;as available&rdquo;</strong> basis, without warranty, representation, or guarantee of any kind, whether express, implied, statutory, or otherwise, including but not limited to any warranties of merchantability, fitness for a particular purpose, non-infringement, quiet enjoyment, data accuracy, or error-free operation.</p>
<p>You are solely responsible for the content you download and for complying with the terms of service of any site you download from, as well as applicable copyright law. Videostack does not include yt-dlp; it runs your own installation when you ask it to.</p>
<p>The author and contributors shall not be held liable for any direct, indirect, incidental, special, consequential, exemplary, or punitive damages, or for any loss of data, incomplete or inaccurate search results, incorrect metadata or tags, corrupted libraries, hardware issues, or other claims arising out of or in connection with the software, its download, installation, performance, or use. You download, install, and use this software entirely at your own risk.</p>
</span>
</div>

]]></content:encoded>
      
    </item>
    
  </channel>
</rss>
