eo-python

Electric Objects python library (by tk421storm)

Eo-python Alternatives

Similar projects and alternatives to eo-python

  • nanoleafapi

    A Python3 wrapper for the Nanoleaf OpenAPI, for use with the Light Panels, Canvas and Shapes (Hexagons, Triangles and Elements).

  • Scout Monitoring

    Free Django app performance insights with Scout Monitoring. Get Scout setup in minutes, and let us sweat the small stuff. A couple lines in settings.py is all you need to start monitoring your apps. Sign up for our free tier today.

    Scout Monitoring logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a better eo-python alternative or higher similarity.

eo-python discussion

Log in or Post with

eo-python reviews and mentions

Posts with mentions or reviews of eo-python. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2021-08-23.
  • EO2 -> Nanoleaf palette sync
    2 projects | /r/Nanoleaf | 23 Aug 2021
    #requires numpy, pillow #eoPython - https://github.com/tk421storm/eo-python #nanoleafapi - https://github.com/MylesMor/nanoleafapi # # tested in python 3.8 on Win 11 # from urllib.request import urlretrieve from tempfile import gettempdir from os.path import join, splitext, dirname, realpath from uuid import uuid4 from pprint import pprint from time import sleep from eopython import ElectricAccount import numpy as np from nanoleafapi import Nanoleaf, WHITE from PIL import Image nanoleafIP= REPLACE_ME nanoleafAuthToken= REPLACE_ME effect_data = { "command": "add", "version":"2.0", "animName": "EO2", "animType": "plugin", "colorType": "HSB", "pluginUuid": 'ba632d3e-9c2b-4413-a965-510c839b3f71', #https://forum.nanoleaf.me/docs/openapi#_rwyy54qdnrv6 "pluginType": "color", "animData": None, "palette": [ # { # "hue": 0, being a number between 0-360 # "saturation": 100, being a number between 0-100 # "brightness": 100, being a number between 0-100 # }, ], "pluginOptions": [ { "name": "transTime", "value": 100 }, # { useful for some plugins, but doesnt effect currently selected (random) # "name": "linDirection", # "value": "right" # }, { "name": "loop", "value": True }, { "name": "nColorsPerFrame", "value": 2 } ], "brightnessRange": {'minValue':100, 'maxValue':100}, "loop": True } # # thanks to unutbu at https://stackoverflow.com/questions/18801218/build-a-color-palette-from-image-url # def palette(img): """ Return palette in descending order of frequency """ arr = np.asarray(img) palette, index = np.unique(asvoid(arr).ravel(), return_inverse=True) palette = palette.view(arr.dtype).reshape(-1, arr.shape[-1]) count = np.bincount(index) order = np.argsort(count) return palette[order[::-1]] def asvoid(arr): """View the array as dtype np.void (bytes) This collapses ND-arrays to 1D-arrays, so you can perform 1D operations on them. http://stackoverflow.com/a/16216866/190597 (Jaime) http://stackoverflow.com/a/16840350/190597 (Jaime) Warning: >>> asvoid([-0.]) == asvoid([0.]) array([False], dtype=bool) """ arr = np.ascontiguousarray(arr) return arr.view(np.dtype((np.void, arr.dtype.itemsize * arr.shape[-1]))) #log in eoAccount=ElectricAccount(REPLACE_ME_USERNAME, REPLACE_ME_PASSWORD) #get device (from a list, assuming the first) eo2=eoAccount.devices[0] #get the current artwork id currentID=eo2.current_artwork_id() currentURL=eo2.current_artwork_preview() extension=splitext(currentURL.split("?")[0])[1] tempFile=join(gettempdir(), uuid4().hex+extension) print('downloading artwork to '+tempFile) urlretrieve(currentURL, tempFile) img = Image.open(tempFile, 'r').convert('HSV') palette=palette(img) print('found palette with '+str(len(palette))+' colors') #filter found colors based on saturation so we're only getting colors, not white/blacks colorsDesired=10 saturationThreshold=25 luminanceThreshold=50 hueMinDiff=40 filteredPalette=[] storedHues=[] for color in palette: hue=color[0] sat=color[1] val=color[2] if sat>saturationThreshold and val>luminanceThreshold: #also include minimum hue difference check (so we dont end up with a palette of all one color) diffEnough=True for value in storedHues: if hue<=(value+hueMinDiff) and hue>=(value-hueMinDiff): diffEnough=False break if diffEnough: filteredPalette.append(color) storedHues.append(color[0]) if len(filteredPalette)>=colorsDesired: break print('filtered palette to '+str(len(filteredPalette))+' colors') print(filteredPalette) #make effect for nanoleaf for color in filteredPalette: effect_data['palette'].append({'hue':int(color[0]/256)*360), 'saturation':int((color[1]/256)*100), 'brightness':int((color[2]/256)*100)}) effect_name="EO2"#_"+str(currentID) effect_data["animName"]=effect_name #connect to nanoleaf and display effect nano=Nanoleaf(nanoleafIP, nanoleafAuthToken) nano.set_color(WHITE) #response=requests.put(nano.url+"/effects", data = json.dumps({"command":"delete","animName":"EO2"})) #pprint(response.text) pprint(effect_data) nano.write_effect(effect_data) nano.set_effect(effect_name)

Stats

Basic eo-python repo stats
1
1
0.0
over 2 years ago

tk421storm/eo-python is an open source project licensed under MIT License which is an OSI approved license.

The primary programming language of eo-python is Python.

Popular Comparisons


Sponsored
Free Django app performance insights with Scout Monitoring
Get Scout setup in minutes, and let us sweat the small stuff. A couple lines in settings.py is all you need to start monitoring your apps. Sign up for our free tier today.
www.scoutapm.com