Skip to content
This repository has been archived by the owner on Jul 26, 2022. It is now read-only.


Repository files navigation

Virtual Art Sessions

This repository mirrors the active Virtual Art Sessions site (code name Project Udon) and has been opened up with the Apache License 2.0 so that anyone interested can dig around and see how it works. This is meant to accompany the explanations in the case study.

Points of interest

Here are some starting points to help you poke through the code:

  • 3D painting & pointcloud engine : /static/src/js/viewer
  • Data from artist sessions (all sessions from 5 of the artists) : /data/sketches/
  • Sketch viewer/editor : /static/src/js/pages/test.js
  • Proxy to serve Cloud Storage media through app engine (work around for DOM 18 exception in some browsers): /sitepackages/djangae/

Running the project

This project is built on Google App Engine with Djangae.

To get started:

  • Clone this repo (don't forget to change the origin to your own repo!)
  • Run python ./install_deps (this will pip install requirements, and download the App Engine SDK)
  • npm install
  • python runserver

The install_deps helper script will install dependencies into a 'sitepackages' folder which is added to the path. Each time you run it your sitepackages will be wiped out and reinstalled with pip. The SDK will only be downloaded the first time (as it's a large download).


Environment setup

  • Clone this repo
  • Run ./install_deps (this will pip install requirements, and download the App Engine SDK)
  • Install frontend dependencies by running bower install && npm install


  • Run python runserver to run the application.
  • Run gulp in another terminal tab/window to enable compilation and watching of static files for the frontend.


To check security, run:

  • python checksecure --settings=udon.conf.production

To build and deploy, run:

$ ./scripts/


If you are on OS X and using Homebrew-ed Python, you might get the following error when running ./install_deps:

error: must supply either home or prefix/exec-prefix -- not both

This is a known issue and a possible workaround is to make an "empty prefix" by default by adding a ~/.pydistutils.cfg file with the following contents:


Working with remote videos

  • run python ./scripts/
  • access any view that requires a video and wait for a bit so the video can get uploaded to the local GCS

Note: the delay happens only when you're accessing the video for the first time.

Code Credits

  • Data collection and wrangling - @dataarts
  • WebGL viewer - @mflux
  • Site build and Python server - @potatolondon


Source for the "Virtual Art Sessions" chrome experiment.







No releases published


No packages published