├── .gitignore ├── Aurora.py ├── README.md ├── VERSION ├── __init__.py ├── apt-requirements.txt ├── aurora.service ├── config.ini.bak ├── extensions ├── Aurora_Ambient_16x9.py ├── Aurora_Ambient_AutoCrop.py ├── Aurora_Ambient_NoCrop.py ├── Aurora_AudioSpectogram.py ├── Aurora_Configure.py ├── Aurora_Meteor.py ├── Aurora_Rainbow.py ├── __init__.py └── exampleExtension.py ├── github └── Aurora_Ambient_Light_test_video.gif ├── install.sh ├── lib ├── AuroraExtension.py └── __init__.py ├── requirements.txt ├── update.sh └── webserver ├── static ├── css │ ├── bootstrap-slider.min.css │ ├── bootstrap.css │ └── style.css ├── favicon │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── apple-touch-icon.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ └── favicon.ico ├── fonts │ ├── css │ │ └── fontawesome-all.min.css │ └── webfonts │ │ ├── fa-brands-400.eot │ │ ├── fa-brands-400.svg │ │ ├── fa-brands-400.ttf │ │ ├── fa-brands-400.woff │ │ ├── fa-brands-400.woff2 │ │ ├── fa-regular-400.eot │ │ ├── fa-regular-400.svg │ │ ├── fa-regular-400.ttf │ │ ├── fa-regular-400.woff │ │ ├── fa-regular-400.woff2 │ │ ├── fa-solid-900.eot │ │ ├── fa-solid-900.svg │ │ ├── fa-solid-900.ttf │ │ ├── fa-solid-900.woff │ │ └── fa-solid-900.woff2 ├── images │ ├── 2.png │ ├── ad.png │ ├── ath.png │ ├── close.png │ ├── empty.png │ ├── framework │ │ ├── AjaxLoader.gif │ │ ├── AuroraLogo.png │ │ ├── activity.png │ │ ├── deco-slash.png │ │ ├── deco-zig.png │ │ ├── grabbing.png │ │ ├── icons.png │ │ ├── icons.svg │ │ ├── loader.gif │ │ ├── page-loader.gif │ │ ├── pattern_1.png │ │ ├── pay-1.png │ │ ├── pay-2.png │ │ ├── pay-3.png │ │ ├── pay-4.png │ │ ├── pay-5.png │ │ ├── preload.gif │ │ └── puff.svg │ ├── header-oldlogo.png │ ├── header.png │ ├── icons │ │ ├── 1.png │ │ ├── 10.png │ │ ├── 11.png │ │ ├── 12.png │ │ ├── 13.png │ │ ├── 14.png │ │ ├── 15.png │ │ ├── 16.png │ │ ├── 17.png │ │ ├── 18.png │ │ ├── 19.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ ├── 6.png │ │ ├── 7.png │ │ ├── 8.png │ │ ├── 9.png │ │ └── license.txt │ ├── loading.gif │ ├── menu-img.png │ ├── next.png │ ├── pictures │ │ └── faces │ │ │ ├── 1s.png │ │ │ ├── 1small.png │ │ │ ├── 2s.png │ │ │ ├── 2small.png │ │ │ ├── 3s.png │ │ │ ├── 3small.png │ │ │ ├── 4s.png │ │ │ └── 4small.png │ ├── preload-logo.png │ ├── prev.png │ ├── splash │ │ ├── Thumbs.db │ │ ├── android-chrome-192x192.png │ │ ├── apple-touch-icon-114x114.png │ │ ├── apple-touch-icon-120x120.png │ │ ├── apple-touch-icon-144x144.png │ │ ├── apple-touch-icon-152x152.png │ │ ├── apple-touch-icon-180x180.png │ │ ├── apple-touch-icon-196x196.png │ │ ├── apple-touch-icon-57x57.png │ │ ├── apple-touch-icon-60x60.png │ │ ├── apple-touch-icon-72x72.png │ │ ├── apple-touch-icon-76x76.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon-96x96.png │ │ └── favicon.ico │ └── undraw │ │ ├── 1.svg │ │ ├── 2.svg │ │ ├── 3.svg │ │ ├── 4.svg │ │ ├── 5.svg │ │ ├── 6.svg │ │ ├── 7.svg │ │ ├── _license_and_link.rtf │ │ ├── a.svg │ │ ├── b.svg │ │ ├── c.svg │ │ ├── d.svg │ │ └── e.svg ├── js │ ├── aurora-configure.js │ ├── aurora-generic.js │ ├── aurora-index.js │ ├── aurora-view.js │ ├── bootstrap-slider.min.js │ ├── bootstrap.min.js │ ├── custom.js │ └── jquery.js └── menu │ └── menu-main.html └── templates ├── about.html ├── configure.html ├── footer.html ├── header.html ├── index.html ├── menu-colors.html ├── menu-footer.html ├── menu-share.html ├── status.json └── view.html /.gitignore: -------------------------------------------------------------------------------- 1 | #Aurora test things 2 | colourtest_from_youtube.mp4 3 | *.jpg 4 | *.jpeg 5 | env/* 6 | .vscode/ 7 | audio.py 8 | auroraspec.py 9 | spec.py 10 | nohup.out 11 | config.ini 12 | config.ini.bak 13 | LEDTests/ 14 | 15 | 16 | # Byte-compiled / optimized / DLL files 17 | __pycache__/ 18 | *.py[cod] 19 | *$py.class 20 | 21 | # C extensions 22 | *.so 23 | 24 | # Distribution / packaging 25 | .Python 26 | build/ 27 | develop-eggs/ 28 | dist/ 29 | downloads/ 30 | eggs/ 31 | .eggs/ 32 | lib/ 33 | lib64/ 34 | parts/ 35 | sdist/ 36 | var/ 37 | wheels/ 38 | share/python-wheels/ 39 | *.egg-info/ 40 | .installed.cfg 41 | *.egg 42 | MANIFEST 43 | 44 | # PyInstaller 45 | # Usually these files are written by a python script from a template 46 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 47 | *.manifest 48 | *.spec 49 | 50 | # Installer logs 51 | pip-log.txt 52 | pip-delete-this-directory.txt 53 | 54 | # Unit test / coverage reports 55 | htmlcov/ 56 | .tox/ 57 | .nox/ 58 | .coverage 59 | .coverage.* 60 | .cache 61 | nosetests.xml 62 | coverage.xml 63 | *.cover 64 | *.py,cover 65 | .hypothesis/ 66 | .pytest_cache/ 67 | cover/ 68 | 69 | # Translations 70 | *.mo 71 | *.pot 72 | 73 | # Django stuff: 74 | *.log 75 | local_settings.py 76 | db.sqlite3 77 | db.sqlite3-journal 78 | 79 | # Flask stuff: 80 | instance/ 81 | .webassets-cache 82 | 83 | # Scrapy stuff: 84 | .scrapy 85 | 86 | # Sphinx documentation 87 | docs/_build/ 88 | 89 | # PyBuilder 90 | .pybuilder/ 91 | target/ 92 | 93 | # Jupyter Notebook 94 | .ipynb_checkpoints 95 | 96 | # IPython 97 | profile_default/ 98 | ipython_config.py 99 | 100 | # pyenv 101 | # For a library or package, you might want to ignore these files since the code is 102 | # intended to run in multiple environments; otherwise, check them in: 103 | # .python-version 104 | 105 | # pipenv 106 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 107 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 108 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 109 | # install all needed dependencies. 110 | #Pipfile.lock 111 | 112 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 113 | __pypackages__/ 114 | 115 | # Celery stuff 116 | celerybeat-schedule 117 | celerybeat.pid 118 | 119 | # SageMath parsed files 120 | *.sage.py 121 | 122 | # Environments 123 | .env 124 | .venv 125 | env/ 126 | venv/ 127 | ENV/ 128 | env.bak/ 129 | venv.bak/ 130 | 131 | # Spyder project settings 132 | .spyderproject 133 | .spyproject 134 | 135 | # Rope project settings 136 | .ropeproject 137 | 138 | # mkdocs documentation 139 | /site 140 | 141 | # mypy 142 | .mypy_cache/ 143 | .dmypy.json 144 | dmypy.json 145 | 146 | # Pyre type checker 147 | .pyre/ 148 | 149 | # pytype static type analyzer 150 | .pytype/ 151 | 152 | # Cython debug symbols 153 | cython_debug/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Slack](https://img.shields.io/badge/slack-chat-green.svg)](https://join.slack.com/t/auroraambientlighting/shared_invite/zt-sib46ode-0rE3GqXFEcHd_H_y_nG~oA) 2 | 3 | ![Aurora Example](https://github.com/AndrewMohawk/Aurora/raw/master/github/Aurora_Ambient_Light_test_video.gif) 4 | 5 | # Aurora 6 | Aurora is an ambient light system built with an HDMI switch, and HDMI capture card, a Raspberry Pi and an LED strip. There is a full writeup of how this came to be at https://www.andrewmohawk.com/2021/05/25/aurora-ambient-lighting/ and a build guide at https://www.andrewmohawk.com/2021/05/24/aurora-how-to-build/ 7 | 8 | # Help 9 | Feel free to submit PRs for the project to improve the code base or add your own visualisations. Please remember to update the VERSION when you are doing a new PR. If you *need* help with any part of the project feel free to email or you can join the gitter at https://gitter.im/AuroraAmbientLighting/community 10 | 11 | # Extending 12 | While the documentation for extending and building your own hasnt been fully written up, the TL;DR is to copy the example extenion in the `extensions` folder, change the metadata and restart Aurora with `sudo service aurora restart`, once it has picked up the new file you can simply make changes and then click load extension in the main interface. 13 | 14 | Please note when changing your `visualise` function you need to make it non-locking or the interface will not be able to communicate with it. The interface will pause for 0.01s before running visualise() again between each run 15 | 16 | # Install 17 | The install for this requires a hardware and software setup. You can follow the install guide at https://www.andrewmohawk.com/2021/05/24/aurora-how-to-build/ 18 | 19 | The flow diagram looks as follows: 20 | ![Aurora Flow diagram](https://www.andrewmohawk.com/wp-content/uploads/2021/05/Aurora-Flow-Diagram.png) 21 | 22 | For just grabbing the software you can use this one liner: 23 | ``` 24 | wget https://raw.githubusercontent.com/AndrewMohawk/Aurora/master/install.sh -O - | sudo /bin/bash 25 | ``` 26 | 27 | 28 | -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | 0.42-catsdontlikefireworks 2 | -------------------------------------------------------------------------------- /__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/__init__.py -------------------------------------------------------------------------------- /apt-requirements.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/apt-requirements.txt -------------------------------------------------------------------------------- /aurora.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Aurora light system 3 | After=multi-user.target 4 | StartLimitInterval=200 5 | StartLimitBurst=5 6 | [Service] 7 | WorkingDirectory=/opt/Aurora/ 8 | User=root 9 | Type=idle 10 | ExecStart=/usr/bin/sudo /usr/bin/python3 Aurora.py 2>&1 > /var/log/Aurora.log 11 | Restart=always 12 | RestartSec=30s 13 | [Install] 14 | WantedBy=multi-user.target 15 | -------------------------------------------------------------------------------- /config.ini.bak: -------------------------------------------------------------------------------- 1 | [GENERAL] 2 | screenshot_path = /tmp/aurora_screenshot.jpg 3 | pixel_image_path = /tmp/aurora_pixels.jpg 4 | configured = False 5 | enabled = True 6 | 7 | [WEBSERVER] 8 | enabled = True 9 | listen_host = 0.0.0.0 10 | server_port = 80 11 | 12 | [EXTENSIONS] 13 | directory = extensions 14 | default_extension = Aurora_Ambient_AutoCrop 15 | current_extension = Aurora_Ambient_AutoCrop 16 | 17 | [HDMI] 18 | HDMI_BRIGHTNESS = -11 19 | HDMI_SATURATION = 255 20 | HDMI_CONTRAST = 130 21 | HDMI_HUE = 0 22 | 23 | [HDMI_INITIAL] 24 | HDMI_BRIGHTNESS = -11 25 | HDMI_SATURATION = 255 26 | HDMI_CONTRAST = 130 27 | HDMI_HUE = 0 28 | 29 | [AURORA] 30 | AURORA_PIXELCOUNT_TOTAL = 200 31 | AURORA_PIXELCOUNT_LEFT = 50 32 | AURORA_PIXELCOUNT_RIGHT = 50 33 | AURORA_PIXELCOUNT_TOP = 50 34 | AURORA_PIXELCOUNT_BOTTOM = 50 35 | AURORA_GAMMA = 1.0 36 | AURORA_DEBUG = false 37 | AURORA_DARKTHRESHOLD = 20 38 | 39 | 40 | -------------------------------------------------------------------------------- /extensions/Aurora_Ambient_16x9.py: -------------------------------------------------------------------------------- 1 | from lib.AuroraExtension import AuroraExtension 2 | import time 3 | 4 | import numpy as np 5 | import pandas as pd 6 | import cv2 7 | 8 | 9 | class Aurora_Ambient_16x9(AuroraExtension): 10 | def __init__(self, NeoPixels, HDMI): 11 | super().__init__(NeoPixels, HDMI) 12 | self.Author = "Andrew MacPherson (@AndrewMohawk)" 13 | self.Description = "This extension takes the HDMI input and crops the image to 16:9 (hopefully) removing the black borders" 14 | self.Name = "Aurora Ambient Lighting (16x9)" 15 | self.count = 0 16 | self.current_frame = False 17 | self.aspect_cropped_frame = False 18 | self.percent = 3 19 | self.aspectRatio = 16.0 / 9.0 20 | 21 | def aspectCrop(self, image, ratio): 22 | vid_h, vid_w, channels = image.shape 23 | # work out the size of the 'gaps' 24 | aspectRatioGap = vid_h - (vid_w / self.aspectRatio) 25 | aspectRatioGap = aspectRatioGap / 2 # since we want to put some top and bottom 26 | aspectRatioGap = int(aspectRatioGap) 27 | aspect_frame = image[aspectRatioGap : vid_h - aspectRatioGap, 0:vid_w] 28 | return aspect_frame 29 | 30 | def takeScreenShot(self, filepath): 31 | ret, self.current_frame = self.getFrame() 32 | vid_h, vid_w, channels = self.current_frame.shape 33 | aspectRatioGap = vid_h - (vid_w / self.aspectRatio) 34 | aspectRatioGap = aspectRatioGap / 2 # since we want to put some top and bottom 35 | aspectRatioGap = int(aspectRatioGap) 36 | borderEdges = [0, aspectRatioGap, 0, aspectRatioGap] 37 | return super().takeScreenShot(filepath, borderEdges=borderEdges) 38 | 39 | def visualise(self): 40 | # Capture the video frame 41 | ret, self.current_frame = self.getFrame() 42 | self.aspect_cropped_frame = self.aspectCrop( 43 | self.current_frame, self.aspectRatio 44 | ) 45 | self.visualiseFrame(self.aspect_cropped_frame) 46 | -------------------------------------------------------------------------------- /extensions/Aurora_Ambient_AutoCrop.py: -------------------------------------------------------------------------------- 1 | from lib.AuroraExtension import AuroraExtension 2 | import time 3 | import datetime 4 | import numpy as np 5 | import pandas as pd 6 | import cv2 7 | 8 | 9 | class Aurora_Ambient_AutoCrop(AuroraExtension): 10 | def __init__(self, NeoPixels, HDMI): 11 | super().__init__(NeoPixels, HDMI) 12 | self.Author = "Andrew MacPherson (@AndrewMohawk)" 13 | self.Description = "This extension takes the HDMI input and calculates a border (including cropping for black borders) to work out ambient lighting for behind the display." 14 | self.Name = "Aurora Ambient Lighting ( AutoCrop )" 15 | self.count = 0 16 | self.current_frame = False 17 | self.cropped_frame = False 18 | self.percent = 3 19 | self.edgeDarkness = ( 20 | 5 # this defines the darkness that makes the edges for autocrop 21 | ) 22 | 23 | def takeScreenShot(self, filepath, autocrop=False): 24 | return super().takeScreenShot(filepath, self.edgeDarkness) 25 | 26 | def autocrop(self, image, threshold=0): 27 | """Crops any edges below or equal to threshold 28 | Crops blank image to 1x1. 29 | Returns cropped image. 30 | """ 31 | if len(image.shape) == 3: 32 | flatImage = np.max(image, 2) 33 | else: 34 | flatImage = image 35 | assert len(flatImage.shape) == 2 36 | 37 | rows = np.where(np.max(flatImage, 0) > threshold)[0] 38 | if rows.size: 39 | cols = np.where(np.max(flatImage, 1) > threshold)[0] 40 | image = image[cols[0] : cols[-1] + 1, rows[0] : rows[-1] + 1] 41 | else: 42 | image = image[:1, :1] 43 | 44 | return image 45 | 46 | def visualise(self): 47 | # Capture the video frame 48 | # stopwatchStartTime = datetime.datetime.now() 49 | # totalStartTime = stopwatchStartTime 50 | ret, self.current_frame = self.getFrame() 51 | self.vid_h, self.vid_w, self.channels = self.current_frame.shape 52 | # self.log(f"GetFrame: {datetime.datetime.now()-stopwatchStartTime}") 53 | 54 | # stopwatchStartTime = datetime.datetime.now() 55 | self.autocropped_frame = self.autocrop(self.current_frame, self.edgeDarkness) 56 | # self.log(f"AutoCropTime: {datetime.datetime.now()-stopwatchStartTime}") 57 | 58 | self.visualiseFrame(self.autocropped_frame) 59 | -------------------------------------------------------------------------------- /extensions/Aurora_Ambient_NoCrop.py: -------------------------------------------------------------------------------- 1 | from lib.AuroraExtension import AuroraExtension 2 | import time 3 | import datetime 4 | import numpy as np 5 | import pandas as pd 6 | import cv2 7 | 8 | 9 | class Aurora_Ambient_NoCrop(AuroraExtension): 10 | def __init__(self, NeoPixels, HDMI): 11 | super().__init__(NeoPixels, HDMI) 12 | self.Author = "Andrew MacPherson (@AndrewMohawk)" 13 | self.Description = "This extension takes the HDMI input and calculates a border (WITHOUT cropping) to work out ambient lighting for behind the display. This one is slightly faster as it doesnt need to do any of the maths to work out the cropping." 14 | self.Name = "Aurora Ambient Lighting ( No crop )" 15 | self.count = 0 16 | self.current_frame = False 17 | self.percent = 3 18 | 19 | def autocrop(self, image, threshold=0): 20 | """Crops any edges below or equal to threshold 21 | Crops blank image to 1x1. 22 | Returns cropped image. 23 | """ 24 | if len(image.shape) == 3: 25 | flatImage = np.max(image, 2) 26 | else: 27 | flatImage = image 28 | assert len(flatImage.shape) == 2 29 | 30 | rows = np.where(np.max(flatImage, 0) > threshold)[0] 31 | if rows.size: 32 | cols = np.where(np.max(flatImage, 1) > threshold)[0] 33 | image = image[cols[0] : cols[-1] + 1, rows[0] : rows[-1] + 1] 34 | else: 35 | image = image[:1, :1] 36 | 37 | return image 38 | 39 | def takeScreenShot(self, filepath): 40 | screenshot_frame = self.current_frame 41 | widthPixels = int(self.vid_w * (self.percent / 100)) + 1 42 | heightPixels = int(self.vid_h * (self.percent / 100) * 2) + 1 43 | 44 | colour = (0, 0, 255) 45 | # top 46 | screenshot_frame = cv2.rectangle( 47 | screenshot_frame, (0, 0), (self.vid_w, heightPixels), (0, 0, 255), 1 48 | ) 49 | # bottom 50 | screenshot_frame = cv2.rectangle( 51 | screenshot_frame, 52 | (0, self.vid_h - heightPixels), 53 | (self.vid_w, self.vid_h), 54 | (0, 0, 255), 55 | 1, 56 | ) 57 | # left 58 | screenshot_frame = cv2.rectangle( 59 | screenshot_frame, (0, 0), (widthPixels, self.vid_h), (0, 0, 255), 1 60 | ) 61 | # right 62 | screenshot_frame = cv2.rectangle( 63 | screenshot_frame, 64 | (self.vid_w - widthPixels, 0), 65 | (self.vid_w, self.vid_h), 66 | (0, 0, 255), 67 | 1, 68 | ) 69 | 70 | cv2.imwrite(filepath, screenshot_frame) 71 | 72 | return True 73 | 74 | def visualise(self): 75 | # Capture the video frame 76 | ret, self.current_frame = self.getFrame() 77 | self.visualiseFrame(self.current_frame) 78 | -------------------------------------------------------------------------------- /extensions/Aurora_AudioSpectogram.py: -------------------------------------------------------------------------------- 1 | from lib.AuroraExtension import AuroraExtension 2 | import time 3 | import datetime 4 | import numpy as np 5 | import pandas as pd 6 | import sounddevice as sd 7 | from time import sleep 8 | import sys 9 | from collections import deque 10 | import math 11 | 12 | 13 | class Aurora_AudioSpectogram(AuroraExtension): 14 | def __init__(self, NeoPixels, HDMI): 15 | super().__init__(NeoPixels, HDMI) 16 | self.Author = "Andrew MacPherson (@AndrewMohawk)" 17 | self.Description = "This extension creates a rainbow audio spectogram, based somewhat on the code found at https://python-sounddevice.readthedocs.io/en/0.3.3/examples.html" 18 | self.Name = "Aurora Audio Spectrogram" 19 | self.count = 0 20 | self.current_frame = False 21 | self.columns = 100 22 | self.gain = 10 23 | self.low = 10 24 | self.high = 2500 25 | # Lets find the right device 26 | self.deviceID = sd.default.device["input"] 27 | 28 | self.log("Starting Audio spectogram with Device {}".format(self.deviceID)) 29 | self.samplerate = sd.query_devices(self.deviceID, "input")["default_samplerate"] 30 | self.delta_f = (self.high - self.low) / (self.columns - 1) 31 | self.fftsize = math.ceil(self.samplerate / self.delta_f) 32 | self.low_bin = math.floor(self.low / self.delta_f) 33 | self.threshhold = 40 34 | 35 | self.pixelCount_nobottom = self.pixelsLeft + self.pixelsRight + self.pixelsTop 36 | 37 | self.streamstarted = False 38 | self.noHDMI = True 39 | 40 | def takeScreenShot(self, filepath): 41 | # We have no screenshot since... well its just LEDs 42 | return True 43 | 44 | def startAudioStream(self): 45 | if self.streamstarted == True: 46 | while self.streamstarted == True: 47 | with sd.InputStream( 48 | device=self.deviceID, 49 | channels=1, 50 | callback=self.visualiseAudio, 51 | blocksize=int(self.samplerate * 50 / 1000), 52 | samplerate=self.samplerate, 53 | ): 54 | # running stream 55 | sd.wait() 56 | 57 | def teardown(self): 58 | # incase things need to be broken down 59 | self.log("Tearing down {}".format(self.Name)) 60 | self.fade_out_pixels() 61 | sd.stop() 62 | 63 | def fadeToBlack(self, pixelPos): 64 | fadeValue = 128 65 | b, g, r = self.pixels[pixelPos] 66 | 67 | r = 0 if r <= 10 else int(r - (r * fadeValue / 255)) 68 | g = 0 if g <= 10 else int(g - (g * fadeValue / 255)) 69 | b = 0 if b <= 10 else int(b - (b * fadeValue / 255)) 70 | 71 | self.pixels[pixelPos] = (b, g, r) 72 | 73 | def wheel(self, pos): 74 | # Input a value 0 to 255 to get a color value. 75 | # The colours are a transition r - g - b - back to r. 76 | if pos < 0 or pos > 255: 77 | return (0, 0, 0) 78 | if pos < 85: 79 | return (255 - pos * 3, pos * 3, 0) 80 | if pos < 170: 81 | pos -= 85 82 | return (0, 255 - pos * 3, pos * 3) 83 | pos -= 170 84 | return (pos * 3, 0, 255 - pos * 3) 85 | 86 | def rainbow_cycle(self, j): 87 | for i in range(self.pixelCount_nobottom): 88 | rc_index = (i * 256 // self.pixelCount_nobottom) + j 89 | self.pixels[i] = self.wheel(rc_index & 255) 90 | self.getFrame(False) # hack to have 'FPS' 91 | self.pixels.show() 92 | 93 | def visualiseAudio(self, indata, frames, time, status): 94 | if any(indata): 95 | 96 | magnitude = np.abs(np.fft.rfft(indata[:, 0], n=self.fftsize)) 97 | magnitude *= self.gain / self.fftsize 98 | audio_channels = [] 99 | 100 | for x in magnitude[self.low_bin : self.low_bin + self.columns]: 101 | audio_channel_val = int(np.clip(x, 0, 1) * (255)) 102 | 103 | if audio_channel_val >= self.threshhold: 104 | audio_channels.append(audio_channel_val) 105 | else: 106 | audio_channels.append(0) 107 | 108 | d = deque(audio_channels) 109 | d.rotate(self.pixelsLeft) # start top left? why not. 110 | audio_channels = list(d) 111 | 112 | chan_led_width = round(self.pixelCount_nobottom / len(audio_channels)) 113 | 114 | for key, val in enumerate(audio_channels): 115 | 116 | first_pixel = key * chan_led_width 117 | last_pixel = first_pixel + chan_led_width - 1 118 | if last_pixel > self.pixelCount_nobottom: 119 | last_pixel = self.pixelCount_nobottom - 1 120 | 121 | for pNum in range(first_pixel, last_pixel + 1): 122 | col = self.wheel(pNum) 123 | if val != 0: 124 | self.pixels[pNum] = col 125 | else: 126 | self.fadeToBlack(pNum) 127 | 128 | count = 0 129 | for x in audio_channels: 130 | if x != 0: 131 | count += 1 132 | 133 | testLine = "" 134 | for i in range(len(audio_channels)): 135 | testLine += str(audio_channels[i]).zfill(2) + "|" 136 | 137 | count = 0 138 | for x in self.pixels: 139 | if x != [0, 0, 0]: 140 | count += 1 141 | 142 | self.pixels.show() 143 | else: 144 | self.log("No Audio data in") 145 | 146 | def visualise(self): 147 | with sd.InputStream( 148 | device=self.deviceID, 149 | channels=1, 150 | callback=self.visualiseAudio, 151 | blocksize=int(self.samplerate * 50 / 1000), 152 | samplerate=self.samplerate, 153 | ): 154 | # running stream 155 | sd.wait() 156 | 157 | time.sleep(0.01) 158 | -------------------------------------------------------------------------------- /extensions/Aurora_Configure.py: -------------------------------------------------------------------------------- 1 | from lib.AuroraExtension import AuroraExtension 2 | import neopixel 3 | import time 4 | import datetime 5 | import numpy as np 6 | import pandas as pd 7 | import board 8 | import cv2 9 | import sys 10 | 11 | 12 | class Aurora_Configure(AuroraExtension): 13 | def __init__(self, NeoPixels, HDMI): 14 | super().__init__(NeoPixels, HDMI) 15 | self.Author = "Andrew MacPherson (@AndrewMohawk)" 16 | self.Description = "This extension configures the LEDs" 17 | self.Name = "Aurora Ambient Lighting Configuration" 18 | self.count = 0 19 | self.current_frame = False 20 | self.percent = 3 21 | 22 | def setup(self): 23 | return True 24 | 25 | def visualise(self): 26 | # Capture the video frame 27 | ret, self.current_frame = self.getFrame() 28 | self.vid_h, self.vid_w, self.channels = self.current_frame.shape 29 | pos = 0 30 | 31 | colour = (255, 0, 0) # red 32 | 33 | for i in range(pos, pos + self.pixelsLeft): 34 | self.pixels[i] = colour 35 | 36 | pos = pos + self.pixelsLeft 37 | 38 | colour = (0, 255, 0) # green 39 | for x in range(pos, pos + self.pixelsTop): 40 | self.pixels[x] = colour 41 | 42 | pos = pos + self.pixelsTop 43 | colour = (0, 0, 255) # blue 44 | for y in range(pos, pos + self.pixelsRight): 45 | self.pixels[y] = colour 46 | 47 | pos = pos + self.pixelsRight 48 | 49 | colour = (255, 255, 255) # white 50 | for z in range(pos, pos + self.pixelsBottom): 51 | self.pixels[z] = colour 52 | 53 | self.pixels.show() 54 | -------------------------------------------------------------------------------- /extensions/Aurora_Meteor.py: -------------------------------------------------------------------------------- 1 | from lib.AuroraExtension import AuroraExtension 2 | import time 3 | import datetime 4 | import numpy as np 5 | import pandas as pd 6 | import cv2 7 | from random import randint 8 | 9 | 10 | class Aurora_Meteor(AuroraExtension): 11 | def __init__(self, NeoPixels, HDMI): 12 | super().__init__(NeoPixels, HDMI) 13 | self.Author = "Andrew MacPherson (@AndrewMohawk)" 14 | self.Description = ( 15 | "This has a 'meteor' effect in a random colour that shoots around the strip" 16 | ) 17 | self.Name = "Aurora Meteor Display ( LED Only )" 18 | self.count = 0 19 | self.current_frame = False 20 | self.meteorSize = 10 21 | self.currentCol = (255, 0, 0) 22 | self.noHDMI = True 23 | self.startTime = time.time() 24 | 25 | def takeScreenShot(self, filepath): 26 | # We have no screenshot since... well its just LEDs 27 | return True 28 | 29 | def fadeToBlack(self, pixelPos): 30 | fadeValue = 64 31 | b, g, r = self.pixels[pixelPos] 32 | 33 | r = 0 if r <= 10 else int(r - (r * fadeValue / 255)) 34 | g = 0 if g <= 10 else int(g - (g * fadeValue / 255)) 35 | b = 0 if b <= 10 else int(b - (b * fadeValue / 255)) 36 | 37 | self.pixels[pixelPos] = (b, g, r) 38 | 39 | def meteorRain(self, i, col): 40 | 41 | # Fade out 42 | for j in range(self.pixelsCount): 43 | if randint(0, 10) > 5: 44 | self.fadeToBlack(j) 45 | 46 | for j in range(self.meteorSize): 47 | if (i - j < self.pixelsCount) and (i - j >= 0): 48 | self.pixels[i - j] = col 49 | 50 | self.pixels.show() 51 | 52 | def visualise(self): 53 | 54 | # visualise! 55 | self.count += 5 56 | self.meteorRain(self.count, self.currentCol) 57 | if self.count >= self.pixelsCount + self.meteorSize: 58 | end = time.time() 59 | diff = end - self.startTime 60 | self.startTime = time.time() 61 | self.count = 0 62 | self.currentCol = (randint(0, 255), randint(0, 255), randint(0, 255)) 63 | -------------------------------------------------------------------------------- /extensions/Aurora_Rainbow.py: -------------------------------------------------------------------------------- 1 | from lib.AuroraExtension import AuroraExtension 2 | import time 3 | import datetime 4 | import numpy as np 5 | import pandas as pd 6 | import cv2 7 | 8 | 9 | class Aurora_Rainbow(AuroraExtension): 10 | def __init__(self, NeoPixels, HDMI): 11 | super().__init__(NeoPixels, HDMI) 12 | self.Author = "Andrew MacPherson (@AndrewMohawk)" 13 | self.Description = "This extension displays a rainbow pattern on the LEDs, a lot of this code is from https://learn.adafruit.com/circuitpython-essentials/circuitpython-neopixel" 14 | self.Name = "Aurora Rainbow Display ( LED Only )" 15 | self.count = 0 16 | self.current_frame = False 17 | self.noHDMI = True 18 | 19 | def takeScreenShot(self, filepath): 20 | # We have no screenshot since... well its just LEDs 21 | return True 22 | 23 | def wheel(self, pos): 24 | # Input a value 0 to 255 to get a color value. 25 | # The colours are a transition r - g - b - back to r. 26 | if pos < 0 or pos > 255: 27 | return (0, 0, 0) 28 | if pos < 85: 29 | return (255 - pos * 3, pos * 3, 0) 30 | if pos < 170: 31 | pos -= 85 32 | return (0, 255 - pos * 3, pos * 3) 33 | pos -= 170 34 | return (pos * 3, 0, 255 - pos * 3) 35 | 36 | def rainbow_cycle(self, j): 37 | for i in range(self.pixelsCount): 38 | rc_index = (i * 256 // self.pixelsCount) + j 39 | self.pixels[i] = self.wheel(rc_index & 255) 40 | self.getFrame(False) # hack to have 'FPS' 41 | self.pixels.show() 42 | 43 | def visualise(self): 44 | 45 | # visualise! 46 | self.count += 1 47 | self.rainbow_cycle(self.count) 48 | if self.count == 255: 49 | self.count = 0 50 | 51 | time.sleep(0.01) 52 | -------------------------------------------------------------------------------- /extensions/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/extensions/__init__.py -------------------------------------------------------------------------------- /extensions/exampleExtension.py: -------------------------------------------------------------------------------- 1 | from lib.AuroraExtension import AuroraExtension 2 | import time 3 | from random import randint, choice 4 | import numpy as np 5 | import cv2 6 | 7 | 8 | class exampleExtension(AuroraExtension): 9 | def __init__(self, NeoPixels, HDMI): 10 | super().__init__(NeoPixels, HDMI) 11 | self.Author = "Andrew MacPherson (@AndrewMohawk)" 12 | self.Description = "Extension Example" 13 | self.Name = "example extension" 14 | self.count = 0 15 | self.randomLED = 0 16 | self.randomSize = 0 17 | self.log("Extension {} Initiated".format(self.Name)) 18 | 19 | # This doesnt need to be implemented, but can if you want 20 | # def takeScreenShot(self, filepath): 21 | 22 | # Fade LEDs to Black (so they dont instantly drop off) 23 | def fadeToBlack(self, pixelPos): 24 | fadeValue = 0.2 25 | b, g, r = self.pixels[pixelPos] 26 | 27 | r = 0 if r <= 10 else int(r - (r * fadeValue)) 28 | g = 0 if g <= 10 else int(g - (g * fadeValue)) 29 | b = 0 if b <= 10 else int(b - (b * fadeValue)) 30 | self.pixels[pixelPos] = (b, g, r) 31 | 32 | # Fade LEDs to bright (or first block to 255) so they dont just spotlight 33 | def fadeToBright(self, pixelPos): 34 | 35 | fadeValue = 1.2 36 | b, g, r = self.pixels[pixelPos] 37 | 38 | if r == 255 or g == 255 or b == 255: 39 | return 40 | r = 255 if r >= 200 else int(r + (r * fadeValue)) 41 | g = 255 if g >= 200 else int(g + (g * fadeValue)) 42 | b = 255 if b >= 200 else int(b + (b * fadeValue)) 43 | 44 | self.pixels[pixelPos] = (b, g, r) 45 | 46 | # This will 'visualise' whatever you want and will be called every ~0.01s 47 | def visualise(self): 48 | 49 | # Grab a 'frame' of the screen: 50 | ret, self.current_frame = self.getFrame() 51 | 52 | # Theres something on the screen 53 | if ret: 54 | self.count = self.count + 1 55 | 56 | if self.count <= 1: 57 | if self.count == 1: 58 | self.log("Setting up colours") 59 | # Lets get a random size for our group of pixels between 5 and 50 60 | self.randomSize = randint(5, 50) 61 | 62 | # Lets pick a random LED to turn on 63 | self.randomLED = randint(0, self.pixelsCount - self.randomSize) 64 | 65 | # Lets get a random starting colour that we will scale up 66 | self.colour = (randint(0, 10), randint(0, 10), randint(0, 10)) 67 | 68 | # Set the colour 69 | for x in range(self.randomLED, self.randomLED + self.randomSize): 70 | self.pixels[x] = self.colour 71 | 72 | elif self.count < 20: 73 | if self.count == 2: 74 | self.log("Fading up colours") 75 | # Fade it up 76 | for fade_up_pixel in range( 77 | self.randomLED, (self.randomLED + self.randomSize) 78 | ): 79 | self.fadeToBright(fade_up_pixel) 80 | 81 | elif self.count < 40: 82 | if self.count == 21: 83 | self.log("Fading out colours") 84 | for fade_out_pixel in range( 85 | self.randomLED, (self.randomLED + self.randomSize) 86 | ): 87 | self.fadeToBlack(fade_out_pixel) 88 | 89 | else: 90 | if self.count == 40: 91 | self.log("Resetting colours") 92 | self.count = 0 93 | 94 | # And show it 95 | self.pixels.show() 96 | -------------------------------------------------------------------------------- /github/Aurora_Ambient_Light_test_video.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/github/Aurora_Ambient_Light_test_video.gif -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo -e " 3 | ▄▄▄ █ ██ ██▀███ ▒█████ ██▀███ ▄▄▄ 4 | ▒████▄ ██ ▓██▒▓██ ▒ ██▒▒██▒ ██▒▓██ ▒ ██▒▒████▄ 5 | ▒██ ▀█▄ ▓██ ▒██░▓██ ░▄█ ▒▒██░ ██▒▓██ ░▄█ ▒▒██ ▀█▄ 6 | ░██▄▄▄▄██ ▓▓█ ░██░▒██▀▀█▄ ▒██ ██░▒██▀▀█▄ ░██▄▄▄▄██ 7 | ▓█ ▓██▒▒▒█████▓ ░██▓ ▒██▒░ ████▓▒░░██▓ ▒██▒ ▓█ ▓██▒ 8 | ▒▒ ▓▒█░░▒▓▒ ▒ ▒ ░ ▒▓ ░▒▓░░ ▒░▒░▒░ ░ ▒▓ ░▒▓░ ▒▒ ▓▒█░ 9 | ▒ ▒▒ ░░░▒░ ░ ░ ░▒ ░ ▒░ ░ ▒ ▒░ ░▒ ░ ▒░ ▒ ▒▒ ░ 10 | ░ ▒ ░░░ ░ ░ ░░ ░ ░ ░ ░ ▒ ░░ ░ ░ ▒ 11 | ░ ░ ░ ░ ░ ░ ░ ░ ░ 12 | -Install Script- 13 | @AndrewMohawk 14 | " 15 | INSTALLDIR="/opt/Aurora" 16 | if [[ $EUID -ne 0 ]]; then 17 | echo "This script must be run as root, please use sudo" 18 | exit 1 19 | fi 20 | 21 | if [ -d "$INSTALLDIR" ] 22 | then 23 | echo "Directory $INSTALLDIR exists. Please remove before performing a clean install" 24 | exit 1 25 | fi 26 | echo "[+] Creating Install Directory" 27 | echo "------------------------------" 28 | mkdir $INSTALLDIR 29 | cd $INSTALLDIR 30 | echo "[+] Updating APT and installing dependencies" 31 | echo "------------------------------" 32 | apt update 33 | apt-get install -y libatlas-base-dev libportaudio2 python3-pip git python3-opencv 34 | echo "[+] Git Cloning Aurora base" 35 | echo "------------------------------" 36 | git clone https://github.com/AndrewMohawk/Aurora.git . 37 | cp config.ini.bak config.ini 38 | echo "[+] Installing Python Requirements" 39 | echo "------------------------------" 40 | pip3 install -r requirements.txt 41 | echo "[+] Installing Service" 42 | echo "------------------------------" 43 | cp aurora.service /etc/systemd/system 44 | systemctl enable aurora.service 45 | systemctl start aurora.service 46 | echo "[+] Service Status" 47 | echo "------------------------------" 48 | echo "Aurora status: `systemctl is-active aurora.service`" 49 | echo "[+] Last 20 lines of aurora log" 50 | echo "------------------------------" 51 | journalctl -u aurora -n 20 --no-pager 52 | echo -e " 53 | ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ 54 | (___|___|___|___|___|___|___|___|___|___|___|___) 55 | " 56 | echo "Complete. You can now browse to the web interface to configure any changes you may need." 57 | localip=$(hostname -I) 58 | echo "This will likely be: http://$localip" 59 | -------------------------------------------------------------------------------- /lib/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/lib/__init__.py -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | numpy >= 1.16.5 2 | pandas 3 | opencv-python==4.5.1.48 4 | cherrypy 5 | configparser 6 | adafruit-circuitpython-neopixel 7 | blinker 8 | jinja2 9 | sounddevice 10 | pyaudio 11 | -------------------------------------------------------------------------------- /update.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo -e " 3 | ▄▄▄ █ ██ ██▀███ ▒█████ ██▀███ ▄▄▄ 4 | ▒████▄ ██ ▓██▒▓██ ▒ ██▒▒██▒ ██▒▓██ ▒ ██▒▒████▄ 5 | ▒██ ▀█▄ ▓██ ▒██░▓██ ░▄█ ▒▒██░ ██▒▓██ ░▄█ ▒▒██ ▀█▄ 6 | ░██▄▄▄▄██ ▓▓█ ░██░▒██▀▀█▄ ▒██ ██░▒██▀▀█▄ ░██▄▄▄▄██ 7 | ▓█ ▓██▒▒▒█████▓ ░██▓ ▒██▒░ ████▓▒░░██▓ ▒██▒ ▓█ ▓██▒ 8 | ▒▒ ▓▒█░░▒▓▒ ▒ ▒ ░ ▒▓ ░▒▓░░ ▒░▒░▒░ ░ ▒▓ ░▒▓░ ▒▒ ▓▒█░ 9 | ▒ ▒▒ ░░░▒░ ░ ░ ░▒ ░ ▒░ ░ ▒ ▒░ ░▒ ░ ▒░ ▒ ▒▒ ░ 10 | ░ ▒ ░░░ ░ ░ ░░ ░ ░ ░ ░ ▒ ░░ ░ ░ ▒ 11 | ░ ░ ░ ░ ░ ░ ░ ░ ░ 12 | -Update Script- 13 | @AndrewMohawk 14 | " 15 | INSTALLDIR="/opt/Aurora" 16 | if [[ $EUID -ne 0 ]]; then 17 | echo "This script must be run as root, please use sudo" 18 | exit 1 19 | fi 20 | 21 | if [ ! -d "$INSTALLDIR" ] 22 | then 23 | echo "Directory $INSTALLDIR Does not exist. Please run install first or update the install directory" 24 | exit 1 25 | fi 26 | cd $INSTALLDIR 27 | if [ -d .git ]; then 28 | echo "[+] Git Cloning Aurora base" 29 | echo "------------------------------" 30 | git pull 31 | echo "[+] Stopping Aurora" 32 | echo "------------------------------" 33 | service aurora stop 34 | echo "[+] Service Status" 35 | echo "------------------------------" 36 | echo "Aurora status: `systemctl is-active aurora.service`" 37 | echo "[+] Starting Aurora" 38 | echo "------------------------------" 39 | service aurora start 40 | echo "[+] Service Status" 41 | echo "------------------------------" 42 | echo "Aurora status: `systemctl is-active aurora.service`" 43 | echo "[+] Last 20 lines of aurora log" 44 | echo "------------------------------" 45 | journalctl -u aurora -n 20 --no-pager 46 | echo -e " 47 | ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ 48 | (___|___|___|___|___|___|___|___|___|___|___|___) 49 | " 50 | echo "Complete. You can now browse to the web interface to configure any changes you may need." 51 | localip=$(hostname -I) 52 | echo "This will likely be: http://$localip" 53 | 54 | else 55 | echo "This install directory ($INSTALLDIR) is *NOT* a git repo." 56 | fi; 57 | -------------------------------------------------------------------------------- /webserver/static/css/bootstrap-slider.min.css: -------------------------------------------------------------------------------- 1 | /*! ======================================================= 2 | VERSION 11.0.2 3 | ========================================================= */ 4 | /*! ========================================================= 5 | * bootstrap-slider.js 6 | * 7 | * Maintainers: 8 | * Kyle Kemp 9 | * - Twitter: @seiyria 10 | * - Github: seiyria 11 | * Rohit Kalkur 12 | * - Twitter: @Rovolutionary 13 | * - Github: rovolution 14 | * 15 | * ========================================================= 16 | * 17 | * bootstrap-slider is released under the MIT License 18 | * Copyright (c) 2019 Kyle Kemp, Rohit Kalkur, and contributors 19 | * 20 | * Permission is hereby granted, free of charge, to any person 21 | * obtaining a copy of this software and associated documentation 22 | * files (the "Software"), to deal in the Software without 23 | * restriction, including without limitation the rights to use, 24 | * copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | * copies of the Software, and to permit persons to whom the 26 | * Software is furnished to do so, subject to the following 27 | * conditions: 28 | * 29 | * The above copyright notice and this permission notice shall be 30 | * included in all copies or substantial portions of the Software. 31 | * 32 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 33 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 34 | * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 35 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 36 | * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 37 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 38 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 39 | * OTHER DEALINGS IN THE SOFTWARE. 40 | * 41 | * ========================================================= */.slider{display:inline-block;vertical-align:middle;position:relative}.slider.slider-horizontal{width:210px;height:20px}.slider.slider-horizontal .slider-track{height:10px;width:100%;margin-top:-5px;top:50%;left:0}.slider.slider-horizontal .slider-selection,.slider.slider-horizontal .slider-track-low,.slider.slider-horizontal .slider-track-high{height:100%;top:0;bottom:0}.slider.slider-horizontal .slider-tick,.slider.slider-horizontal .slider-handle{margin-left:-10px}.slider.slider-horizontal .slider-tick.triangle,.slider.slider-horizontal .slider-handle.triangle{position:relative;top:50%;transform:translateY(-50%);border-width:0 10px 10px 10px;width:0;height:0;border-bottom-color:#036fa5;margin-top:0}.slider.slider-horizontal .slider-tick-container{white-space:nowrap;position:absolute;top:0;left:0;width:100%}.slider.slider-horizontal .slider-tick-label-container{white-space:nowrap;margin-top:20px}.slider.slider-horizontal .slider-tick-label-container .slider-tick-label{display:inline-block;text-align:center}.slider.slider-horizontal.slider-rtl .slider-track{left:initial;right:0}.slider.slider-horizontal.slider-rtl .slider-tick,.slider.slider-horizontal.slider-rtl .slider-handle{margin-left:initial;margin-right:-10px}.slider.slider-horizontal.slider-rtl .slider-tick-container{left:initial;right:0}.slider.slider-vertical{height:210px;width:20px}.slider.slider-vertical .slider-track{width:10px;height:100%;left:25%;top:0}.slider.slider-vertical .slider-selection{width:100%;left:0;top:0;bottom:0}.slider.slider-vertical .slider-track-low,.slider.slider-vertical .slider-track-high{width:100%;left:0;right:0}.slider.slider-vertical .slider-tick,.slider.slider-vertical .slider-handle{margin-top:-10px}.slider.slider-vertical .slider-tick.triangle,.slider.slider-vertical .slider-handle.triangle{border-width:10px 0 10px 10px;width:1px;height:1px;border-left-color:#036fa5;margin-left:0}.slider.slider-vertical .slider-tick-label-container{white-space:nowrap}.slider.slider-vertical .slider-tick-label-container .slider-tick-label{padding-left:4px}.slider.slider-vertical.slider-rtl .slider-track{left:initial;right:25%}.slider.slider-vertical.slider-rtl .slider-selection{left:initial;right:0}.slider.slider-vertical.slider-rtl .slider-tick.triangle,.slider.slider-vertical.slider-rtl .slider-handle.triangle{border-width:10px 10px 10px 0}.slider.slider-vertical.slider-rtl .slider-tick-label-container .slider-tick-label{padding-left:initial;padding-right:4px}.slider.slider-disabled .slider-handle{background-color:#cfcfcf;background-image:-moz-linear-gradient(top, #DFDFDF, #BEBEBE);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#DFDFDF), to(#BEBEBE));background-image:-webkit-linear-gradient(top, #DFDFDF, #BEBEBE);background-image:-o-linear-gradient(top, #DFDFDF, #BEBEBE);background-image:linear-gradient(to bottom, #DFDFDF, #BEBEBE);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#DFDFDF', endColorstr='#BEBEBE',GradientType=0)}.slider.slider-disabled .slider-track{background-color:#e7e7e7;background-image:-moz-linear-gradient(top, #E5E5E5, #E9E9E9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#E5E5E5), to(#E9E9E9));background-image:-webkit-linear-gradient(top, #E5E5E5, #E9E9E9);background-image:-o-linear-gradient(top, #E5E5E5, #E9E9E9);background-image:linear-gradient(to bottom, #E5E5E5, #E9E9E9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#E5E5E5', endColorstr='#E9E9E9',GradientType=0);cursor:not-allowed}.slider input{display:none}.slider .tooltip-inner{white-space:nowrap;max-width:none}.slider .bs-tooltip-top .tooltip-inner,.slider .bs-tooltip-bottom .tooltip-inner{position:relative;left:-50%}.slider.bs-tooltip-left .tooltip-inner,.slider.bs-tooltip-right .tooltip-inner{position:relative;top:-100%}.slider .tooltip{pointer-events:none}.slider .tooltip.bs-tooltip-top .arrow,.slider .tooltip.bs-tooltip-bottom .arrow{left:-.4rem}.slider .tooltip.bs-tooltip-top{margin-top:-44px}.slider .tooltip.bs-tooltip-bottom{margin-top:2px}.slider .tooltip.bs-tooltip-left,.slider .tooltip.bs-tooltip-right{margin-top:-14px}.slider .tooltip.bs-tooltip-left .arrow,.slider .tooltip.bs-tooltip-right .arrow{top:8px}.slider .hide{display:none}.slider-track{background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #F9F9F9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#F9F9F9));background-image:-webkit-linear-gradient(top, #f5f5f5, #F9F9F9);background-image:-o-linear-gradient(top, #f5f5f5, #F9F9F9);background-image:linear-gradient(to bottom, #f5f5f5, #F9F9F9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#F9F9F9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;position:absolute;cursor:pointer}.slider-selection{background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #F9F9F9, #f5f5f5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#F9F9F9), to(#f5f5f5));background-image:-webkit-linear-gradient(top, #F9F9F9, #f5f5f5);background-image:-o-linear-gradient(top, #F9F9F9, #f5f5f5);background-image:linear-gradient(to bottom, #F9F9F9, #f5f5f5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#F9F9F9', endColorstr='#f5f5f5',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;position:absolute}.slider-selection.tick-slider-selection{background-color:#46c1fe;background-image:-moz-linear-gradient(top, #52c5ff, #3abcfd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#52c5ff), to(#3abcfd));background-image:-webkit-linear-gradient(top, #52c5ff, #3abcfd);background-image:-o-linear-gradient(top, #52c5ff, #3abcfd);background-image:linear-gradient(to bottom, #52c5ff, #3abcfd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#52c5ff', endColorstr='#3abcfd',GradientType=0)}.slider-track-low,.slider-track-high{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;position:absolute;background:transparent}.slider-handle{background-color:#0478b2;background-image:-moz-linear-gradient(top, #0480BE, #036fa5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0480BE), to(#036fa5));background-image:-webkit-linear-gradient(top, #0480BE, #036fa5);background-image:-o-linear-gradient(top, #0480BE, #036fa5);background-image:linear-gradient(to bottom, #0480BE, #036fa5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0480BE', endColorstr='#036fa5',GradientType=0);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);position:absolute;top:0;width:20px;height:20px;background-color:#0480BE;border:0px solid transparent}.slider-handle:hover{cursor:pointer}.slider-handle.round{-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px}.slider-handle.triangle{background:transparent none}.slider-handle.custom{background:transparent none}.slider-handle.custom::before{line-height:20px;font-size:20px;content:'\2605';color:#726204}.slider-tick{background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #F9F9F9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#F9F9F9));background-image:-webkit-linear-gradient(top, #f5f5f5, #F9F9F9);background-image:-o-linear-gradient(top, #f5f5f5, #F9F9F9);background-image:linear-gradient(to bottom, #f5f5f5, #F9F9F9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#F9F9F9',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;cursor:pointer;width:20px;height:20px;filter:none;opacity:0.8;border:0px solid transparent}.slider-tick.round{border-radius:50%}.slider-tick.triangle{background:transparent none}.slider-tick.custom{background:transparent none}.slider-tick.custom::before{line-height:20px;font-size:20px;content:'\2605';color:#726204}.slider-tick.in-selection{background-color:#46c1fe;background-image:-moz-linear-gradient(top, #52c5ff, #3abcfd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#52c5ff), to(#3abcfd));background-image:-webkit-linear-gradient(top, #52c5ff, #3abcfd);background-image:-o-linear-gradient(top, #52c5ff, #3abcfd);background-image:linear-gradient(to bottom, #52c5ff, #3abcfd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#52c5ff', endColorstr='#3abcfd',GradientType=0);opacity:1} 42 | 43 | /*# sourceMappingURL=bootstrap-slider.min.css.map */ 44 | Extension Disabled 45 | -------------------------------------------------------------------------------- /webserver/static/favicon/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/favicon/android-chrome-192x192.png -------------------------------------------------------------------------------- /webserver/static/favicon/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/favicon/android-chrome-512x512.png -------------------------------------------------------------------------------- /webserver/static/favicon/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/favicon/apple-touch-icon.png -------------------------------------------------------------------------------- /webserver/static/favicon/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/favicon/favicon-16x16.png -------------------------------------------------------------------------------- /webserver/static/favicon/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/favicon/favicon-32x32.png -------------------------------------------------------------------------------- /webserver/static/favicon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/favicon/favicon.ico -------------------------------------------------------------------------------- /webserver/static/fonts/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/fonts/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /webserver/static/fonts/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/fonts/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /webserver/static/fonts/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/fonts/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /webserver/static/fonts/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/fonts/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /webserver/static/fonts/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/fonts/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /webserver/static/fonts/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/fonts/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /webserver/static/fonts/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/fonts/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /webserver/static/fonts/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/fonts/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /webserver/static/fonts/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/fonts/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /webserver/static/fonts/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/fonts/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /webserver/static/fonts/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/fonts/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /webserver/static/fonts/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/fonts/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /webserver/static/images/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/2.png -------------------------------------------------------------------------------- /webserver/static/images/ad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/ad.png -------------------------------------------------------------------------------- /webserver/static/images/ath.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/ath.png -------------------------------------------------------------------------------- /webserver/static/images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/close.png -------------------------------------------------------------------------------- /webserver/static/images/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/empty.png -------------------------------------------------------------------------------- /webserver/static/images/framework/AjaxLoader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/framework/AjaxLoader.gif -------------------------------------------------------------------------------- /webserver/static/images/framework/AuroraLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/framework/AuroraLogo.png -------------------------------------------------------------------------------- /webserver/static/images/framework/activity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/framework/activity.png -------------------------------------------------------------------------------- /webserver/static/images/framework/deco-slash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/framework/deco-slash.png -------------------------------------------------------------------------------- /webserver/static/images/framework/deco-zig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/framework/deco-zig.png -------------------------------------------------------------------------------- /webserver/static/images/framework/grabbing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/framework/grabbing.png -------------------------------------------------------------------------------- /webserver/static/images/framework/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/framework/icons.png -------------------------------------------------------------------------------- /webserver/static/images/framework/icons.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /webserver/static/images/framework/loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/framework/loader.gif -------------------------------------------------------------------------------- /webserver/static/images/framework/page-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/framework/page-loader.gif -------------------------------------------------------------------------------- /webserver/static/images/framework/pattern_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/framework/pattern_1.png -------------------------------------------------------------------------------- /webserver/static/images/framework/pay-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/framework/pay-1.png -------------------------------------------------------------------------------- /webserver/static/images/framework/pay-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/framework/pay-2.png -------------------------------------------------------------------------------- /webserver/static/images/framework/pay-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/framework/pay-3.png -------------------------------------------------------------------------------- /webserver/static/images/framework/pay-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/framework/pay-4.png -------------------------------------------------------------------------------- /webserver/static/images/framework/pay-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/framework/pay-5.png -------------------------------------------------------------------------------- /webserver/static/images/framework/preload.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/framework/preload.gif -------------------------------------------------------------------------------- /webserver/static/images/framework/puff.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 12 | 19 | 20 | 21 | 28 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /webserver/static/images/header-oldlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/header-oldlogo.png -------------------------------------------------------------------------------- /webserver/static/images/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/header.png -------------------------------------------------------------------------------- /webserver/static/images/icons/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/1.png -------------------------------------------------------------------------------- /webserver/static/images/icons/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/10.png -------------------------------------------------------------------------------- /webserver/static/images/icons/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/11.png -------------------------------------------------------------------------------- /webserver/static/images/icons/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/12.png -------------------------------------------------------------------------------- /webserver/static/images/icons/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/13.png -------------------------------------------------------------------------------- /webserver/static/images/icons/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/14.png -------------------------------------------------------------------------------- /webserver/static/images/icons/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/15.png -------------------------------------------------------------------------------- /webserver/static/images/icons/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/16.png -------------------------------------------------------------------------------- /webserver/static/images/icons/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/17.png -------------------------------------------------------------------------------- /webserver/static/images/icons/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/18.png -------------------------------------------------------------------------------- /webserver/static/images/icons/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/19.png -------------------------------------------------------------------------------- /webserver/static/images/icons/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/2.png -------------------------------------------------------------------------------- /webserver/static/images/icons/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/3.png -------------------------------------------------------------------------------- /webserver/static/images/icons/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/4.png -------------------------------------------------------------------------------- /webserver/static/images/icons/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/5.png -------------------------------------------------------------------------------- /webserver/static/images/icons/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/6.png -------------------------------------------------------------------------------- /webserver/static/images/icons/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/7.png -------------------------------------------------------------------------------- /webserver/static/images/icons/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/8.png -------------------------------------------------------------------------------- /webserver/static/images/icons/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/icons/9.png -------------------------------------------------------------------------------- /webserver/static/images/icons/license.txt: -------------------------------------------------------------------------------- 1 | https://www.iconfinder.com/iconsets/round-varieties 2 | 3 | 19 PNG icons by Creaticca Ltd - License: Creative Commons (Attribution 3.0 Unported) -------------------------------------------------------------------------------- /webserver/static/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/loading.gif -------------------------------------------------------------------------------- /webserver/static/images/menu-img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/menu-img.png -------------------------------------------------------------------------------- /webserver/static/images/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/next.png -------------------------------------------------------------------------------- /webserver/static/images/pictures/faces/1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/pictures/faces/1s.png -------------------------------------------------------------------------------- /webserver/static/images/pictures/faces/1small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/pictures/faces/1small.png -------------------------------------------------------------------------------- /webserver/static/images/pictures/faces/2s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/pictures/faces/2s.png -------------------------------------------------------------------------------- /webserver/static/images/pictures/faces/2small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/pictures/faces/2small.png -------------------------------------------------------------------------------- /webserver/static/images/pictures/faces/3s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/pictures/faces/3s.png -------------------------------------------------------------------------------- /webserver/static/images/pictures/faces/3small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/pictures/faces/3small.png -------------------------------------------------------------------------------- /webserver/static/images/pictures/faces/4s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/pictures/faces/4s.png -------------------------------------------------------------------------------- /webserver/static/images/pictures/faces/4small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/pictures/faces/4small.png -------------------------------------------------------------------------------- /webserver/static/images/preload-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/preload-logo.png -------------------------------------------------------------------------------- /webserver/static/images/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/prev.png -------------------------------------------------------------------------------- /webserver/static/images/splash/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/splash/Thumbs.db -------------------------------------------------------------------------------- /webserver/static/images/splash/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/splash/android-chrome-192x192.png -------------------------------------------------------------------------------- /webserver/static/images/splash/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/splash/apple-touch-icon-114x114.png -------------------------------------------------------------------------------- /webserver/static/images/splash/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/splash/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /webserver/static/images/splash/apple-touch-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/splash/apple-touch-icon-144x144.png -------------------------------------------------------------------------------- /webserver/static/images/splash/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/splash/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /webserver/static/images/splash/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/splash/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /webserver/static/images/splash/apple-touch-icon-196x196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/splash/apple-touch-icon-196x196.png -------------------------------------------------------------------------------- /webserver/static/images/splash/apple-touch-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/splash/apple-touch-icon-57x57.png -------------------------------------------------------------------------------- /webserver/static/images/splash/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/splash/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /webserver/static/images/splash/apple-touch-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/splash/apple-touch-icon-72x72.png -------------------------------------------------------------------------------- /webserver/static/images/splash/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/splash/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /webserver/static/images/splash/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/splash/favicon-16x16.png -------------------------------------------------------------------------------- /webserver/static/images/splash/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/splash/favicon-32x32.png -------------------------------------------------------------------------------- /webserver/static/images/splash/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/splash/favicon-96x96.png -------------------------------------------------------------------------------- /webserver/static/images/splash/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewMohawk/Aurora/039dbea649dbff6a782c770719081b26d542c7f3/webserver/static/images/splash/favicon.ico -------------------------------------------------------------------------------- /webserver/static/images/undraw/2.svg: -------------------------------------------------------------------------------- 1 | develop_app -------------------------------------------------------------------------------- /webserver/static/images/undraw/3.svg: -------------------------------------------------------------------------------- 1 | researching -------------------------------------------------------------------------------- /webserver/static/images/undraw/5.svg: -------------------------------------------------------------------------------- 1 | speed test -------------------------------------------------------------------------------- /webserver/static/images/undraw/6.svg: -------------------------------------------------------------------------------- 1 | gift1 -------------------------------------------------------------------------------- /webserver/static/images/undraw/7.svg: -------------------------------------------------------------------------------- 1 | sign_in -------------------------------------------------------------------------------- /webserver/static/images/undraw/_license_and_link.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\cocoartf2512 2 | \cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\froman\fcharset0 Times-Roman;\f2\fswiss\fcharset0 Helvetica-Bold; 3 | } 4 | {\colortbl;\red255\green255\blue255;\red0\green0\blue233;\red63\green63\blue63;\red255\green255\blue255; 5 | } 6 | {\*\expandedcolortbl;;\cssrgb\c0\c0\c93333;\cssrgb\c31373\c31373\c31373;\cssrgb\c100000\c100000\c100000; 7 | } 8 | \margl1440\margr1440\vieww25360\viewh18140\viewkind0 9 | \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 10 | 11 | \f0\fs36 \cf0 \ 12 | Free Illustrations URL: {\field{\*\fldinst{HYPERLINK "https://undraw.co/illustrations"}}{\fldrslt 13 | \f1\fs24 \cf2 \expnd0\expndtw0\kerning0 14 | \ul \ulc2 \outl0\strokewidth0 \strokec2 https://undraw.co/illustrations}}\ 15 | License URL: {\field{\*\fldinst{HYPERLINK "https://undraw.co/license"}}{\fldrslt 16 | \f1\fs24 \cf2 \expnd0\expndtw0\kerning0 17 | \ul \ulc2 \outl0\strokewidth0 \strokec2 https://undraw.co/license}}\ 18 | \pard\pardeftab720\sa480\partightenfactor0 19 | 20 | \f2\b\fs32 \cf3 \cb4 \expnd0\expndtw0\kerning0 21 | \outl0\strokewidth0 \strokec3 Copyright\'a02020\'a0Katerina Limpitsouni\ 22 | \pard\pardeftab720\sl480\sa320\partightenfactor0 23 | 24 | \f0\b0 \cf3 All images, assets and vectors published on unDraw can be used for free. You can use them for noncommercial and commercial purposes. You do not need to ask permission from or provide credit to the creator or unDraw.\ 25 | More precisely, unDraw grants you an nonexclusive, worldwide copyright license to download, copy, modify, distribute, perform, and use the assets provided from unDraw for free, including for commercial purposes, without permission from or attributing the creator or unDraw. This license does not include the right to compile assets, vectors or images from unDraw to replicate a similar or competing service, in any form or distribute the assets in packs. This extends to automated and non-automated ways to link, embed, scrape, search or download the assets included on the website without our consent.\ 26 | \pard\pardeftab720\sa480\partightenfactor0 27 | 28 | \f2\b \cf3 Regarding brand logos that are included:\ 29 | \pard\pardeftab720\sl480\sa320\partightenfactor0 30 | 31 | \f0\b0 \cf3 Are registered trademarks of their respected owners. Are included on a promotional basis and do not represent an association with unDraw or its users. Do not indicate any kind of endorsement of the trademark holder towards unDraw, nor vice versa. Are provided with the sole purpose to represent the actual brand/service/company that has registered the trademark and must not be used otherwise.\ 32 | } -------------------------------------------------------------------------------- /webserver/static/images/undraw/a.svg: -------------------------------------------------------------------------------- 1 | Hello -------------------------------------------------------------------------------- /webserver/static/images/undraw/b.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /webserver/static/images/undraw/c.svg: -------------------------------------------------------------------------------- 1 | new_ideas -------------------------------------------------------------------------------- /webserver/static/images/undraw/d.svg: -------------------------------------------------------------------------------- 1 | code review -------------------------------------------------------------------------------- /webserver/static/images/undraw/e.svg: -------------------------------------------------------------------------------- 1 | insert -------------------------------------------------------------------------------- /webserver/static/js/aurora-configure.js: -------------------------------------------------------------------------------- 1 | function fetch_config_data() { 2 | ajax_send_data = {} 3 | ajax_send_data["pixelcount_left"] = $('#aurora_configure_left').val() 4 | ajax_send_data["pixelcount_right"] = $('#aurora_configure_right').val() 5 | ajax_send_data["pixelcount_top"] = $('#aurora_configure_top').val() 6 | ajax_send_data["pixelcount_bottom"] = $('#aurora_configure_bottom').val() 7 | ajax_send_data["darkthreshhold"] = $('#aurora_config_darkthreshhold').val() 8 | ajax_send_data["hdmi_gamma"] = $('#hdmi_gamma').val() 9 | return ajax_send_data 10 | } 11 | $('#aurora_configure_save_button').on("click", function (event) { 12 | 13 | ajax_send_data = fetch_config_data() 14 | ajax_send_data["save"] = true 15 | ajax_save_config = make_AJAX_Call("/update_LED_config", ajax_send_data) 16 | if (ajax_save_config["status"] == "ok") { 17 | reload_pixel_image(); 18 | create_snackbar("Pixel Configuration", "Successfully saved system config", "success") 19 | } 20 | }); 21 | 22 | 23 | //Stepper Add 24 | $('.stepper-add').on('click',function(){ 25 | var num = +$(this).parent().find('input').val() + 1; 26 | $(this).parent().find('input').val(num); 27 | //return false; 28 | }); 29 | $('.stepper-sub').on('click',function(){ 30 | var num = $(this).parent().find('input').val() - 1; 31 | if(num >= 0){$(this).parent().find('input').val(num);} 32 | //return false; 33 | }); 34 | 35 | $('.stepper-add, .stepper-sub').on("click", function (event) { 36 | 37 | ajax_send_data = fetch_config_data() 38 | ajax_response = make_AJAX_Call("/update_LED_config", ajax_send_data); 39 | if (ajax_response["status"] == "ok") { 40 | reload_pixel_image(); 41 | } 42 | }) 43 | 44 | 45 | $('#hdmi_hue, #hdmi_saturation,#hdmi_brightness,#hdmi_contrast,#hdmi_gamma').on("slideStop", function (event) { 46 | val = $(this).val() 47 | id = $(this).attr("id") 48 | setHDMIValues(); 49 | }) 50 | 51 | function save_hdmi_image() 52 | { 53 | ajax_send_data = fetch_config_data() 54 | ajax_send_data["save"] = true 55 | ajax_response = make_AJAX_Call("/update_HDMI_config", ajax_send_data); 56 | if (ajax_response["status"] == "ok") { 57 | make_AJAX_Call("/screenshot/", {}) 58 | reload_hdmi_image(); 59 | } 60 | } 61 | 62 | function reloadImages() { 63 | make_AJAX_Call("/screenshot/", {}) 64 | d = new Date(); 65 | $("#image_screenshot").attr("src", "/load_screenshot?" + d.getTime()); 66 | $("#image_pixels").attr("src", "/load_pixel_image?" + d.getTime()); 67 | secondsBeforeReload = 5; 68 | } 69 | 70 | function setHDMIValues() 71 | { 72 | ajax_send_data = fetch_config_data() 73 | ajax_response = make_AJAX_Call("/update_HDMI_config", ajax_send_data); 74 | if (ajax_response["status"] == "ok") { 75 | make_AJAX_Call("/screenshot/", {}) 76 | reload_hdmi_image(); 77 | } 78 | } 79 | function reset_gamma(hue_gamma) 80 | { 81 | $('#hdmi_gamma').slider('setValue',hue_gamma) 82 | setHDMIValues() 83 | } 84 | 85 | -------------------------------------------------------------------------------- /webserver/static/js/aurora-generic.js: -------------------------------------------------------------------------------- 1 | currentAjaxRequest = null; // Stores our current ajax request so we can cancel it if we do another 2 | 3 | function togglePower() 4 | { 5 | make_AJAX_Call("/toggleEnable",[],function() { 6 | $('#powerToggle').toggleClass("color-theme") 7 | }) 8 | } 9 | 10 | function make_AJAX_Call(url, data_dict, callback_function = false) { 11 | 12 | return_result = false; 13 | async_state = false 14 | if (callback_function) { 15 | async_state = true 16 | } 17 | 18 | currentAjaxRequest = $.ajax({ 19 | type: "POST", 20 | url: url, 21 | data: JSON.stringify(data_dict), 22 | contentType: 'application/json', 23 | dataType: 'json', 24 | async: async_state, //we wait for these! 25 | success: function (data) { 26 | if (data["status"] == "error") { 27 | create_snackbar("Aurora Error", data["error"], "error") 28 | } 29 | if (callback_function) { 30 | callback_function(data) 31 | } 32 | 33 | return_result = data 34 | }, 35 | error: function (data) { 36 | console.log("Error with AJAX reqest to " + url + " with ASync set to " + async_state + " returned the following:"); 37 | console.log(data); 38 | return_result = data 39 | }, 40 | beforeSend: function () { 41 | if (currentAjaxRequest != null) { 42 | currentAjaxRequest.abort(); 43 | } 44 | }, 45 | }); 46 | //console.log("returning " + return_result["status"]) 47 | return return_result 48 | 49 | } 50 | 51 | function create_snackbar(heading, message, type) { 52 | col = "bg-highlight" 53 | if (type == "success") { 54 | col = "bg-green-dark" 55 | } 56 | else if (type == "error") { 57 | col = "bg-red-dark" 58 | } 59 | 60 | snackDivUniqueID = "aurora_snackbar" 61 | snackDiv = $('

' + heading + '

' + message + '

') 62 | 63 | $('#' + snackDivUniqueID).remove(); // if the prev one exists lets get rid of it 64 | 65 | $('body').prepend(snackDiv); 66 | $('#' + snackDivUniqueID).toast('show'); 67 | return "okay done" 68 | } 69 | 70 | 71 | //These arent that 'generic', but its used on multiple pages so its going here. 72 | 73 | function showExtensionDetails(name) { 74 | if ($('#extension_details').is(':visible') == false) { 75 | $('#extension_details').slideDown(); 76 | } 77 | //The 'extensions' dict is loaded onto pages that have it 78 | //TODO: this is hacky and should be properly loaded in 79 | extDetails = extensions[name] 80 | 81 | $('#ext_description').text(extDetails.Description) 82 | $('#ext_author').text(extDetails.Author) 83 | 84 | } 85 | 86 | function loadExtension(extension_name = false) { 87 | if (extension_name == false) { 88 | extension_name = $('#aurora_extension_dropdown').val() 89 | } 90 | data = { 'extension_name': extension_name } 91 | ajax_response = make_AJAX_Call("/update_extension", data) 92 | console.log(ajax_response); 93 | if (ajax_response["status"] == "ok") { 94 | create_snackbar("Extension Load", "Successfully loaded extension", "success") 95 | } 96 | 97 | 98 | } 99 | 100 | function reload_pixel_image() { 101 | 102 | pixel_image_reload = make_AJAX_Call("/screenshot/", {}) 103 | //console.log(pixel_image_reload) 104 | if (pixel_image_reload["status"] == "ok") { 105 | d = new Date(); 106 | $("#pixel_image").attr("src", "/load_pixel_image?" + d.getTime()); 107 | } 108 | else { 109 | console.log(pixel_image_reload) 110 | } 111 | } 112 | 113 | function reload_hdmi_image() { 114 | 115 | pixel_image_reload = make_AJAX_Call("/screenshot/", {}) 116 | 117 | d = new Date(); 118 | $("#image_screenshot").attr("src", "/load_screenshot?" + d.getTime()); 119 | console.log("/load_screenshot?" + d.getTime()) 120 | 121 | } 122 | 123 | 124 | -------------------------------------------------------------------------------- /webserver/static/js/aurora-index.js: -------------------------------------------------------------------------------- 1 | function change_system_status() 2 | { 3 | 4 | $('#toggle_aurora_enabled').prop("disabled",true) 5 | enabled_stats = $('#toggle_aurora_enabled').prop('checked'); 6 | 7 | data = {"enabled":enabled_stats} 8 | system_status_call = make_AJAX_Call("/update_config",data,toast_system_status) 9 | 10 | 11 | $('#toggle_aurora_enabled').prop("disabled",false) 12 | 13 | 14 | } 15 | 16 | function toast_system_status(system_status_call) 17 | { 18 | if(system_status_call["status"] == "ok") 19 | { 20 | if(system_status_call["message"]) 21 | { 22 | create_snackbar("System Enabled Status",system_status_call["message"],"success") 23 | } 24 | else 25 | { 26 | create_snackbar("System Enabled Status","Successfully saved system config","success") 27 | } 28 | } 29 | 30 | 31 | } 32 | 33 | 34 | 35 | $('#aurora_extension_dropdown').on("change", function() { showExtensionDetails(this.value)}) 36 | 37 | $('#toggle_aurora_enabled').on('click',function(){ change_system_status() }) -------------------------------------------------------------------------------- /webserver/static/js/aurora-view.js: -------------------------------------------------------------------------------- 1 | function change_system_status() { 2 | 3 | $('#toggle_aurora_enabled').prop("disabled", true) 4 | enabled_stats = $('#toggle_aurora_enabled').prop('checked'); 5 | 6 | data = { "enabled": enabled_stats } 7 | system_status_call = make_AJAX_Call("/update_config", data, toast_system_status) 8 | 9 | 10 | $('#toggle_aurora_enabled').prop("disabled", false) 11 | 12 | 13 | } 14 | 15 | function toast_system_status(system_status_call) { 16 | if (system_status_call["status"] == "ok") { 17 | create_snackbar("System Enabled Status", "Successfully saved system config", "success") 18 | } 19 | 20 | } 21 | 22 | 23 | 24 | $('#aurora_extension_dropdown').on("change", function () { showExtensionDetails(this.value) }) 25 | 26 | $('#toggle_aurora_enabled').on('click', function () { change_system_status() }) 27 | 28 | var secondsBeforeReload = 5; 29 | 30 | function reloadImages() { 31 | make_AJAX_Call("/screenshot/", {}) 32 | d = new Date(); 33 | $("#image_screenshot").attr("src", "/load_screenshot?" + d.getTime()); 34 | $("#image_pixels").attr("src", "/load_pixel_image?" + d.getTime()); 35 | secondsBeforeReload = 5; 36 | } 37 | function reloadCounter() { 38 | if ($('#toggle_images_reload').prop("checked")) { 39 | secondsBeforeReload-- 40 | $('#reloadTime').text("(reloading in " + secondsBeforeReload + "s)") 41 | if (secondsBeforeReload == 0) { 42 | reloadImages(); 43 | 44 | } 45 | } 46 | 47 | } 48 | var reloadTimer = setInterval(reloadCounter, 1000); 49 | 50 | -------------------------------------------------------------------------------- /webserver/static/menu/menu-main.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 |
6 |

Aurora

7 |

Ambient Lighting

8 |
9 |
10 |
11 | 12 |
13 | 14 | 15 |
16 | 17 | 18 | 19 | Home 20 | 21 | 22 | 23 | 24 | About 25 | 26 | 27 | 28 | 29 | 30 | View 31 | 32 | 33 | 34 |
35 | 36 | 37 |
38 | 39 | 40 | Configuration 41 | 42 | 43 | 44 | 45 | Dark Mode 46 |
47 | 48 | 49 |
50 |
51 |
52 | 53 | 54 | 55 |
56 | 57 | 58 | Twitter 59 | 60 | 61 | 62 | 63 | Github 64 | 65 | 66 | 67 |
68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /webserver/templates/about.html: -------------------------------------------------------------------------------- 1 | {% include 'header.html' %} 2 | {% if configured == False %} 3 | 9 | {% endif %} 10 | 11 |
12 |
13 |
14 | 15 |
16 |
17 |

Update from GitHub

18 |

Update Aurora

19 |
20 | 21 |
22 |
23 | Current Version: {{current_version}}
24 | GitHub Version: {{github_version}}
25 | 26 | 27 |
28 |
29 | 30 |
31 |
32 |
33 | 34 |
35 |
36 |

Current loaded config

37 |

Configuration

38 |
39 | 40 |
41 |
42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | {% for key, value in config.items() %} 51 | {% for key2, value2 in value.items() %} 52 | 53 | {% endfor %} 54 | {% endfor %} 55 | 56 |
KeyValue
{{key2}}{{value2}}
57 | 58 |
59 |
60 | 61 | 62 | 63 | 64 | 67 | {% include 'footer.html' %} -------------------------------------------------------------------------------- /webserver/templates/configure.html: -------------------------------------------------------------------------------- 1 | {% include 'header.html' %} 2 |
3 |
4 |

Aurora

5 |

Pixel Configuration

6 |

7 | Your LED strip will be showing the colours depicted in the image below, look at the colours and configure 8 | the amount of LEDs per side accordingly, once you are happy hit save! 9 |

10 |
11 |
Darkness threshold:  12 |
13 | 14 | 15 | 16 |
17 | 18 |
19 |
20 |
21 |
22 | Left: 23 |
24 |
25 | 26 | 27 | 28 |
29 |
30 |
31 |
32 |
33 | Right: 34 |
35 |
36 | 37 | 38 | 39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | Top: 47 |
48 |
49 | 50 | 51 | 52 |
53 |
54 |
55 |
56 |
57 | Bottom: 58 |
59 |
60 | 61 | 62 | 63 |
64 |
65 |
66 |
67 | 68 |
69 | 74 | 75 |

76 | 77 |

78 |
79 | 144 |
145 | 146 |
147 | 148 |
149 | 150 | 151 |
152 | {% include 'footer.html' %} -------------------------------------------------------------------------------- /webserver/templates/footer.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 | 7 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 | {%if page=="home" %} 30 | 31 | {%elif page=="configure" %} 32 | 33 | {%elif page=="view" %} 34 | 35 | {% endif %} 36 | 37 | -------------------------------------------------------------------------------- /webserver/templates/header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | Aurora Ambient Lighting 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 |
23 |
24 | 25 |
26 | 27 |
28 | Aurora 29 | 30 | 31 | 33 | 35 |
36 | 37 | 48 | 49 |
50 |

Aurora

51 | 53 | 55 | 57 | 59 | 61 |
62 |
63 | 64 | 65 |
66 | 67 | 68 | -------------------------------------------------------------------------------- /webserver/templates/index.html: -------------------------------------------------------------------------------- 1 | {% include 'header.html' %} 2 | {% if configured == False %} 3 | 9 | {% endif %} 10 | 11 |
12 |
13 |
System Status
14 |
15 |
16 |
17 | 18 | 19 | ON 20 | OFF 21 |
22 |
23 |
24 | 25 |
26 |
27 |
28 | 29 |
30 |
31 |

Current Loaded extension

32 |

{%if current_extension_meta == False %} 33 | No extension currently running. 34 | {% endif %}{{current_extension_meta['Name']}} 35 |

36 |
37 | 38 |
39 |
40 | {{current_extension_meta['Description']}} 41 |
{{current_extension_meta['Author']}}
42 |
43 |
44 | 45 |
46 |
47 | 48 |

Load Extension

49 | Select an extension 50 |
51 | 52 | 57 |
58 | Extension Details
59 | 60 | Please select an extension 61 |
62 | Extension Author
63 |
64 |
65 |
66 | 67 | Load Extension 68 |
69 | 70 | 71 |
72 |
73 | 74 |
75 |
76 | 77 |
78 |
79 | About 80 |
81 |
82 | Display 83 |
84 |
85 | Config 86 |
87 |
88 |
89 |
90 | 91 | 92 | 95 | {% include 'footer.html' %} -------------------------------------------------------------------------------- /webserver/templates/menu-colors.html: -------------------------------------------------------------------------------- 1 | 6 |
7 | 59 |
60 | Awesome 61 | -------------------------------------------------------------------------------- /webserver/templates/menu-footer.html: -------------------------------------------------------------------------------- 1 |
2 |

AppKit

3 |

4 | Built to match the design trends and give your page the awesome facelift it deserves. 5 |

6 |
7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 | 19 |
20 | -------------------------------------------------------------------------------- /webserver/templates/menu-share.html: -------------------------------------------------------------------------------- 1 | 6 |
7 | 36 | -------------------------------------------------------------------------------- /webserver/templates/status.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": {{enabled}}, 3 | "current_extension": "{{current_extension}}", 4 | "current_extension_class": "{{current_extension_class}}", 5 | "current_version": "{{current_version}}" 6 | } -------------------------------------------------------------------------------- /webserver/templates/view.html: -------------------------------------------------------------------------------- 1 | {% include 'header.html' %} 2 | 3 | 4 | 5 |
6 |
7 |
8 |

Pixels (Currently: {{fps}} FPS)

9 |

NeoPixel View

10 |
11 |
12 |
  Auto Reload (reloading in 5s)
13 |
14 |
15 |
16 | 17 | 18 | ON 19 | OFF 20 |
21 |
22 |
23 |

HDMI View

24 |

25 | 26 | 27 |

28 |
29 |
30 |
31 |
32 |

Image

33 |

Pixel Image View

34 |

35 | 36 |

37 |
38 |
39 |
40 | {% include 'footer.html' %} --------------------------------------------------------------------------------