Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f00c8b9210 | ||
|
|
b41a9daec8 | ||
|
|
c548fd058d | ||
|
|
480a523ef6 | ||
|
|
6d07c2c1d3 | ||
|
|
35121e37f8 | ||
|
|
326c39f8e8 | ||
|
|
86e7f97d87 | ||
|
|
75ed663602 | ||
|
|
671d5e3686 | ||
|
|
afdf95a16c | ||
|
|
ba3c43975e |
No files matched your search
|
Before Width: | Height: | Size: 330 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 5.7 KiB |
@@ -82,11 +82,10 @@ dotenv_quote() {
|
||||
}
|
||||
|
||||
shell_quote() {
|
||||
# Single-quote for safe injection in shell code
|
||||
local s="$1"
|
||||
s="${s//\\/\\\\}"
|
||||
s="${s//\'/\'\"\'\"\' }"
|
||||
s="${s% }"
|
||||
# Single-quote for safe injection in shell code.
|
||||
# Inside single quotes only the single quote needs escaping ('->'\'').
|
||||
# Do NOT escape backslashes: they are literal inside single quotes.
|
||||
local s="${1//\'/\'\\\'\'}"
|
||||
printf "'%s'" "$s"
|
||||
}
|
||||
|
||||
@@ -166,9 +165,9 @@ export_var() {
|
||||
# Runtime environment (no eval, safe for special chars)
|
||||
export "$k=$v"
|
||||
|
||||
# S6 environment (preferred for services)
|
||||
# S6 environment (preferred for services); best-effort, tolerate RO mounts
|
||||
if [[ -d /var/run/s6/container_environment ]]; then
|
||||
printf '%s' "$v" > "/var/run/s6/container_environment/$k"
|
||||
printf '%s' "$v" > "/var/run/s6/container_environment/$k" || true
|
||||
fi
|
||||
|
||||
# Queue for .env and /etc/environment (written once, idempotent)
|
||||
@@ -180,6 +179,7 @@ export_var() {
|
||||
|
||||
################################################################################
|
||||
# JSON parsing (jq bug fixed: use "? //", not "?//")
|
||||
# Order: 1) top-level addon options first, 2) env_vars second (can override)
|
||||
################################################################################
|
||||
while IFS= read -r -d $'\0' k && IFS= read -r v; do
|
||||
export_var "$k" "$v"
|
||||
@@ -189,7 +189,15 @@ done < <(
|
||||
|
||||
. as $root
|
||||
| (
|
||||
# 1) env_vars[] (supported shapes)
|
||||
# 1) top-level scalar options excluding env_vars (processed first)
|
||||
$root
|
||||
| to_entries[]
|
||||
| select(.key != "env_vars")
|
||||
| select((.value|type) != "object" and (.value|type) != "array" and (.value|type) != "null")
|
||||
| emit(.key; .value)
|
||||
),
|
||||
(
|
||||
# 2) env_vars[] (processed second, overrides addon options if same key)
|
||||
($root.env_vars? // [])[] as $e
|
||||
| if ($e|type) == "object" then
|
||||
if ($e|has("name") and has("value")) then
|
||||
@@ -205,31 +213,36 @@ done < <(
|
||||
| emit($m.k; $m.v)
|
||||
else empty end
|
||||
end
|
||||
),
|
||||
(
|
||||
# 2) top-level scalar options excluding env_vars
|
||||
$root
|
||||
| to_entries[]
|
||||
| select(.key != "env_vars")
|
||||
| select((.value|type) != "object" and (.value|type) != "array" and (.value|type) != "null")
|
||||
| emit(.key; .value)
|
||||
)
|
||||
' "$JSONSOURCE"
|
||||
)
|
||||
|
||||
################################################################################
|
||||
# Write .env and /etc/environment (idempotent: replace whole file content)
|
||||
# Write .env and /etc/environment (idempotent: replace only our block,
|
||||
# preserving any pre-existing content from the upstream image / system).
|
||||
# Notes:
|
||||
# - /.env is commonly used by apps expecting dotenv format
|
||||
# - /etc/environment is read by PAM/system tooling; KEY="value" is acceptable
|
||||
################################################################################
|
||||
{
|
||||
echo "$BLOCK_BEGIN"
|
||||
cat "$KV_FILE"
|
||||
echo "$BLOCK_END"
|
||||
} > "$ENV_FILE.tmp"
|
||||
mv "$ENV_FILE.tmp" "$ENV_FILE"
|
||||
cp "$ENV_FILE" "$ETC_ENV_FILE"
|
||||
update_env_file() {
|
||||
local f="$1" tmp
|
||||
tmp="$(mktemp_safe)"
|
||||
if [[ -f "$f" ]]; then
|
||||
awk -v b="$BLOCK_BEGIN" -v e="$BLOCK_END" '
|
||||
$0==b { skip=1; next }
|
||||
$0==e { skip=0; next }
|
||||
!skip
|
||||
' "$f" > "$tmp"
|
||||
fi
|
||||
{
|
||||
echo "$BLOCK_BEGIN"
|
||||
cat "$KV_FILE"
|
||||
echo "$BLOCK_END"
|
||||
} >> "$tmp"
|
||||
mv "$tmp" "$f"
|
||||
}
|
||||
update_env_file "$ENV_FILE"
|
||||
update_env_file "$ETC_ENV_FILE"
|
||||
|
||||
################################################################################
|
||||
# Inject into scripts and shells (best-effort)
|
||||
|
||||
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.5 KiB |
@@ -1,3 +1,5 @@
|
||||
## 2.3.2-2 (18-05-2026)
|
||||
- Minor bugs fixed
|
||||
|
||||
## 2.3.2 (2026-04-23)
|
||||
- Update to latest version from firefly-iii/data-importer (changelog : https://github.com/firefly-iii/data-importer/releases)
|
||||
|
||||
@@ -173,7 +173,7 @@ RUN \
|
||||
fi
|
||||
|
||||
ENV HEALTH_PORT="8080" \
|
||||
HEALTH_URL="/health"
|
||||
HEALTH_URL="/healthcheck"
|
||||
HEALTHCHECK \
|
||||
--interval=5s \
|
||||
--retries=5 \
|
||||
|
||||
@@ -101,5 +101,5 @@ schema:
|
||||
slug: fireflyiii_data_importer
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
version: "2.3.2"
|
||||
version: "2.3.2-3"
|
||||
webui: "[PROTO:ssl]://[HOST]:[PORT:8080]"
|
||||
@@ -54,7 +54,7 @@ if bashio::config.has_value 'Updates'; then
|
||||
chmod 755 /etc/cron."${FREQUENCY}"/cronupdate
|
||||
|
||||
# Sets cron to run with www-data user
|
||||
# sed -i 's|root|www-data|g' /etc/crontab
|
||||
sed -i 's|root|www-data|g' /etc/crontab
|
||||
|
||||
# Starts cron
|
||||
service cron start
|
||||
|
||||
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -1,11 +1,23 @@
|
||||
## 0.139.3 (11-05-2026)
|
||||
- Minor bugs fixed
|
||||
## 0.138.0 (24-04-2026)
|
||||
- Minor bugs fixed
|
||||
## 0.137.0 (13-04-2026)
|
||||
## 0.140.1 (18-05-2026)
|
||||
- Minor bugs fixed
|
||||
# Changelog
|
||||
|
||||
## 0.140.1
|
||||
- Bump version to 0.140.1
|
||||
- Detailed changes https://github.com/manyfold3d/manyfold/compare/v0.139.3...v0.140.1
|
||||
|
||||
## 0.139.3 (11-05-2026)
|
||||
|
||||
- Minor bugs fixed
|
||||
|
||||
## 0.138.0 (24-04-2026)
|
||||
|
||||
- Minor bugs fixed
|
||||
|
||||
## 0.137.0 (13-04-2026)
|
||||
|
||||
- Minor bugs fixed
|
||||
|
||||
## 0.137.0
|
||||
|
||||
- Bumped upstream Manyfold image to `ghcr.io/manyfold3d/manyfold-solo:0.137.0` for both `amd64` and `aarch64`.
|
||||
|
||||
@@ -65,20 +65,33 @@ Local development alternative on the HA host:
|
||||
- `max_file_upload_size`: Max uploaded archive size in bytes.
|
||||
- `max_file_extract_size`: Max extracted archive size in bytes.
|
||||
|
||||
## Small server tuning
|
||||
### Raspberry Pi (single-user) example
|
||||
|
||||
For low-memory HAOS hosts, start with:
|
||||
For a Raspberry Pi 4 or Pi 5 running a single-user Manyfold instance with modest library sizes:
|
||||
|
||||
```yaml
|
||||
puid: 1000
|
||||
pgid: 1000
|
||||
multiuser: false
|
||||
library_path: /share/manyfold/models
|
||||
thumbnails_path: /config/thumbnails
|
||||
log_level: info
|
||||
web_concurrency: 1
|
||||
rails_max_threads: 5
|
||||
default_worker_concurrency: 2
|
||||
rails_max_threads: 4
|
||||
default_worker_concurrency: 1
|
||||
performance_worker_concurrency: 1
|
||||
max_file_upload_size: 268435456
|
||||
max_file_extract_size: 536870912
|
||||
max_file_upload_size: 134217728
|
||||
max_file_extract_size: 268435456
|
||||
```
|
||||
|
||||
Then restart the add-on and increase gradually only if needed.
|
||||
**Rationale:**
|
||||
- `web_concurrency: 1` — Single Puma worker (one process) saves RAM on Pi.
|
||||
- `rails_max_threads: 4` — Four threads per worker is sufficient for single-user browsing.
|
||||
- `default_worker_concurrency: 1` — Serial background job processing (indexing, thumbnail generation).
|
||||
- `performance_worker_concurrency: 1` — Single performance worker to avoid CPU thrashing during STL processing.
|
||||
- `multiuser: false` — Disable authentication/multiuser features for personal use.
|
||||
- `max_file_upload_size: 128 MB` — Reasonable limit for Pi storage and network.
|
||||
- `max_file_extract_size: 256 MB` — Extracted archives stay manageable.
|
||||
|
||||
## Fix root warning (PUID/PGID)
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
name: "Manyfold"
|
||||
slug: manyfold
|
||||
description: "Manyfold 3D model manager as a Home Assistant add-on, using the upstream image with configurable library/index paths."
|
||||
version: "0.139.3"
|
||||
version: "0.140.1"
|
||||
url: "https://github.com/alexbelgium/hassio-addons/tree/master/manyfold"
|
||||
image: ghcr.io/alexbelgium/manyfold-{arch}
|
||||
arch:
|
||||
|
||||
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 931 B |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 931 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.4 KiB |