More selected projects

Screen Shot 2021-01-11 at 10.30.42 AMScreen Shot 2021-01-11 at 10.30.42 AM


An interactive animation highlighting the struggles of assimilation and the longing for belong of immigrants and children of the diaspora 

Timothy Lee



KYOPOMERICA investigates the concept of “home” and our sense of belonging as it relates to contemporary concerns such as immigration, assimilation, and the identity politics of children of the diaspora. I used my own history with the immigration experience, my history of frequently moving between homes, and the whitewashing of spaces I formerly called my home, as vectors for a broader conversation around the geographical, emotional, and personal attachments to the meaning of “home.” The word "kyopo", a term used to describe Korean nationals who have left Korea at a young age, used to be a derogatory slur - synonymous with the notion of "traitorous." I've come to usurp this term and make it my own in recent times, and in spite of its growing mainstream acceptance, show the everlasting anxiety of being uncertain if you'll ever belong. My heavy Western tongue betrays my slanted eyes, and this animation serves as a metaphor for growing up wavering back and forth between the many societal and cultural pressures of an immigrant’s life.

In completing this project, the techniques were guided with the tutorials and and educational materials of Daniel Shiffman (Learning Processing, Second Edition) as well as from watching videos by Lewis Lepton's openframeworks guide. All images used in this project are either taken by me or within the domain of free use (no copyright). 



HD AssimilationHD Assimilation


A Hi-Resolution print out of my animation. This static image captures the midpoint between the transitions in the animation, capturing the duality of living between cultures. 






This animation makes use of PImage, pixel processing, the use of sine/cosine functions, and mapping the return value of those functions onto another range of values to use in my functions. I uploaded two images, koreanFlag and americanFlag, as my background images, and used the tint() function to change the opacity of the Korean flag whose value would change between opaque <-> translucent based on the mapped return values of putting the current frame count in a sine function. This caused a smooth animation whereby the Korean flag would come in and out of view, showing or hiding the American flag behind it. I made sure to not make it 100% opaque or 100% transparent because the most interesting moments occured when the two flags were both present on screen (at various levels of prominence).

For the animated faces, I did something similar to the technique above but I used a cosine function instead to generate a return value that was mapped to pixel values of 0-255. Because I mapped it with limitations, there was no need to constrain the r, g, b, values during pixel processing. I chose to use sine and cosine so that the face transition rates were not the same as the background transition rates. I made this difference more apparent by dividing the frameCount of background and face at different float values.

I wanted this animation to have an interactive component while still having a final static image as an output. I added a mousePressed class so that pressing the mouse would export an image at the current frame. Because the animation is not static, each mousePressed event will produce a slightly difference .jpg aptly titled 'assimilationAttempt' in the Sketch Folder. In doing so, I wanted the audience's attempt at taking the "perfect" picture (based on their own aesthetic values) to mirror my attempt at trying to live the "perfect American life" while I was a child, and now as an adult, trying to reconcile the two hemispheres of my American and Korean backgrounds.



Screen Shot 2021-01-11 at 10.30.42 AMScreen Shot 2021-01-11 at 10.30.42 AM

The image sequence above shows the transitions that are occuring in the animation. To create a controlled and reliable fluctation in transitions, I opted to use sine and cosine functions and map the return value of -1 to 1 to scale it up and apply it to either the alpha channel (of tint()) or for the RGB values in my pixels. In moving forward, I would love to explore changing the alpha values directly with pixel processing instead of relying on tint().