<title>Photobooth</title>
-webkit-filter: blur(3px);
-webkit-filter: brightness(5);
-webkit-filter: contrast(8);
-webkit-filter: hue-rotate(90deg);
-webkit-filter: hue-rotate(180deg);
-webkit-filter: hue-rotate(270deg);
-webkit-filter: saturate(10);
-webkit-filter: grayscale(1);
-webkit-filter: sepia(1);
-webkit-filter: invert(1)
<video id="monitor" autoplay onclick="changeFilter(this)" title="Click me to see different filters"></video>
<p><button onclick="init(this)">Capture</button></p>
<p id="errorMessage">↑<br>Click to begin</p>
<canvas id="photo" style="display:none"></canvas>
navigator.getUserMedia = navigator.webkitGetUserMedia || navigator.getUserMedia;
window.URL = window.URL || window.webkitURL;
var app = document.getElementById('app');
var video = document.getElementById('monitor');
var canvas = document.getElementById('photo');
var effect = document.getElementById('effect');
var gallery = document.getElementById('gallery');
var ctx = canvas.getContext('2d');
'hue-rotate', 'hue-rotate2', 'hue-rotate3',
function changeFilter(el) {
var effect = filters[idx++ % filters.length];
el.classList.add(effect);
function gotStream(stream) {
video.src = window.URL.createObjectURL(stream);
video.src = stream; // Opera.
video.onerror = function(e) {
stream.onended = noStream;
video.onloadedmetadata = function(e) { // Not firing in Chrome. See crbug.com/110938.
// Since video.onloadedmetadata isn't firing for getUserMedia video, we have
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
var msg = 'No camera available.';
msg = 'User denied access to use camera.';
document.getElementById('errorMessage').textContent = msg;cv
ctx.drawImage(video, 0, 0);
var img = document.createElement('img');
img.src = canvas.toDataURL('image/webp');
gallery.appendChild(img);
var w=window.open('about:blank','image from canvas');
w.document.write("<img src='"+img.src+"' alt='from canvas'/>");
// intervalId = setInterval(function() {
// ctx.drawImage(video, 0, 0);
// var img = document.createElement('img');
// img.src = canvas.toDataURL('image/webp');
// var angle = Math.floor(Math.random() * 36);
// var sign = Math.floor(Math.random() * 2) ? 1 : -1;
// img.style.webkitTransform = 'rotateZ(' + (sign * angle) + 'deg)';
// var maxLeft = document.body.clientWidth;
// var maxTop = document.body.clientHeight;
// img.style.top = Math.floor(Math.random() * maxTop) + 'px';
// img.style.left = Math.floor(Math.random() * maxLeft) + 'px';
// gallery.appendChild(img);
if (!navigator.getUserMedia) return console.log('navigator.getUserMedia() not available')
navigator.getUserMedia({video: true}, gotStream, noStream);