80 lines
2.7 KiB
Python
80 lines
2.7 KiB
Python
from colormath.color_objects import HSVColor, sRGBColor
|
|
from colormath.color_conversions import convert_color
|
|
import time
|
|
import math
|
|
|
|
def hsv_to_target(hsv, target):
|
|
rgb = [ x for x in convert_color(hsv, sRGBColor).get_upscaled_value_tuple() ]
|
|
target[0] = rgb[0]
|
|
target[1] = rgb[1]
|
|
target[2] = rgb[2]
|
|
|
|
def rainbow_whole(framecount, index, target):
|
|
current_degree = framecount % 360
|
|
hsv = HSVColor(current_degree, 1, 1)
|
|
hsv_to_target(hsv, target)
|
|
|
|
def rainbow_whole_offset_stat(framecount, index, target):
|
|
offset = index*90
|
|
current_degree = (framecount + offset) % 360
|
|
hsv = HSVColor(current_degree, 1, 1)
|
|
hsv_to_target(hsv, target)
|
|
|
|
def rainbow_whole_offset_dyn(framecount, index, target):
|
|
offset_hue_pixel = math.sin(framecount / 10000)*90*(index+1)
|
|
saturation_pixel = math.fabs(math.cos(framecount / 5000))*70
|
|
current_hue_degree = (framecount / 1000 + offset_hue_pixel) % 360
|
|
current_sat = (30+saturation_pixel) / 100
|
|
hsv = HSVColor(current_hue_degree, current_sat, 1)
|
|
hsv_to_target(hsv, target)
|
|
|
|
def two_colors(framecount, index, target, hue1, hue2):
|
|
saturation_pixel = 1
|
|
hue_min = min(hue1, hue2)
|
|
hue_max = max(hue1, hue2)
|
|
current_hue_degree = hue_min + (hue_max - hue_min) / 2 + math.sin(framecount / 400 + index*100)*(hue_max - hue_min)/2
|
|
current_sat = 1
|
|
hsv = HSVColor(current_hue_degree, current_sat, 1)
|
|
hsv_to_target(hsv, target)
|
|
|
|
def two_colors_red_blue(framecount, index, target):
|
|
two_colors(framecount, index, target, 210, 359)
|
|
|
|
def two_colors_red_red(framecount, index, target):
|
|
two_colors(framecount, index, target, 0, 30)
|
|
|
|
def two_colors_cyan_blue(framecount, index, target):
|
|
two_colors(framecount, index, target, 180, 240)
|
|
|
|
def two_colors_cyan_orange(framecount, index, target):
|
|
two_colors(framecount, index, target, 25, 180)
|
|
|
|
def black(framecount, index, target):
|
|
target[0] = 0
|
|
target[1] = 0
|
|
target[2] = 0
|
|
|
|
def adjust_hsv(framecount, index, target, params):
|
|
factor_s = params['factor_s']
|
|
factor_v = params['factor_v']
|
|
delta_h = params['delta_h']
|
|
delta_s = params['delta_s']
|
|
delta_v = params['delta_v']
|
|
rgb = sRGBColor(target[0], target[1], target[2], True)
|
|
hsv = convert_color(rgb, HSVColor)
|
|
new_hue = math.fmod(hsv.hsv_h+delta_h, 360)
|
|
hsv.hsv_h = new_hue if new_hue >= 0 else 360+new_hue
|
|
hsv.hsv_s = min(hsv.hsv_s*factor_s+delta_s,1)
|
|
hsv.hsv_v = min(hsv.hsv_v*factor_v+delta_v,1)
|
|
hsv_to_target(hsv, target)
|
|
|
|
def rgb(framecount, index, target, params):
|
|
r = params["red"]
|
|
g = params["green"]
|
|
b = params["blue"]
|
|
p_index = params["index"]
|
|
if index == p_index or p_index == -1:
|
|
target[0] = r
|
|
target[1] = g
|
|
target[2] = b
|