378 karma · joined December 29, 2018
A major inspiration for the social aspect was MIT's Scratch game editor, which allows users to "Remix" other people's content into their own versions. Gifygram builds on this by showing all remixes under the original author's thread which adds another avenue of interaction on top of commenting and sharing.
For those curious, the inspiration for the animator was an old and purposefully goofy video from 2007, the 300 PG version: https://www.youtube.com/watch?v=gNqiSkd1M6k
And lastly for the WebAssembly fans, all the rendering and video encoding on Gifygram is done entirely within the browser, no video processing server required :)
https://developer.mozilla.org/en-US/docs/Web/API/CanvasCaptu...
I think I will make this change because the ffmpeg legality seems hairy. Thank you!
However, I'll happily take fixes for it!
You could spin up simultaneous workers but you'd have to figure out how to break up what you're doing into separable parts. The file system is not shared between workers so you'd need to either send all the data back over or do something clever. This would be very doable, but I don't want to overload the browser especially on mobile.
Looking forward to when web threads are safe again... SharedArrayBuffer ;)
Thanks for the tip, I'm certainly no legal expert!
I had originally named this project Cake Town as an homage to a scene in that video, however the domain cake.town was taken so I chose https://madeitfor.fun/ instead :)
The goal was to be able to animate images and gifs over a video with controls that worked easily on both mobile and desktop, all on a website. I started to realize that with more things being compiled to WebAssembly, I could take advantage of video encoding directly on the page (no server encoding required). The web is truly a powerful platform!
Overall ffmpegjs/ffmpeg.js has been really nice. I would honestly prefer less API: they wrapped everything into a worker and made their own API calls, but I'd prefer the raw Emscripten filesystem and no worker/proxying. Then maybe a second library that wraps it up would be nice for ease of use.
I ran into one issue where the memory being used by ffmpeg was too great for running on an Android Pixel 3a (malloc failed). I split up the video encoding into 30 frame chunks. I don't think this was related to ffmpegjs/ffmpeg.js however.
There's some code shared between the relay, client, and server (for message structure) in the shared directory.