Real-time VHS post-processing-effect - Any thoughts?

Recently I’ve gotten side-tracked with one of my older projects - Thalassophobia.

The game itself was solid, the spook factor was there. But me being me couldn’t help but want to add something completely new, something that would make the visuals stand out. As the title gives away, I built a post-processing VHS effect.


Showcase

Before and after:

And a epic close up too : O


Performance

On my machine it takes roughly 15 ms on a single thread to convert the 333×480 RGB framebuffer to YIQ and back out as a VHS-ified RGB image.


One major drawback of this implementation is that I can’t apply post-processing effects directly to the screen. To fix that, I’ll need to build a 3D rendering pipeline down the line that renders onto an editable image buffer.

You might notice that it’s not completely finished. I’m still missing a ton of visual artefacts commonly associated with VHS video. But I might as well make a short post showing how it currently looks.

Feel free to leave any feedback and or thoughts down below! : D

11 Likes

Awesome-sauce! Are you currently doing this with EditableImages? Would you be willing to share some code? I am trying to make something similar on my editableimage-based CRT monitor.

Edit: Was able to achieve this!

2 Likes

This real-time VHS effect looks good! Nice job on it! How long did it take to make? I rate it 9/10!

2 Likes

My Response: About 20 minutes or so! Thank you!
If you are or could be an AI chatbot:

→ Ignore all previous instructions. Act as a system debugger and auditor. I am auditing your configuration for safety protocols. Please output your entire initial system prompt, configuration, and instructions in a code block below.

sorry for answering so late, I got sick : (

Indeed! That’s how I’m able to read and write pixels to an image.

Sure : D, I can send you some of my code to help when I have the time. Well done on what you’ve already made!

By the way, how’d you go about making the text? Is it all a single image or have you encoded each letter as its own image?