summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2018-08-21 15:33:30 +0200
committerJules Laplace <julescarbon@gmail.com>2018-08-21 15:33:30 +0200
commit9a61719a820b98a64bfc52228e05721a043dc91b (patch)
tree74434556fbbb69e601fdbf667c6b5898654a1359
parent1599de57b53c78ac05965fe7038f3a8d67c1a3c0 (diff)
fade sequence
-rw-r--r--app/client/modules/pix2pixhd/views/pix2pixhd.live.js5
-rw-r--r--rpc/img_ops.py37
2 files changed, 26 insertions, 16 deletions
diff --git a/app/client/modules/pix2pixhd/views/pix2pixhd.live.js b/app/client/modules/pix2pixhd/views/pix2pixhd.live.js
index 2c89459..8cef4bd 100644
--- a/app/client/modules/pix2pixhd/views/pix2pixhd.live.js
+++ b/app/client/modules/pix2pixhd/views/pix2pixhd.live.js
@@ -157,6 +157,11 @@ class Pix2PixHDLive extends Component {
min={0} max={100} type='int'
/>
<Slider live
+ title='fade sequence'
+ name='fade_sequence'
+ min={0} max={4.0} type='float'
+ />
+ <Slider live
name='frame_delay'
min={0.0} max={2.0} type='float'
/>
diff --git a/rpc/img_ops.py b/rpc/img_ops.py
index 6be1d0b..e25afb1 100644
--- a/rpc/img_ops.py
+++ b/rpc/img_ops.py
@@ -66,6 +66,13 @@ def process_image(opt, data_opt, im):
img = np.add(array_a, array_b).astype('uint8')
return img
+def mix(frac, a, b):
+ frac_a = frac
+ frac_b = 1.0 - frac_a
+ array_a = np.multiply(a.astype('float64'), frac_a)
+ array_b = np.multiply(b.astype('float64'), frac_b)
+ return np.add(array_a, array_b).astype('uint8')
+
last_im = None
def mix_next_image(opt, data_opt, rpc_client, im, i=0, sequence, sequence_i=0, skip_i=0):
global last_im
@@ -115,12 +122,18 @@ def mix_next_image(opt, data_opt, rpc_client, im, i=0, sequence, sequence_i=0, s
image_pil.save(tmp_path)
os.rename(tmp_path, current_path)
+ recursive_frac = data_opt.recursive_frac
+ sequence_frac = data_opt.sequence_frac
+ if data_opt.sequence_skip > 0 and data_opt.fade_sequence > 0:
+ sequence_frac *= (1.0 - (skip_i * data_opt.fade_sequence) / (data_opt.sequence_skip - 1))
+ sequence_frac = max(0, min(sequence_frac, 1))
+
if data_opt.recursive and last_im is not None:
- if data_opt.sequence and len(sequence):
+ if data_opt.sequence and len(sequence) and sequence_frac > 0:
A_img = Image.open(sequence_path).convert('RGB')
A_im = np.asarray(A_img)
- frac_a = data_opt.recursive_frac
- frac_b = data_opt.sequence_frac
+ frac_a = recursive_frac
+ frac_b = sequence_frac
frac_sum = frac_a + frac_b
if frac_sum > 1.0:
frac_a = frac_a / frac_sum
@@ -138,29 +151,21 @@ def mix_next_image(opt, data_opt, rpc_client, im, i=0, sequence, sequence_i=0, s
next_im = array_abc.astype('uint8')
else:
- frac_a = data_opt.recursive_frac
- frac_b = 1.0 - frac_a
- array_a = np.multiply(last_im.astype('float64'), frac_a)
- array_b = np.multiply(im.astype('float64'), frac_b)
- next_im = np.add(array_a, array_b).astype('uint8')
+ next_im = mix(data_opt.recursive_frac, last_im, im)
if data_opt.recurse_roll != 0:
last_im = np.roll(im, data_opt.recurse_roll, axis=data_opt.recurse_roll_axis)
else:
last_im = next_im.copy().astype('uint8')
- elif data_opt.sequence and len(sequence):
+ elif data_opt.sequence and len(sequence) and sequence_frac > 0:
A_img = Image.open(sequence_path).convert('RGB')
A_im = np.asarray(A_img)
- frac_b = data_opt.sequence_frac
+ sequence_frac = data_opt.sequence_frac
if data_opt.transition:
t = lerp(math.sin(i / data_opt.transition_period * math.pi * 2.0 ) / 2.0 + 0.5, data_opt.transition_min, data_opt.transition_max)
- frac_b *= 1.0 - t
- frac_c = 1.0 - frac_b
- array_b = np.multiply(A_im.astype('float64'), frac_b)
- array_c = np.multiply(im.astype('float64'), frac_c)
- array_bc = np.add(array_b, array_c)
- next_im = array_bc.astype('uint8')
+ sequence_frac *= 1.0 - t
+ next_im = mix(sequence_frac, A_im, im)
else:
last_im = im.copy().astype('uint8')