<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/github---halcyon-video-halcyon-video-your-jellyfin-library-as-a-walkable-1990s-video-rental-store--t6b3vh2t6" -->

---
title: GitHub - halcyon-video/halcyon-video: Your Jellyfin...
description: Halcyon Video is a GPL-3.0 open-source app that transforms your Jellyfin media library into a fully walkable 3D first-person 1990s video rental store built...
canonical: https://daily.dev/posts/github---halcyon-video-halcyon-video-your-jellyfin-library-as-a-walkable-1990s-video-rental-store--t6b3vh2t6
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: GitHub - halcyon-video/halcyon-video: Your Jellyfin library as a walkable 1990s video rental store — three.js, first-person, self-hosted | daily.dev
og:description: Halcyon Video is a GPL-3.0 open-source app that transforms your Jellyfin media library into a fully walkable 3D first-person 1990s video rental store built...
og:url: https://daily.dev/posts/github---halcyon-video-halcyon-video-your-jellyfin-library-as-a-walkable-1990s-video-rental-store--t6b3vh2t6
og:image: https://api.daily.dev/og/posts/T6b3Vh2t6.png
og:image:alt: GitHub - halcyon-video/halcyon-video: Your Jellyfin library as a walkable 1990s video rental store — three.js, first-person, self-hosted
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# GitHub - halcyon-video/halcyon-video: Your Jellyfin library as a walkable 1990s video rental store — three.js, first-person, self-hosted

**[Hacker News](https://daily.dev/sources/hn)** · 23 min read · 1 upvotes · 0 comments

## Summary

Halcyon Video is a GPL-3.0 open-source app that transforms your Jellyfin media library into a fully walkable 3D first-person 1990s video rental store built with Vite, TypeScript, and three.js. Every movie becomes a physical case on a shelf, browsable by genre aisle, with a New Releases wall, bargain bin, and a clerk NPC that gives recommendations based on your actual library. Features include four store eras (1990–2010), three floor plans, VHS/DVD formats, day/night/sunset lighting, a cloth-simulated checkout bag, a living room playback scene, and optional rental rules enforcing real early-90s checkout limits. It integrates with Jellyseerr for discovery and request management, RomM for a retro games department, and supports mpv for lossless local playback. A 2.5D HTML/CSS mode runs on Raspberry Pi hardware, and Remote Play streams the live store over WebRTC to any browser. Deployable via Docker, npm dev server, or a systemd kiosk service, it idles at near-zero CPU/GPU when not in use.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://github.com/halcyon-video/halcyon-video>

## Questions this post answers

### Is there a self-hosted app that turns a Jellyfin library into a browsable 3D video store?

Halcyon Video is an open-source, GPL-3.0 licensed project that procedurally builds a walkable, first-person 1990s video rental store from a Jellyfin library using three.js. Every title becomes a physical rental case on a shelf, genres become sections, and it runs as a Vite + TypeScript app, optionally Tauri-wrapped, deployable via Docker or as an HTPC kiosk service.

_Self-hosters exploring creative Jellyfin front ends can track projects like this one on daily.dev._

### Does Halcyon Video support Plex or Emby instead of Jellyfin?

No, only Jellyfin is supported along with a no-server demo mode as of the current release. The media layer is built as one module, and Plex/Emby adapters are the most-requested roadmap item, tracked as the project's most-watched open issue, but no timeline is given for when they might ship.

_Anyone weighing media-server compatibility before adopting a self-hosted tool can follow updates like this on daily.dev._

### Can a 3D web app like this run on low-powered hardware such as a Raspberry Pi?

Yes, a built-in 2.5D mode renders the entire store as plain HTML/CSS with no WebGL and no three.js download, making it near-instant on weak hardware including a Raspberry Pi. Render-on-demand also means the 3D mode itself only draws frames when something changes, idling at near-zero CPU and GPU otherwise.

_Developers weighing 3D web rendering against lightweight fallbacks for constrained hardware can find similar builds on daily.dev._

## Community take

How the wider developer community reacted, aggregated from 1 discussion and 30 comments across hackernews (as of 2026-09-14).

**TL;DR:** Developers are charmed and impressed by the level of detail and nostalgia packed into this project, with most comments expressing delight at the craftsmanship; a few minor usability issues were noted but didn't dampen the overall enthusiasm.

**Sentiment:** 80% positive · 15% mixed · 5% skeptical

**The case for**

- The attention to period-accurate detail — store eras, VHS/DVD casing, signage, and lighting — is praised as exceptional.
- The README design is highlighted as user-centric and effective at conveying the project's breadth.
- The spatial/Method of Loci angle is seen as a genuinely useful way to remember and browse a media library.

**The pushback**

- Navigation is awkward because the screen captures the cursor, making mouse control difficult and arrow-key movement unintuitive.
- A bag animation bug renders the checkout case on the outside of the bag rather than inside it.
- The experience is inherently solitary, missing the social dimension that made real video stores feel alive.

**By community**

- hackernews (positive): Overwhelmingly positive reactions celebrating the nostalgia, craftsmanship, and clever concept, with only minor UX complaints raised.

**Hottest debate:** Whether a single-player virtual store can capture the social, shared nature of a real video rental shop.

**Open questions**

- Could an AI-generated 'judgy clerk' video persona be integrated to replicate the opinionated video store employee experience?
- Is there a path to making the store a shared/multiplayer space to restore the social element of real rental stores?

**Highlights**

> And just so much love and care crammed in. > Four decades of fit-out — board signage and VHS in 1990, the fascia-band era in 1993, arched plaques in 2000, wire-black DVD shelving in 2010. > VHS or DVD — the whole store re-cased, on correctly-proportioned rental shells. And day/night, etc. Lots of great features too. > Remote Play streams the live store to any browser, with its own TURN relay for off-LAN viewers. I love the README design. Shows the breadth, encourages demo use. Does it…? is a great user-centric section, where it can give some emphatic yes yes yes'es! Touching project, a very fine homage to the past.
> — [jauntywundrkind on hackernews](https://news.ycombinator.com/item?id=49262290)

> Navigation was difficult as the screen eats the cursor which resulted in blind clicks, and the arrow keys did not move around as expected. Smashing esc/enter blindly eventually led me to checking out. The animation rendered the case going into the bag but then rendered the object on the outside of the back as if it was stuck with velcro instead of sitting inside.
> — [dylan604 on hackernews](https://news.ycombinator.com/item?id=49260887)

> Method of Loci! Finally, I can remember where everything is...
> — [andai on hackernews](https://news.ycombinator.com/item?id=49261534)

> I agree, but I wonder if it's inherently missing being a shared space. Even if these were commercial places, other people interacted with them in different ways, which shaped it to some degree
> — [\_def on hackernews](https://news.ycombinator.com/item?id=49261064)

**Source threads**

- [hackernews](https://news.ycombinator.com/item?id=49211158) · 65 points · 30 comments

## Similar posts on daily.dev

- [I turned my Jellyfin library into a virtual movie theater with one plugin](https://daily.dev/posts/i-turned-my-jellyfin-library-into-a-virtual-movie-theater-with-one-plugin-d3yzdbd4a) · XDA Developers · 1 upvotes · 0 comments
- [This Jellyfin plugin made my media library feel like old-school cable TV](https://daily.dev/posts/this-jellyfin-plugin-made-my-media-library-feel-like-old-school-cable-tv-jckremkoj) · XDA Developers · 1 upvotes · 0 comments
- [EmulatorJS/EmulatorJS: A web-based frontend for RetroArch](https://daily.dev/posts/emulatorjs-emulatorjs-a-web-based-frontend-for-retroarch-nzqdju1az) · Hacker News · 34 upvotes · 0 comments
- [GitHub - maveio/core: Open-source video platform. Upload, encode, and publish videos with your own storage.](https://daily.dev/posts/github---maveio-core-open-source-video-platform-upload-encode-and-publish-videos-with-your-own-s-qk6grdmjg) · ElixirStatus · 1 upvotes · 0 comments

---

Tags: [#typescript](https://daily.dev/tags/typescript), [#self-hosting](https://daily.dev/tags/self-hosting), [#jellyfin](https://daily.dev/tags/jellyfin)

[View this post on daily.dev](https://daily.dev/posts/github---halcyon-video-halcyon-video-your-jellyfin-library-as-a-walkable-1990s-video-rental-store--t6b3vh2t6)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"GitHub - halcyon-video/halcyon-video: Your Jellyfin library as a walkable 1990s video rental store — three.js, first-person, self-hosted","url":"https://daily.dev/posts/github---halcyon-video-halcyon-video-your-jellyfin-library-as-a-walkable-1990s-video-rental-store--t6b3vh2t6","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/github---halcyon-video-halcyon-video-your-jellyfin-library-as-a-walkable-1990s-video-rental-store--t6b3vh2t6"},"datePublished":"2026-08-11T16:58:40.612Z","dateModified":"2026-09-14T06:17:39.620Z","description":"Halcyon Video is a GPL-3.0 open-source app that transforms your Jellyfin media library into a fully walkable 3D first-person 1990s video rental store built...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/c4eb63a79a58b1fb253bfd24b08f79bb?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/c4eb63a79a58b1fb253bfd24b08f79bb?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Hacker News","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Hacker News","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/hn","url":"https://daily.dev/sources/hn"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/github---halcyon-video-halcyon-video-your-jellyfin-library-as-a-walkable-1990s-video-rental-store--t6b3vh2t6","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"typescript,self-hosting,jellyfin","timeRequired":"PT23M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Hacker News","item":"https://daily.dev/sources/hn"},{"@type":"ListItem","position":3,"name":"GitHub - halcyon-video/halcyon-video: Your Jellyfin library as a walkable 1990s video rental store — three.js, first-person, self-hosted"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/github---halcyon-video-halcyon-video-your-jellyfin-library-as-a-walkable-1990s-video-rental-store--t6b3vh2t6#faq","mainEntity":[{"@type":"Question","name":"Is there a self-hosted app that turns a Jellyfin library into a browsable 3D video store?","acceptedAnswer":{"@type":"Answer","text":"Halcyon Video is an open-source, GPL-3.0 licensed project that procedurally builds a walkable, first-person 1990s video rental store from a Jellyfin library using three.js. Every title becomes a physical rental case on a shelf, genres become sections, and it runs as a Vite + TypeScript app, optionally Tauri-wrapped, deployable via Docker or as an HTPC kiosk service. Self-hosters exploring creative Jellyfin front ends can track projects like this one on daily.dev."}},{"@type":"Question","name":"Does Halcyon Video support Plex or Emby instead of Jellyfin?","acceptedAnswer":{"@type":"Answer","text":"No, only Jellyfin is supported along with a no-server demo mode as of the current release. The media layer is built as one module, and Plex/Emby adapters are the most-requested roadmap item, tracked as the project's most-watched open issue, but no timeline is given for when they might ship. Anyone weighing media-server compatibility before adopting a self-hosted tool can follow updates like this on daily.dev."}},{"@type":"Question","name":"Can a 3D web app like this run on low-powered hardware such as a Raspberry Pi?","acceptedAnswer":{"@type":"Answer","text":"Yes, a built-in 2.5D mode renders the entire store as plain HTML/CSS with no WebGL and no three.js download, making it near-instant on weak hardware including a Raspberry Pi. Render-on-demand also means the 3D mode itself only draws frames when something changes, idling at near-zero CPU and GPU otherwise. Developers weighing 3D web rendering against lightweight fallbacks for constrained hardware can find similar builds on daily.dev."}}]}
```

