I design audiovisual experiences on Web.
Most of my codes are written in Javascript, Python and C++.
I enjoy creating music and digital art.
Photography/videography is my hobby.
Among all, I love Blender and WebGL most.
Some of my personal projects.
A list of songs I have composed.
A number of my photos/videos, along with digital arts.
In the last section, you can find more infomration about me.
Empowering the connections.
The idea takes many forms
But always it is an attempt
To send a message That will, hopefully, connect: People, ideas, thoughts, beliefs. Encouraging that among all the differences, We are one and we are all connected.
- Zero (Nov 13, 2013): The shutting down of my very first portfolio website, that I launched in 2012.
Zero is part of Trajectory project (more about this project below).
The purpose of this work is to encourage people that their worth is not dependent on what they had, a simple mistake that I made at that time.
This experiment used CSS for animations and it featured an event-driven approach for handling visual changes.
Technologies involved:- HTML, CSS, Javascript.
- One (Aug 4, 2014): Where everything started to move again. This mysteriously simple countdown only showed
a percentage, with no explicit date, but eventually reached 100% on Aug 19, when Infinity project was launched.
The conversation on this page is about the heart-breaking feeling of letting go, which resembles the first step, after giving up
everything and standing still for a long time.
The background music (which unlike all the other works is not audio-synced), composed by Sunlight Ascending, features a ticking clock
sound that supports the countdown and the leaving theme of the text.
Technologies involved:- HTML, CSS, Javascript.
- Bash, Cron.
- Adobe Photoshop.
- Infinity (Aug 19, 2014):
A very long and bittersweet page that showed the many feelings I went through during 2014.
The page was codenamed “The Gathering of the Clouds”, the name of
a song by Anathema band that has inspired me a lot. The message of this page is simple: Everything that has a beginning,
has an end, so we can see the unchanging truth that eternally enfolds them. This page features a “positional” music that I created, named “Begin Again”.
Here the experience is not audio-synced, but position-synced, where the music progresses as the reader advances through the text.
Technologies involved:
- HTML, LESS (CSS), Javascript, Web Audio API (for Low-pass Filtering).
- Grunt, UglifyJS, Autoprefixer.
- Adobe Photoshop, Logic Pro X, Adobe Audition.
- Memento (May 9, 2013): A memorial for someone. It was a
joint project with Sadjad Fouladi, and it was the origin of the ongoing project
called Trajectory.
Technologies involved:- HTML, Javascript.
- Minutes to Takeoff (July 17, 2014 – Present): Part of a bigger project, Admission.rocks.
It is a virtual flight board for people leaving their home country to study abroad. This is a bittersweet experiment. It helps people to honor the remaining time they have, more, and also it helps friends not to miss when someone leaves, so they can at least give them a goodbye call. Yet, it still hurts to leave and facing it is not a sweet experience.
This work features “Leaving the Final Gate” music that I created to support the experience. An alternate brighter and more hopeful version was also created, with another piece of music named “You’ll Be Safe”, available here.
Technologies involved:- HTML, Javascript.
- Python, Django, Nginx.
- Time to Leave (Nov 26, 2014):
A clock with a text about leaving. The Persian text on this page says: “There’s no way to go back in time, in the opposing direction of the clock hands. Waiting will not be the key to open the door you are waiting at. The last letter is the sound of turning the last doorknob.”
This page was a virtual locked door, that was opened only after my flight on Nov 28, 2014, took off. A script continuously checked my flight status, and this page communicated with the result of this script using Redis. The clock on this page is a countdown, with mysterious symbols, which were connected to the text shown when the second hand was moving over them. Interestingly, my flight was delayed about 20 minutes and my friends thought my script has failed to reveal the secret page, while it was patiently waiting for the real departure time. The secret page, named “Hasta La Vista”, was exposed by showing the path /hasta/la/vista, which can be accessed here (This text is also in Persian).
Technologies involved:- HTML, Javascript.
- Node.js, Redis, Nginx.
- Using several tools, useful information about thread executions and memory consumptions of a program was collected and the important information was shown in a readable
way and sometimes with suggestions to solve the problem. A sample result of text information can be seen here. These tools include:
- Valgrind Memcheck: Checking for illegal accesses to memory, memory leaks and illegal frees.
- Valgrind Helgrind: Checking for possible data races, possible deadlocks and other threading problems.
- Pthreadw: General information about threads was provided.
- Running malicious code was prevented using GDB catchpoints.
- Queuing compiling and running codes was managed by Celery.
- A graphical representation to see if threads are running correctly. The UNIX strace tool was used to detect thread creation and join times and then D3.js was used to create a graphical representation. As you can see in the following example, which shows a matrix multiplication using threads, this graphical view helps to detect joins, child thread creations and the corresponding time for each event. Not shown in this example, but in case of a locked thread, the corresponding duration was shown using a darker color on that thread line.
- Valgrind Helgrind, Valgrind Memcheck, Pthreadw, strace, GDB, Bash.
- Python, Django, Celery (Distributed Task Queue), Nginx.
- HTML, Javascript, JQuery, D3.js.
The framework consists of the following libraries:
- GLCore: The core library with functions for single-pass and multi-pass rendering, model loading, shader compiling, cubemap and framebuffer creation.
- GLWorld: A library for scene management. Helps with saving and switching between different camera/scene parameters.
- GLView: A library for doing matrix/vector operations that also provides methods for model/view/projection matrix creation.
- Raytrace: A library for raytracing and finding intersections. Used for detecting user interaction.
- Expose: A small library to make namespace management in javascript cleaner and easier.
- Physics Engine: A simple physics engine that supports simulating springs, chains, cloths and jelly cubes in realtime.
- Realistic Model Viewer: A web application to render a realistic view of a 3D model using Shadow Mapping and Torrance-Sparrow model. Omnidirectional shadow mapping was done using multi-pass rendering and cubemaps creation methods provided by GLCore framework.
- Surface of Revolution: A web application to create and modify a B-Spline curve and see the resulting surface of revolution in realtime. A KD-tree structure was used for speeding up the interaction.
- MRI Volumetric Visualization: A web application to parse MRI image slices in DICOM format and create a realtime 3D visualization with various controls for shading customization. A custom filter was used to compensate the lack of 3D textures in WebGL 1.0.
- Rollercoaster: A web application to simulate a realistic rollercoaster. A rail could be created and modified in realtime with user input.


The following is what I have created so far, as a result of expressing very different emotions that I have been through. Every track has more information about it on its bancamp page. They can mostly be categorized as Post-Rock, yet some of them are more Ambient or Orchestral.
If you want, you can have an audio-synced experience of "I Will Explode To Love You In A Million Pieces" by scrolling to the top of this page and pressing “Enable Audio-Synced Experience”. This song is dedicated to my dear wife, Saharnaz.
It's been years that I've had an interest in doing digital arts. I have experimented with
photo manipulation, camera tracking and vector art creation. But I never created digital art for
the sake of digial art. Recently, I learned a bit about Blender, and I decided to do what I wanted
to do from the very beginning: 3D rendering. The single work below is just the beginning, and I hope
that I keep adding more works to it.


I love Post-Rock music. For every emotion, I can find a Post-Rock track that would take care of that emotion. Normally, I talk about Post-Rock a lot, so that's enough for here.
Sometimes I get a feeling that I should create something magnificent that will change everything, but it goes away very quick. This feeling once again struck me, and that's why after 4 years, I brought back my portfolio website, to hopefully keep moving in that direction.
In the end, infinity is not a number, it is a direction, a description of growth with no limits. So, let it be "zero", if it turns into infinity, it will, always, be enough.
You can contact me here, to get my resume. More information about my education can be found on my Linkedin. Find me everywhere else by looking for Kamyar Infinity.