import hyperion, time, colorsys, math hyperion.imageMinSize(64, 64) width = hyperion.imageWidth() height = hyperion.imageHeight() sleepTime = float(hyperion.args.get('sleepTime', 0.2)) def mapto(x, in_min, in_max, out_min, out_max): return float((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min) pal = [] for h in range(256): r, g, b = colorsys.hsv_to_rgb(mapto(h, 0.0, 255.0, 0.0, 1.0), 1.0, 1.0) pal.append( bytearray( (int(r*255), int(g*255), int(b*255)) ) ) plasma = [[]] for x in range(width): plasma.append([]) for y in range(height): color = int(128.0 + (128.0 * math.sin(x / 16.0)) + \ 128.0 + (128.0 * math.sin(y / 8.0)) + \ 128.0 + (128.0 * math.sin((x+y)) / 16.0) + \ 128.0 + (128.0 * math.sin(math.sqrt(x**2.0 + y**2.0) / 8.0))) / 4 plasma[x].append(color) while not hyperion.abort(): ledData = bytearray() mod = time.clock() * 100 for x in range(height): for y in range(width): ledData += pal[int((plasma[y][x] + mod) % 256)] hyperion.setImage(width,height,ledData) time.sleep(sleepTime)