function runInit () {
				function playSelfAndUnbind () {
					self._video.play();
					if (self._options.poster) {
						self._seeThru.getPoster().removeEventListener('click', playSelfAndUnbind);
					} else {
						self._seeThru.getCanvas().removeEventListener('click', playSelfAndUnbind);
					}
				}

				if (elementStore.has(self._video)) { throw new Error('seeThru already initialized on passed video element!'); }

				self._seeThru = new TransparentVideo(self._video, self._options);

				// attach behavior for start options
				if (self._options.start === 'clicktoplay') {
					if (self._options.poster) {
						self._seeThru.getPoster().addEventListener('click', playSelfAndUnbind);
					} else {
						self._seeThru.getCanvas().addEventListener('click', playSelfAndUnbind);
					}
				}

				// attach behavior for end options
				if (self._options.end === 'rewind') {
					self._video.addEventListener('ended', function () {
						self._video.currentTime = 0;
						self._seeThru.getCanvas().addEventListener('click', playSelfAndUnbind);
					});
				} else if (self._options.end !== 'stop') {
					self._video.addEventListener('ended', function () {
						self._video.currentTime = 0;
						self._video.play();
					});
				}

				// attach behavior for posterframe option
				if (self._options.poster && self._video.poster) {
					self._video.addEventListener('play', function () {
						self._seeThru.getPoster().style.display = 'none';
					});
					self._video.addEventListener('pause', function () {
						self._seeThru.getPoster().style.display = 'block';
					});
				}

				// some events that are registered on the canvas representation
				// will be echoed on the original video element so that pre-existing
				// event handlers bound to the video element will keep working
				// it is recommended to use `.getCanvas()` to bind new behavior though
				eventsToEcho.forEach(function (eventName) {
					self._seeThru.getCanvas().addEventListener(eventName, function () {
						var evt;
						if (canConstructEvents) {
							evt = new Event(eventName);
						} else {
							evt = document.createEvent('Event');
							evt.initEvent(eventName, true, true);
						}
						self._video.dispatchEvent(evt);
					});
				});

				self._seeThru.startRendering();

				ready = true;

				elementStore.push(self._video);

				callbacks.forEach(function (cb) {
					cb(self, self._video, self.getCanvas());
				});
			}
@method init
sets up transparent video once the video has metadata
@returns self
@API private