Implemented tools as applets, Added Docker CCTV page, Fixed small issues

Update app.py, uuid-generator.yml, and 47 more files...
This commit is contained in:
2025-02-20 17:24:05 +01:00
parent bd96d85699
commit 0e91b5ed96
43 changed files with 889 additions and 337 deletions

View File

@@ -0,0 +1,8 @@
applets:
- id: "uuid-generator"
resources:
scripts:
- "uuid-generator.mjs"
stylesheets:
- "uuid-generator.css"

View File

@@ -0,0 +1,35 @@
projects:
- id: "circuitpython-custom-fs"
metadata:
head:
title_key: "meta.title"
description_key: "meta.description"
opengraph:
title_key: "meta.title"
description_key: "meta.description"
type: null
url: null
image_url: "/resources/NibblePoker/images/content/circuitpython-ebyte-e32/main.png"
image_type: null
twitter:
title_key: "meta.title"
description_key: "meta.description"
index:
priority: 105
enable: true
title_key: "meta.title"
preamble_key: "meta.description"
image_url: "/resources/NibblePoker/images/content/circuitpython-ebyte-e32/main.png"
image_alt_key: ""
general:
icon: "fab fa-python"
title_key: "meta.title"
subtitle_key: "article.subtitle"
tags:
- "experiments"
- "electronic"
- "python"
- "circuitpython"
languages:
- "python"

View File

@@ -1,31 +0,0 @@
head:
title_key: "meta.title"
description_key: "meta.description"
opengraph:
title_key: "meta.title"
description_key: "meta.description"
type: null
url: null
image_url: "/resources/NibblePoker/images/content/circuitpython-ebyte-e32/main.png"
image_type: null
twitter:
title_key: "meta.title"
description_key: "meta.description"
index:
priority: 105
enable: true
title_key: "meta.title"
preamble_key: "meta.description"
image_url: "/resources/NibblePoker/images/content/circuitpython-ebyte-e32/main.png"
image_alt_key: ""
general:
icon: "fab fa-python"
title_key: "meta.title"
subtitle_key: "article.subtitle"
tags:
- "experiments"
- "electronic"
- "python"
- "circuitpython"
languages:
- "python"

View File

@@ -0,0 +1,34 @@
projects:
- id: "docker-mini-cctv-nvr"
metadata:
head:
title_key: "meta.title"
description_key: "meta.description"
opengraph:
title_key: "meta.title"
description_key: "meta.description"
type: null
url: null
image_url: "/resources/NibblePoker/images/content/docker-mini-cctv-nvr/main.png"
image_type: null
twitter:
title_key: "meta.title"
description_key: "meta.description"
index:
priority: 105
enable: true
title_key: "meta.title"
preamble_key: "meta.description"
image_url: "/resources/NibblePoker/images/content/docker-mini-cctv-nvr/main.png"
image_alt_key: ""
general:
icon: "fab fa-docker"
title_key: "meta.title"
subtitle_key: "article.subtitle"
tags:
- "docker"
languages:
- "docker"
- "php"
- "python"

View File

@@ -42,13 +42,13 @@
abs_href: "/tools"
icon: fad fa-toolbox
active_id: tools
has_new_until_utc: 0
has_new_until_utc: 1760986472
- title_key: text.downloads
raw_href: "https://files.nibblepoker.lu/"
icon: fad fa-download
active_id: ""
has_new_until_utc: 1760986472
has_new_until_utc: 0
-

View File

@@ -0,0 +1,72 @@
# EN - Docker Mini CCTV NVR
meta.title: "Mini Dockerized CCTV NVR"
meta.description: "Mini docker stack that allows you to easily record, clean and serve CCTV recordings made
over RSTP while using a minimal amount of system resources."
intro.title: "Introduction"
intro.1: "A mini docker stack that allows you to easily record, clean and serve CCTV recordings made
over RSTP while using a minimal amount of system resources."
intro.2: "This stack is mainly intended to be used as a backup when other and more complete solutions crash or
need to be shutdown.This simple docker stack aims to provide you with a simple,
lightweight and robust NVR for all of your RTSP-based CCTV cameras."
preamble.title: "Preamble"
preamble.1: "This stack records the camera's streams as-is and doesn't re-encode or compress it which uses more disk space.
See \"Usage statistics example\" for an example."
preamble.2: "If served out of your LAN, the web server should be behind a secure reverse-proxy that requires authentication."
setup.title: "Setup"
setup.1: "All of the setup is done through environment variables in the docker-compose.yml file."
setup.2: "It should only take 2-3 minutes if you already have the RTSP URL on hand.<br>
If you don't have them, you should see your camera's user manual and test the URLs with VLC."
setup.camera.title: "Cameras"
setup.camera.1: "Each recording container needs to be given a RSTP stream URL and a unique folder
into which the recordings will go."
setup.camera.2: "The URL must be given via the <span class=\"code\">NP_CCTV_URL</span> environment variable,
and the output folder via a mounted volume that is mounted as <span class=\"code\">/data</span> in the container."
setup.camera.3: "This example will use the <span class=\"code\">rtsp://user:password@address:554/sub-path</span>
URL and will put its recordings in <span class=\"code\">./recordings/cam1.</span>"
setup.cleaner.title: "Cleaner"
setup.cleaner.1: "The cleaner script named cleaner.py only requires you to set 1 environment variable named
<span class=\"code\">NP_MAX_FILE_AGE_HOURS</span> to the max amount of hours any recording should be kept."
setup.cleaner.2: "If not set, the script will simply clean any recordings older than 72 hours."
setup.web.title: "Web interface"
setup.web.1: "The web interface provides more customization options, but at its core,
it only requires the camera's environment variables to be set."
setup.web.2: "Each camera requires one of the following environment variable:<br>
&nbsp;&nbsp;<span class=\"code\">NP_CAM_&lt;camId&gt; = &lt;Camera's name&gt;</span>"
setup.web.3: "Here is an example for <span class=\"code\">cam1</span> if named as <span class=\"code\">Camera #1</span>:<br>
&nbsp;&nbsp;<span class=\"code\">NP_CAM_cam1 = Camera #1</span>"
setup.web.vars.title: "Other variables"
setup.web.vars.description.title: "Page's title"
setup.web.vars.description.footer: "Page's footer HTML content"
startup.title: "Startup"
startup.1: "Once you have finished setting up the stack, you can simply run the following command:"
#docker-compose up --build -d
screenshots.title: "Screenshots"
statistics.title: "Usage statistics example"
statistics.1: "NanoPi R4S 4GB"
statistics.1.1: "Uses 0.008 kWh / 8 Watts with other containers and USB HDD & USB SSD"
statistics.2: "4 IP Cameras"
statistics.2.1: "All H.256 4k RTSP TCP streams"
statistics.2.2: "Around 220 GB of data per day"
statistics.2.2.1: "Around 20.4 Mbit/s or 2.6 MB/s"
statistics.3: "Less than 200MB of RAM usage"
statistics.3.1: "~32 MB per recorder"
statistics.3.2: "4 MB for cleaner"
statistics.3.3: "4 MB for web server"
statistics.4: "Uses ~10% of CPU on average over 6 cores"
statistics.4.1: "Average of 15% per recorder"
statistics.4.2: "Average of 1-5% on cleaner and web server"
license.title: "License"
license.1: "This software, as well as the Simplette CSS Stylesheet used for the web interface are both licensed under Unlicense."
commons.example: "Example"

View File

@@ -1,4 +1,17 @@
# EN - UUID Generator
option.count: "UUID/GUID count"
meta.title: "UUID Generator"
type.label: "UUID Type"
type.uuid4: "UUID4 / GUID4"
option.count: "UUID Count"
option.hyphen: "Add hyphens"
option.guid_brackets: "Add GUID brackets"
generate: "Generate"
download.raw: "Raw"
download.json: "JSON"
download.yaml: "YAML"

View File

@@ -0,0 +1,5 @@
# FR - Docker Mini CCTV NVR
meta.title: "Mini Dockerized CCTV NVR"
meta.description: "Mini docker stack that allows you to easily record, clean and serve CCTV recordings made
over RSTP while using a minimal amount of system resources."

View File

@@ -1,4 +1,17 @@
# FR - UUID Generator
meta.title: "Générateur d'UUID"
type.label: "Type d'UUID"
type.uuid4: "UUID4 / GUID4"
option.count: "Nombre d'UUID/GUID"
option.hyphen: "Ajouter trait d'union"
option.guid_brackets: "Ajouter accolades pour GUID"
generate: "Générer"
download.raw: "Brut"
download.json: "JSON"
download.yaml: "YAML"

View File

@@ -25,6 +25,6 @@ metadata:
subtitle_key: "article.subtitle"
tags:
- "undefined"
data:
resources:
scripts:
- "epr_main.js"

View File

@@ -25,7 +25,7 @@ metadata:
subtitle_key: "article.subtitle"
tags:
- "undefined"
data:
resources:
scripts:
- "svg-to-png.mjs"
stylesheets:

View File

@@ -1,32 +1,31 @@
metadata:
head:
title_key: "meta.title"
description_key: "meta.description"
opengraph:
title_key: "meta.title"
description_key: "meta.description"
type: null
url: null
image_url: "/resources/NibblePoker/images/tools/excel-password-remover/excel-password-remover.png"
image_type: null
twitter:
title_key: "meta.title"
description_key: "meta.description"
index:
priority: 100
enable: true
title_key: "meta.title"
preamble_key: "meta.description"
image_url: "/resources/NibblePoker/images/tools/excel-password-remover/excel-password-remover.png"
image_alt_key: ""
general:
icon: "fab fa-python"
title_key: "meta.title"
subtitle_key: "article.subtitle"
tags:
- "undefined"
data:
scripts:
- "uuid-generator.mjs"
stylesheets:
- "uuid-generator.css"
tools:
- id: "uuid-generator"
applet_id: "uuid-generator"
metadata:
head:
title_key: "meta.title"
description_key: "meta.description"
opengraph:
title_key: "meta.title"
description_key: "meta.description"
type: null
url: null
image_url: "/resources/NibblePoker/images/tools/excel-password-remover/excel-password-remover.png"
image_type: null
twitter:
title_key: "meta.title"
description_key: "meta.description"
index:
priority: 100
enable: true
title_key: "meta.title"
preamble_key: "meta.description"
image_url: "/resources/NibblePoker/images/tools/excel-password-remover/excel-password-remover.png"
image_alt_key: ""
general:
icon: "fab fa-python"
title_key: "meta.title"
subtitle_key: "article.subtitle"
tags:
- "undefined"