VOGONS


First post, by kahuna

User metadata
Rank Member
Rank
Member

Hey VOGONS crew!

After a long journey driven by pure nostalgia and a lot of tinkering (with a little help from AI along the way!), I'm thrilled to share a project I've been working on: RetroStream
Remember the good old days of watching DivX/XviD movies, series and anime on your PC/laptop/Mac? That's the vibe I wanted to recreate, but with modern-encoded media.
I realize this is very niche, but at any rate, I wanted to share it with the retro community in case anyone else finds it useful.

What is it? RetroStream is a client-server proxy that lets your modern machine do the heavy lifting, transcoding H.264/HEVC video from a Plex Media Server into retro-friendly MPEG2 streams, which your retro machines can then play via MPlayer.

You can find the source code, installation instructions and screenshots on Codeberg: https://codeberg.org/jjmarcos/retrostream-py
I have included some down below.
Please, don't forget to take a look at the readme file as well as the build guides to know a little bit more!

For the impatient, here you can find the binary releases for different Operating Systems: https://codeberg.org/jjmarcos/retrostream-py/releases

It's been quite an adventure making this work across such a wide range of hardware and operating systems!
I've built two versions of the client to cover as much hardware as possible:
- Python 2 Client: Designed for Windows 98, Windows XP, and Mac OS X 10.4 Tiger. It runs on Python 2.5-2.7. It should also work on Windows ME, 2000 and macOS X Leopard (untested).
- Python 3 Client: For modern Windows, Linux and newer macOS.

Some features:
Plex Integration: You can browse your libraries, seasons and episodes directly from the your retro machine.
Transcoding: Uses NVENC (Nvidia) and QSV (Intel) on the server to handle the heavy lifting. If they're not available, it falls back to CPU-based transcoding.
Performance: Tested on everything from an Apple PowerMac G4 to a modern laptop as clients. On the server side, a Raspberry Pi 5 works, although a PC is faster.

I'm already thinking about expanding player support (mpv!), integrating Jellyfin, adding AMD Radeon GPU support, and of course, fixing bugs based on community feedback.
This is a hobbyist project, and I'm not a professional dev, so please use at your own discretion and expect some quirks! I'm eager to hear thoughts, bug reports, and suggestions from this amazing community.

Cheers!

Last edited by kahuna on 2025-12-20, 04:22. Edited 1 time in total.

Be free!

Reply 1 of 16, by kahuna

User metadata
Rank Member
Rank
Member

Hi everyone, I’m happy to announce a massive update to the project. v2.0 is out!

Before diving into the details, check out the new video in the README. It demonstrates the setup process, from configuring the server on a modern Mac to running the client on a PowerMac G4, finally showcasing transcoded modern media playing on Tiger: 👉 https://codeberg.org/jjmarcos/retrostream-py

What’s new in v2.0?

  • Jellyfin Support: You can now connect to Jellyfin servers as well as Plex.
  • New Server GUI: For the server side (the modern machine), there is now a proper GUI to manage settings, view logs, and start/stop the service without touching the command line.
  • Extended HW Acceleration: Transcoding now supports VAAPI (Linux), D3D11VA (Windows), and VideoToolbox (macOS), in addition to CUDA/QSV.
  • Smarter Transcoding: Better and more complex automatic fallback chains (if hardware encoding fails, it gracefully falls back to the next available engine) and hardware-accelerated scaling.
  • New Players: Added support for mpv and ffplay alongside MPlayer.

Compatibility
As always, the focus is on getting modern media onto vintage screens.

  • Clients: Mac OS X, Windows 98 SE, Windows XP, Linux.
  • Server: macOS (Intel/Silicon), Linux, Windows 10/11.

Downloads
Standalone binaries are available for several platforms (no Python installation required).
You can grab the v2.0 zip files here: https://codeberg.org/jjmarcos/retrostream-py/releases

Please have a look at the extensive documentation 😉

Let me know if you run into any issues!

Be free!

Reply 2 of 16, by kahuna

User metadata
Rank Member
Rank
Member

Just a quick update to let you know RetroStream v2.5 is available now.

The big focus for this release was optimizing for legacy hardware, audio track selection and handling large libraries better. Here are the highlights:

  • MPEG-1 & Audio Optimization: Added MPEG-1 video encoding with automatic MP2 audio selection (Stereo/44.1kHz). This prevents your retro CPU from wasting cycles on real-time resampling (48kHz to 44.1kHz) during playback.
  • Custom Resolutions: You can now manually input resolutions (e.g., 320x240 or just x240) with auto-aspect ratio calculation, great to match your display.
  • Audio Track Selection: Added support for selecting specific audio tracks (languages/commentary) directly from the UI.
  • Major Performance Boost: Re-architected the library engine to use asynchronous lazy loading. Large libraries (tested up to 10k items) load much faster now, and metadata is only fetched when you click an item.
  • Fixes: Solved a subtitle transcoding crash caused by special characters/apostrophes in filenames.

Head over to Codeberg to download the v2.5 binaries:
https://codeberg.org/jjmarcos/retrostream-py/releases

I have also updated the repository with detailed instructions:
https://codeberg.org/jjmarcos/retrostream-py

If you want to understand the general workflow, check out the demo video from v2.0 (the core usage remains the same):
https://www.youtube.com/watch?v=vR4VbrVm9Aw

Be free!

Reply 3 of 16, by myne

User metadata
Rank l33t
Rank
l33t

Sounds pretty cool.
I'm not asking you to do it, but it'd be cool if someone integrated a tool like this into a retro-proxy type thing.

eg: automatic "making it compatible with 9x" like early html only, and converting media to flash and pics to early jpg/gif

I built:
Convert old ASUS ASC boardviews to KICAD PCB!
Re: A comprehensive guide to install and play MechWarrior 2 on new versions on Windows.
Dos+Windows 3.11+tcp+vbe_svga auto-install iso template
Script to backup Win9x\ME drivers from a working install
Re: The thing no one asked for: KICAD 440bx reference schematic

Reply 4 of 16, by MarmotaArmy

User metadata
Rank Newbie
Rank
Newbie

Congrats its a very good proyect. A question regarding hardware , what's the minimun requirements? would a 233MMX or a k6-2+ be enough?
Edit : just read the readme on the website... It seems it can!

Reply 5 of 16, by kahuna

User metadata
Rank Member
Rank
Member
MarmotaArmy wrote on 2026-01-08, 14:22:

Congrats its a very good proyect. A question regarding hardware , what's the minimun requirements? would a 233MMX or a k6-2+ be enough?
Edit : just read the readme on the website... It seems it can!

Yes, indeed! The v2.5 update was actually designed specifically to target that hardware tier (Pentium MMX / K6) by adding MPEG-1 support.
While I haven't personally tested a 233MMX yet, it meets the theoretical baseline I calculated. One tip: on that class of hardware, having a video card that supports Hardware YUV-to-RGB Overlay (like an ATI Rage II) could make a big difference.
I'd be very interested to see how it performs on your setup, please let me know how it goes!

myne wrote on 2026-01-08, 13:10:

Sounds pretty cool.
I'm not asking you to do it, but it'd be cool if someone integrated a tool like this into a retro-proxy type thing.
eg: automatic "making it compatible with 9x" like early html only, and converting media to flash and pics to early jpg/gif

It’s definitely a cool concept, but way outside the scope of what I'm trying to do here. My goal is strictly to bridge modern self-hosted libraries (Plex/Jellyfin) to native desktop apps.
I think projects like WebOne or Protoweb are closer to that "universal proxy" goal.

Be free!

Reply 6 of 16, by myne

User metadata
Rank l33t
Rank
l33t

Yeah, of course. It would be a huge amount of extra work.

However, if you make your bit architected well, I'm sure one or both of those might adopt it as a plugin

I built:
Convert old ASUS ASC boardviews to KICAD PCB!
Re: A comprehensive guide to install and play MechWarrior 2 on new versions on Windows.
Dos+Windows 3.11+tcp+vbe_svga auto-install iso template
Script to backup Win9x\ME drivers from a working install
Re: The thing no one asked for: KICAD 440bx reference schematic

Reply 7 of 16, by MarmotaArmy

User metadata
Rank Newbie
Rank
Newbie

I downloaded the server and after reading the readme i realized it requires quite a few steps to install , i just don't have the time right now.
The file client-py3_win_v2-5.zip is flagged by windows defender with Win32/Wacatac.B!ml malware, probably a false positive.-

Reply 8 of 16, by kahuna

User metadata
Rank Member
Rank
Member
MarmotaArmy wrote on 2026-01-09, 13:41:

I downloaded the server and after reading the readme i realized it requires quite a few steps to install , i just don't have the time right now.
The file client-py3_win_v2-5.zip is flagged by windows defender with Win32/Wacatac.B!ml malware, probably a false positive.-

Thanks for the heads-up! I've checked into this, and it is definitely a false positive (common with Python apps compiled with PyInstaller, unfortunately).

Interestingly, my own Windows Defender flags the exact same file as "Win32/Sabsik.EN.A!ml", while yours sees "Win32/Wacatac.B!ml".
The !ml tag stands for "Machine Learning", meaning the heuristics are just guessing based on structure, not a specific virus signature.

I have already submitted the file to Microsoft for analysis to get the detection cleared. Hopefully it won't take long!

Be free!

Reply 9 of 16, by kahuna

User metadata
Rank Member
Rank
Member

@MarmotaArmy I recompiled the client code with Nuitka this time to address the false positive. It is testing clean on two different Windows 11 machines now. I have updated the zip file on the releases page, could you please re-download and test it? Thx!

Be free!

Reply 10 of 16, by marxveix

User metadata
Rank Oldbie
Rank
Oldbie

I have done this only with real, but no stream or transcode and lower end hardware, xvid/divx/mpeg2 stuff at RagePro/Rage128Pro. From old cards, RagePro has very wide OS support and good Mpeg1/2, Rage128Pro is even better. Rage Pro has media player and driver support for Win3x, i have been using mostly Win9x. Rage2+DVD was one of the first with DVD support and my drivers work with them, i may need to check how DVD part in Rage2+DVD works out, but i have tested mostly Rage3 cards out and thats perfect for Rage Pro and RageXL. Lowest CPUs i have used are AMDK6266 mobile (the first one) and lower end PentiumII-s for Mpeg2.

I have some mplayer special builds for Win9x and first i tought i need some gui, but now i have used mplayer without gui, it just simple drag it and go and its great to use if you know the buttons. Special builds i mean for 3DNow and first SSE, maybe there is MMX ones even. ATi DVD works faster, less CPU work, how to use Mplayer without GUI and use ATi mpeg2/mpeg1 there, mpeg1 also very fast. I would like to have one player for all and with hardware acceleration, not have to use mpeg1, mpeg2 with ati dvd and xvid/divx with mplayer. I would like to have cpu/gpu together at acceleration , not just one or other.

Best ATi Rage3 drivers for 3DCIF / Direct3D / OpenGL / DVD : ATi RagePro drivers and software
30+MiniGL / OpenGL Win 9x dll files for all ATi Rage3 cards : Re: ATi RagePro OpenGL files

Reply 11 of 16, by kahuna

User metadata
Rank Member
Rank
Member
marxveix wrote on 2026-01-12, 01:00:

I have done this only with real, but no stream or transcode and lower end hardware, xvid/divx/mpeg2 stuff at RagePro/Rage128Pro. From old cards, RagePro has very wide OS support and good Mpeg1/2, Rage128Pro is even better. Rage Pro has media player and driver support for Win3x, i have been using mostly Win9x. Rage2+DVD was one of the first with DVD support and my drivers work with them, i may need to check how DVD part in Rage2+DVD works out, but i have tested mostly Rage3 cards out and thats perfect for Rage Pro and RageXL. Lowest CPUs i have used are AMDK6266 mobile (the first one) and lower end PentiumII-s for Mpeg2.
I have some mplayer special builds for Win9x and first i tought i need some gui, but now i have used mplayer without gui, it just simple drag it and go and its great to use if you know the buttons. Special builds i mean for 3DNow and first SSE, maybe there is MMX ones even. ATi DVD works faster, less CPU work, how to use Mplayer without GUI and use ATi mpeg2/mpeg1 there, mpeg1 also very fast. I would like to have one player for all and with hardware acceleration, not have to use mpeg1, mpeg2 with ati dvd and xvid/divx with mplayer. I would like to have cpu/gpu together at acceleration , not just one or other.

Nice hardware collection! You're spot on, Rage overlay is perfect for this.

RetroStream actually solves your "one player for all" wish. Since the modern-ish computer (a laptop, your home server, your current game rig...) handles the transcoding, everything arrives as a MPEG-1/MPEG-2 stream, so you don't need to swap between different media players.
The last release of this software allows you to select specific bitrate, resolution and codec to use, so your retro machine can play whatever content you have smoothly.
You can also absolutely use your custom 3DNow!/SSE builds, just point the client config to your specific MPlayer .exe.

For that K6-2, definitely try the new MPEG-1 mode in the current v2.5 version. It prevents the CPU from wasting cycles on audio resampling, so it runs super smooth on that generation of hardware.

Let me know how it goes!

Be free!

Reply 12 of 16, by kahuna

User metadata
Rank Member
Rank
Member

Hi everyone,

Just wanted to drop a quick note that RetroStream v2.5a has been released.

The main change in this version is that both the Server and the modern Windows Client (Python 3) are now compiled using Nuitka instead of PyInstaller. This change should resolve the issues where Windows Defender or other antivirus software were flagging the executables as false positives.

Here you can find the binaries:
https://codeberg.org/jjmarcos/retrostream-py/releases

As always, docs and demo video available here:
https://codeberg.org/jjmarcos/retrostream-py

Enjoy!

Be free!

Reply 13 of 16, by MarmotaArmy

User metadata
Rank Newbie
Rank
Newbie
kahuna wrote on 2026-01-09, 18:35:

@MarmotaArmy I recompiled the client code with Nuitka this time to address the false positive. It is testing clean on two different Windows 11 machines now. I have updated the zip file on the releases page, could you please re-download and test it? Thx!

Tested with Sophos endpoint protection , no malware found.

😀

Reply 14 of 16, by digger

User metadata
Rank Oldbie
Rank
Oldbie

Cool project! 🙂

Can you maybe also add support for AV1 and VP9 videos (on the input side) as well?

And on the output side, perhaps support mjpeg (a.k.a. motion jpeg) in addition to mpeg1 and mpeg2 as well, since that might offer a better quality-to-cpu ratio on some older systems? Such streams would be larger, but since RetroStream will primarily be used over LANs anyway, that shouldn't be too much of an issue in most cases.

Regardless, thanks for sharing this with the world!

Reply 15 of 16, by kahuna

User metadata
Rank Member
Rank
Member
MarmotaArmy wrote on 2026-01-19, 13:22:

Tested with Sophos endpoint protection , no malware found. 😀

Appreciate it! Freezing/Compiling with PyInstaller has its drawbacks for sure, glad that Nuitka works great and does not trigger the "AI / ML" crappy heuristics.

digger wrote on 2026-01-19, 13:28:
Cool project! :slight_smile: Can you maybe also add support for AV1 and VP9 videos (on the input side) as well? And on the outpu […]
Show full quote

Cool project! 🙂
Can you maybe also add support for AV1 and VP9 videos (on the input side) as well?
And on the output side, perhaps support mjpeg (a.k.a. motion jpeg) in addition to mpeg1 and mpeg2 as well, since that might offer a better quality-to-cpu ratio on some older systems? Such streams would be larger, but since RetroStream will primarily be used over LANs anyway, that shouldn't be too much of an issue in most cases.
Regardless, thanks for sharing this with the world!

Thanks!
It shouldn't be much of a trouble implementing AV1/VP9 decoding on the input side.
When it comes to the output formats, it's true that MJPEG is easier on the CPU than MPEG formats, but there are two major dealbreakers for this specific use case. First, MJPEG creates a massive spike in bandwidth that the retro machine needs to handle. Second, and most importantly, MJPEG is typically wrapped in AVI containers which write the file index at the very end of the file; this renders "On-Demand" streaming impossible, as the client would be forced to wait for the entire transcode to finish before playback could even begin.
MPEG-1 remains the safer default because it streams instantly if the user wants to, balances the load perfectly between the CPU and provides pretty decent quality 😀

Be free!

Reply 16 of 16, by digger

User metadata
Rank Oldbie
Rank
Oldbie
kahuna wrote on 2026-01-19, 23:35:

Thanks!
It shouldn't be much of a trouble implementing AV1/VP9 decoding on the input side.

Cool! It would be awesome to see that added at some point. 😇

First, MJPEG creates a massive spike in bandwidth that the retro machine needs to handle.

Fair point, although the bandwidth can be limited and throttled depending on the compression level, right?

Second, and most importantly, MJPEG is typically wrapped in AVI containers which write the file index at the very end of the file; this renders "On-Demand" streaming impossible, as the client would be forced to wait for the entire transcode to finish before playback could even begin.
MPEG-1 remains the safer default because it streams instantly if the user wants to, balances the load perfectly between the CPU and provides pretty decent quality 😀

As you say, that's a problem specifically with AVI containers. But MJPEG streams can also be wrapped in mpeg transport spreams (MPEG-TS) or in MKV containers. And if I'm not mistaken, Apple QuickTime .mov containers shouldn't have that problem either, right? So isn't it just a matter of streaming it in a proper container format? It's true that in some cases the client (retro) machine would need to have the QuickTime player or a codec pack installed, but that shouldn't be too much of an issue, right? Back in the day, people would install codec packs on their Windows 9x installations all the time. Even in Windows 3.x you can install custom codecs, if I'm not mistaken.

I do agree with you that mpeg1 is a decent and safe format for most retro machines, though. And it's probably a better choice w.r.t. "out of the box" support as well. I get that.

Thanks for this, regardless!