How is divyacakṣus - the divine eye made?
Boudoir // divyacakṣus - the divine eye
Quil Image Blending
First, we need to add a bunch of images in the images folder.
Then we call lein run -m blending.blending
Use rename.sh if your images' name contains special characters.
The script randomly selects an image and a blending mode and adds it to the canvas. The settings are also randomly selected (Quil API Blend)
(ns blending.blending
(:require [quil.core :as q]
[me.raynes.fs :as fs]))
(defn setup []
(q/background 0 0 0)
(q/frame-rate 60)
(q/set-state! :images (fs/list-dir (str fs/*cwd* "/src/blending/images"))))
(defn draw []
(let [modes [:blend :lightest :difference
:exclusion :multiply :overlay
:screen :soft-light]
images (q/state :images)
eff-image (q/load-image (fs/absolute (nth images (q/random (count images)))))
eff-mode (nth modes (q/random (count modes)))]
(q/blend
eff-image
(q/random 250)
(q/random 250)
(q/random (q/width))
(q/random (q/height))
(q/random 1000)
(q/random 1000)
(q/random 1000)
(q/random 1000)
eff-mode)))
(q/defsketch Blending
:size [1800 1000]
:title "Blending"
:setup setup
:draw draw)
The result looks like this:
[optional] Shuffle-merge
If you need some glitch in your video you can apply the shuffle-merge effect via vprocess.py
# Inside video-processing ./vprocess.py shuffle-merge --nb-chunk X --max-dur-subclip 1 --min-dur-subclip 0
The Douglas Vasquez Effect
We call the function the_douglas_vasquez_effect with the foreground footage as input_1 and the background footage (the quil blending we prepared earlier) with input_2.
Since this is a dirty script you need to tweak the code accordingly.
def the_douglas_vasquez_effect(input_1, input_2):
clip1 = VideoFileClip(input_1) #.subclip(0, 50)
clip2 = VideoFileClip(input_2) #.subclip(380)
clip2 = clip2.resize((clip1.size[0], clip1.size[1]))
invertc_counter = 0
eff_img = None
eff_effect = None
counter = 0
imgs = []
def _f(gf, t):
nonlocal invertc_counter
nonlocal eff_img
nonlocal eff_effect
nonlocal counter
nonlocal imgs
counter -= 1
img1 = gf(t)
img2 = clip2.get_frame(t)
if counter <= 0:
if not imgs:
imgs = ['img1', 'img2', 'img1+img2']
random.shuffle(imgs)
eff_img = imgs.pop()
eff_effect = random.choice(BLENDING_MODES)
counter = random.randint(25, 70)
if eff_img == 'img2':
counter += 30
if eff_img == 'img2':
return img2
elif eff_img == 'img1':
return img1
else:
invertc_counter -= 1
if invertc_counter <= -50:
invertc_counter = 10
elif invertc_counter >= 0:
img1 = e.effects.invert_color(img1)
opacity = random.randint(1, 10) * 0.1
return e.effects.blend_images(eff_effect, img1, img2, opacity=opacity)
clip1.fl(_f).write_videofile("output.mp4", audio=False)