Inspiration

The inspiration for my project was pretty simple: I was sick if having to figure out what tools to use, or, worse yet, using a sketchy website when I needed to convert from one media format to another. Thus, the idea for Apostle was born: an easy to use website that 1) has all the different media conversion options within a single click and 2) allows for simple composition of basic media operations so that most common media tasks can be done easily.

Apostle's current iteration is video focused, however the plan for the future is bright! I hope to add support for operations on other "commonly useful" multimedia types such as pdfs, images, and text documents soon.

What it does

Apostle allows you do drag, drop, and connect nodes in an easy fasion to compose basic media operations like video encoding transformations (for example, converting a .mp4 -> .mkv), basic utility functionality such as generating GIFs from video files, and, in the future, ideally a lot more.

How I built it

Apostle's front end is build using the Svelte web framework, running on top of a nodeJS server. Apostle is entirely client side - meaning that the nodeJS server only serves the webpages and static content - no more waiting on slow internet for files to upload! Apostle's media engine is built on top of the ffmpeg library, compiled to webassembly. Webassembly was a great choice for this project, and it means that you never have to upload your media content to someone else's server - everything stays local, right in your browser, while running at near-native speeds!

Challenges we ran into

Time - while the technology stack was surprisingly pain-free, the lack of time for the project means that some of the originally planned features did not make it through to the end, and there was not enough time to add support for operations on other multimedia encodings quite yet!

Lack of good libraries - Svelte was a joy to use, however, it is a web framework with a smaller community, and therefore there was not a good option for a node based editor out of the box. I ended up creating my own from scratch, but that probably took more time that it was worth in the end.

Accomplishments that I'm proud of

I'm definitely proud of how far I got in the time I had, considering I have never used Svelte or web assembly before, and have only minimal Javascript experience. I also think that the UI looks pretty clean, which is great as my brief forays into UI design in the past can only be described as 'unmitigated disaster'.

What I learned

I learned a ton about web programming, as it was a field that I had never really done anything larger than a basic "hello world" project in. I also am excited to continue using webassembly, and perhaps compiling some of my own code to run with it.

What's next for Apostle

There are still a few elusive bugs with the UI, but the main thing that I would like to add going forward are more conversion modules. I think it would be really useful to be able to go to a single website to convert between almost any file-type you could want. I would also like to add a better type system for the nodes so that node connection constraints can be generated properly.

I also would like to get a proper domain and host the website. Unfortunately, the project requires some special hosting features, so it is not possible to put it up on something like a github portfolio page. By the time this summary is being read, I may have managed to put it up on my website, in which case the below link will take you there!

Built With

Share this project:

Updates