Skip to content

adding support for obico - #2516

Open
a55uka wants to merge 3 commits into
community-scripts:mainfrom
a55uka:feat/obico
Open

a55uka wants to merge 3 commits into
community-scripts:mainfrom
a55uka:feat/obico

Conversation

@a55uka

@a55uka a55uka commented Nov 9, 2026 •

Copy link
Copy Markdown

✍️ Description

Adds a bare-metal install for the Obico self-hosted server - requested in community-scripts/ProxmoxVE#1581).

I have been running this with Bambuddy and the Obico integration all working for the past couple weeks!

🔗 Related PR / Issue

Link: community-scripts/ProxmoxVE#1581

✅ Prerequisites (X in brackets)

  • Self-review completed – Code follows project standards.
  • Tested thoroughly – Changes work as expected.
  • No breaking changes – Existing functionality remains intact.
  • No security risks – No hardcoded secrets, unnecessary privilege escalations, or permission issues.

🏗️ arm64 Support (X in brackets)

  • arm64 not tested - Assumed to work on arm64, but testing has not been done. All dependencies publish aarch64 pkgs and upstream ships arm64 images; var_arm64 is left unset.

🖥️ Tested on (X in brackets)

  • Proxmox VE – Created on a Proxmox VE host and the app works.
  • Incus – Created on an Incus host and the app works.

🛠️ Type of Change (X in brackets)

  • 🆕 New script – A fully functional and tested script or script set.

🔍 Code & Security Review (X in brackets)

  • Follows CODE-AUDIT.md & CONTRIBUTING.md guidelines
  • Uses correct script structure (AppName.sh, AppName-install.sh, AppName.json)
  • No hardcoded credentials
  • No Docker / Docker Compose – The application is installed bare-metal; Docker is not used.
  • No git pull – Updates use fetch_and_deploy_gh_branch (upstream publishes no releases/tags)

📋 Additional Information (optional)

  • The ML API is bound to 0.0.0.0:3333 because external clients (Bambuddy's Obico integration) call it directly; a generated ML_API_TOKEN in /opt/obico/.env gates every endpoint but the health check.
  • The default admin (root@example.com / supersecret) comes from an upstream migration; it is documented in the JSON notes with a change-it warning.
  • First run executes migrate, collectstatic, and manage.py site --add "$LOCAL_IP:3334" (the documented post-install step), then waits on /hc/ before reporting success.

📦 Application Requirements (for new scripts)

⚠️ Do not remove this section.
It is used by automated PR validation checks.
If this PR is not a new script submission, leave the checkboxes unchecked.

Required for 🆕 New script submissions.
Pull requests that do not meet these requirements may be closed without review.

  • The application is at least 6 months old - repo created 2020
  • The application is actively maintained - release branch promoted through 2026-10
  • The application has 1,000+ GitHub stars - ~1.9k
  • Official release tarballs are published - distribution is the release branch with built frontend bundles checked in, which is why fetch_and_deploy_gh_branch/check_for_gh_branch are used.
  • I understand that not all scripts will be accepted due to various reasons and criteria by the community-scripts ORG

🌐 Source


🤖 AI Assistance (X in brackets)

If you used an AI tool (GitHub Copilot, Claude, ChatGPT, etc.) to write or generate any scripts in this PR, you must confirm compliance below.
Select exactly one option.

Please describe to which degree, if any, an LLM was used in creating this pull request. Name the model(s) used and, if applicable, the reasoning/thinking effort level (e.g. "Claude Sonnet 4.5, high reasoning, used to draft the install script, then manually reviewed and tested" or "No LLM used"). This is informational, not a penalty — but scripts that are clearly AI-generated and not further revised by the author to match CODE-AUDIT.md / CONTRIBUTING.md may be closed without review.

Self-hosted Obico server (AI failure detection & remote monitoring for
OctoPrint/Klipper) as bare-metal install: daphne web, celery worker+beat,
redis, and the CPU (ONNX) ml_api, deployed from the upstream release branch.

Feature request: community-scripts/ProxmoxVE#1581
Bambuddy's Obico integration calls the ML API directly on :3333
(/hc/ must answer 'ok', /p/?img= for detection), so bind it to
0.0.0.0 — ML_API_TOKEN gates everything but the health check.
Note it in the JSON metadata.
@a55uka
a55uka requested a review from a team as a code owner November 9, 2026 15:13
@github-actions

github-actions Bot commented Nov 9, 2026

Copy link
Copy Markdown
Contributor

Try this script

ct/obico.sh, run in the Proxmox VE shell or on an Incus host:

COMMUNITY_SCRIPTS_URL=https://raw.githubusercontent.com/a55uka/DevScripts/feat/obico \
bash -c "$(curl -fsSL https://raw.githubusercontent.com/a55uka/DevScripts/feat/obico/ct/obico.sh)"

COMMUNITY_SCRIPTS_URL is not optional for ct/. Fetching the ct/ script from a
branch does not tell the engine where that branch is — with bash -c "$(curl …)"
there is no file on disk for the scripts root to be derived from, so it would fall
back to upstream main and look for the install script there.

Against a core branch as well

Add COMMUNITY_SCRIPTS_CORE_URL=https://raw.githubusercontent.com/OWNER/core/BRANCH
to test an engine change at the same time. The two resolve independently.

Useful flags while testing

dev_mode=net logs every fetch with status and duration, so you can confirm the
branch is really being used. dev_mode=keep stops a failed build from deleting
the container along with the evidence.

@github-actions

github-actions Bot commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

✅ Requirements check passed. Thanks for fixing the description — the stale mark has been removed.

@github-actions github-actions Bot added requirements missing PR description misses template items; closes after 7 days unless fixed or keep-open stale new script labels Nov 9, 2026
@a55uka

a55uka commented Nov 9, 2026

Copy link
Copy Markdown
Author

sadly, no tarball release exists for obico, but nothing is built as it is just python,.

@github-actions github-actions Bot removed requirements missing PR description misses template items; closes after 7 days unless fixed or keep-open stale labels Nov 10, 2026
@michelroegl-brunner

Copy link
Copy Markdown
Member

/test

@michelroegl-brunner

Copy link
Copy Markdown
Member

/test

@github-actions

Copy link
Copy Markdown
Contributor

Proxmox script test

@michelroegl-brunner @a55uka ✅ 2/2 passed at b23163f

Script Platform Install Update Duration Detail
ct/obico.sh pve ✅ ➖ 5m46s http://10.99.0.198:3334 → 200; update: nothing to update (No update available: obico (df8190e))
ct/obico.sh incus ✅ ➖ 3m21s http://10.98.0.238:3334 → 200; update: nothing to update (No update available: obico (df8190e))
ct/obico.sh arm64 ✅ ➖ 2m35s http://10.98.0.227:3334 → 200; update: nothing to update (No update available: obico (df8190e))

ARM64 (information only, not counted): 1/1 passed.

📸 ct/obico.sh (pve) — http://10.99.0.198:3334: after install / after update

Screenshot of ct/obico.sh Screenshot of ct/obico.sh

📸 ct/obico.sh (incus) — http://10.98.0.238:3334: after install / after update

Screenshot of ct/obico.sh Screenshot of ct/obico.sh

📸 ct/obico.sh (arm64) — http://10.98.0.227:3334: after install / after update

Screenshot of ct/obico.sh Screenshot of ct/obico.sh

📄 ct/obico.sh (pve) — install log (21204 lines)
… 20801 earlier lines cut, the full log is in the run artifacts
 + certifi==2026.10.23
 + cffi==2.1.1
 + channels==4.3.2
 + channels-redis==4.3.0
 + charset-normalizer==3.5.2
 + click==8.5.0
 + click-didyoumean==0.3.1
 + click-plugins==1.1.1.2
 + click-repl==0.4.1
 + colorlog==6.12.0
 + constantly==23.10.4
 + crispy-bootstrap4==2026.2
 + cryptography==50.0.2
 + daphne==4.2.3
 + decorator==5.3.1
 + discord-webhook==1.4.1
 + distro==1.9.0
 + dj-database-url==3.1.2
 + django==5.2.19
 + django-allauth==65.21.1
 + django-channels-presence==1.0.0 (from git+https://github.com/TheSpaghettiDetective/django-channels-presence.git@24c15f229372a16c7e8d6e160de89f4817d96c3f)
 + django-cors-headers==4.9.0
 + django-crispy-forms==2.7
 + django-debug-toolbar==8.0.0
 + django-extensions==4.1
 + django-hijack==3.7.9
 + django-ipware==8.0.0
 + django-jstemplate==2.0.1
 + django-oauth-toolkit==3.4.1
 + django-qr-code==5.0.0
 + django-redis==7.0.0
 + django-safedelete==1.5.0
 + django-settings-export==1.2.1
 + django-simple-history==3.13.0
 + django-slick-reporting==1.5.0
 + django-webpack-loader==3.2.4
 + django-widget-tweaks==1.5.1
 + djangorestframework==3.18.3
 + docstring-parser==0.16
 + executing==2.3.0
 + firebase-admin==7.7.0
 + frozenlist==1.8.0
 + google-api-core==2.43.0
 + google-api-python-client==2.159.0
 + google-auth==2.37.0
 + google-auth-httplib2==0.2.0
 + google-cloud-core==2.8.0
 + google-cloud-firestore==2.34.1
 + google-cloud-storage==3.17.1
 + google-crc32c==1.9.0
 + google-resumable-media==2.11.0
 + googleapis-common-protos==1.76.0
 + grpcio==1.85.0
 + grpcio-status==1.85.0
 + gunicorn==26.2.0
 + h11==0.16.0
 + h2==4.4.1
 + hpack==4.2.0
 + httpcore==1.0.9
 + httplib2==0.32.0
 + httpx==0.28.1
 + hyperframe==6.1.0
 + hyperlink==21.0.0
 + idna==3.20
 + importlib-metadata==8.2.0
 + incremental==24.11.0
 + inotify-simple==2.0.1
 + instructor==1.5.1
 + ipdb==0.13.13
 + ipython==9.17.1
 + ipython-pygments-lexers==1.1.1
 + jedi==0.20.1
 + jiter==0.5.0
 + jsonfield==3.2.0
 + jwcrypto==1.6.1
 + kombu==5.6.2
 + langfuse==4.15.4
 + markdown==3.11.2
 + markdown-it-py==4.2.0
 + matplotlib-inline==0.2.2
 + mdurl==0.1.2
 + msgpack==1.2.4
 + multidict==6.9.1
 + newrelic==14.1.0
 + nplusone==1.0.0
 + numpy==1.26.3
 + oauth2client==4.1.3
 + oauthlib==4.0.1
 + openai==1.57.2
 + opentelemetry-api==1.45.1
 + opentelemetry-exporter-http-transport==0.66b1
 + opentelemetry-exporter-otlp-common==0.66b1
 + opentelemetry-exporter-otlp-proto-common==1.45.1
 + opentelemetry-exporter-otlp-proto-http==1.45.1
 + opentelemetry-proto==1.45.1
 + opentelemetry-sdk==1.45.1
 + opentelemetry-semantic-conventions==0.66b1
 + packaging==26.3
 + parso==0.8.7
 + pexpect==4.9.0
 + phonenumbers==9.0.42
 + pillow==13.0.0
 + priority==1.3.0
 + prompt-toolkit==3.0.43
 + propcache==0.5.4
 + proto-plus==1.29.0
 + protobuf==7.36.2
 + psutil==7.2.2
 + psycopg2-binary==2.9.13
 + ptyprocess==0.7.0
 + pure-eval==0.2.4
 + pushbullet-py==0.12.0
 + pyasn1==0.6.5
 + pyasn1-modules==0.4.2
 + pycparser==3.12
 + pydantic==2.8.0
 + pydantic-core==2.20.0
 + pygments==2.21.0
 + pyjwt==2.15.1
 + pyopenssl==26.4.0
 + pyparsing==3.3.3
 + pytelegrambotapi==4.37.1
 + python-dateutil==3.0.0
 + python-ipware==4.1.1
 + python-magic==0.4.27
 + pytz==2026.5
 + pyyaml==6.0.3
 + redis==6.4.0
 + requests==2.34.2
 + requests-oauthlib==2.0.0
 + requests-toolbelt==1.0.0
 + rich==13.9.4
 + rsa==4.9.1
 + segno==1.6.6
 + sentry-sdk==2.73.0
 + service-identity==26.1.0
 + setuptools==75.8.0
 + shellingham==1.5.4
 + simplejson==4.2.0
 + six==1.17.0
 + sniffio==1.3.1
 + sqlparse==0.6.1
 + stack-data==0.6.3
 + tenacity==8.5.0
 + tqdm==4.70.1
 + traitlets==5.16.1
 + twilio==9.12.0
 + twisted==26.4.0
 + txaio==26.6.1
 + typer==0.27.3
 + typing-extensions==4.16.0
 + tzdata==2026.5
 + tzlocal==5.4.5
 + ujson==6.0.0
 + uritemplate==4.2.0
 + urllib3==2.8.0
 + vine==5.1.0
 + wcwidth==0.9.4
 + websocket-client==1.9.2
 + whitenoise==6.12.0
 + wrapt==2.5.1
 + yarl==1.25.1
 + zipp==4.1.2
 + zope-interface==8.7
Checked 1 package in 6ms
Using CPython 3.12.16
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
Resolved 25 packages in 1.15s
   Building newrelic==4.12.0.113
Downloading zstandard (5.3MiB)
Downloading numpy (15.8MiB)
Downloading opencv-python-headless (51.5MiB)
Downloading onnxruntime (22.7MiB)
 Downloaded zstandard
 Downloaded numpy
 Downloaded onnxruntime
      Built newrelic==4.12.0.113
 Downloaded opencv-python-headless
Prepared 16 packages in 1.36s
Installed 25 packages in 29ms
 + backoff==2.2.1
 + blinker==1.9.0
 + brotli==1.2.1
 + certifi==2026.10.23
 + charset-normalizer==3.5.2
 + click==8.5.1
 + flask==2.3.3
 + flask-compress==1.15
 + flatbuffers==25.12.19
 + gunicorn==21.2.0
 + idna==3.20
 + itsdangerous==2.2.0
 + jinja2==3.1.6
 + markupsafe==3.0.4
 + newrelic==4.12.0.113
 + numpy==2.2.6
 + onnxruntime==1.31.0
 + opencv-python-headless==4.12.0.88
 + packaging==26.3
 + protobuf==7.36.2
 + requests==2.31.0
 + sentry-sdk==1.40.3
 + urllib3==2.8.0
 + werkzeug==3.1.9
 + zstandard==0.25.0
[2026-11-11 16:35:39] [OK] Set up Python Environments
[2026-11-11 16:35:40] [INFO] Installing Moonraker Metadata Library
Cloning into '/opt/moonraker'...
Note: switching to 'f735c0419444848b59342a98ad3532eef123ea46'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
  git switch -c <new-branch-name>
Or undo this operation with:
  git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at f735c04 power: fix 'address' option percent encoding
[2026-11-11 16:35:43] [OK] Installed Moonraker Metadata Library
[2026-11-11 16:35:43] [INFO] Downloading Failure Detection Model
[2026-11-11 16:35:46] [OK] Downloaded Failure Detection Model
[2026-11-11 16:35:46] [INFO] Configuring Obico
[2026-11-11 16:35:46] [OK] Configured Obico
[2026-11-11 16:35:46] [INFO] Initializing Database
/opt/obico/backend/.venv/lib/python3.12/site-packages/pydantic/_internal/_fields.py:161: UserWarning: Field "model_analysis" has conflict with protected namespace "model_".
You may be able to resolve this warning by setting `model_config['protected_namespaces'] = ()`.
  warnings.warn(
System check identified some issues:
WARNINGS:
app.User: (auth.W004) 'User.email' is named as the 'USERNAME_FIELD', but it is not unique.
	HINT: Ensure that your authentication backend(s) can handle non-unique usernames.
Operations to perform:
  Apply all migrations: account, admin, app, auth, channels_presence, contenttypes, oauth2_provider, sessions, sites, socialaccount
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0001_initial... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying app.0001_initial... OK
  Applying account.0001_initial... OK
  Applying account.0002_email_max_length... OK
  Applying account.0003_alter_emailaddress_create_unique_verified_email... OK
  Applying account.0004_alter_emailaddress_drop_unique_email... OK
  Applying account.0005_emailaddress_idx_upper_email... OK
  Applying account.0006_emailaddress_lower... OK
  Applying account.0007_emailaddress_idx_email... OK
  Applying account.0008_emailaddress_unique_primary_email_fixup... OK
  Applying account.0009_emailaddress_unique_primary_email... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying sites.0001_initial... OK
  Applying sites.0002_alter_domain_unique... OK
  Applying app.0002_seed_data_2247... OK
  Applying app.0003_auto_20190202_1354... OK
  Applying app.0004_auto_20190210_1254... OK
  Applying app.0005_auto_20190219_2337... OK
  Applying app.0006_bed_heater_off_default_false... OK
  Applying app.0007_add_phone_num_to_user... OK
  Applying app.0008_create_printer_preidction... OK
  Applying app.0009_add_detective_sensitivity_to_printer... OK
  Applying app.0010_auto_20190303_2125... OK
  Applying app.0011_print_prediction_json_url... OK
  Applying app.0012_auto_20190323_2103... OK
  Applying app.0013_add_alert_fields_to_print... OK
  Applying app.0014_remove_print_fields_from_printer... OK
  Applying app.0015_print_alert_muted_at... OK
  Applying app.0016_add_index_json_url_to_print... OK
  Applying app.0017_user_pushbullet_access_token... OK
  Applying app.0018_add_alert_overwrite_to_print... OK
  Applying app.0019_usercredit... OK
  Applying app.0020_user_telegram_chat_id... OK
  Applying app.0021_make_printer_id_nullable_in_print... OK
  Applying app.0022_auto_20190821_2145... OK
  Applying app.0023_add_consented_at_to_user... OK
  Applying app.0024_auto_20191107_1903... OK
  Applying app.0025_auto_20191107_2013... OK
  Applying app.0026_auto_20191110_1315... OK
  Applying app.0027_add_account_status_to_user... OK
  Applying app.0028_sharedresource... OK
  Applying app.0029_auto_20191212_2101... OK
  Applying app.0030_auto_20191213_0510... OK
  Applying app.0031_auto_20191215_2332... OK
  Applying app.0032_gcodefile... OK
  Applying app.0033_user_slack_access_token... OK
  Applying app.0034_auto_20200311_1805... OK
  Applying app.0035_auto_20200522_0843... OK
  Applying app.0036_auto_20200612_2224... OK
  Applying app.0037_auto_20200629_0127... OK
  Applying app.0038_printshotfeedback_persisted_at... OK
  Applying app.0039_auto_20200728_2028... OK
  Applying app.0040_auto_20201123_0452... OK
  Applying app.0041_auto_20201126_0331... OK
  Applying app.0042_auto_20201202_1937... OK
  Applying app.0043_auto_20201212_0327... OK
  Applying app.0044_auto_20210105_0438... OK
  Applying app.0045_verification_code... OK
  Applying app.0046_auto_20210119_1739... OK
  Applying app.0047_user_pushover_tokens... OK
  Applying app.0048_auto_20210228_1959... OK
  Applying app.0049_auto_20210315_0111... OK
  Applying app.0050_auto_20210325_1318... OK
  Applying app.0051_auto_20210430_1731... OK
  Applying app.0052_auto_20210506_0031... OK
  Applying app.0053_auto_20210925_2331... OK
  Applying app.0054_auto_20211017_1833... OK
  Applying app.0055_octoprinttunnel... OK
  Applying app.0056_auto_20220109_1725... OK
  Applying app.0057_auto_20220112_1613... OK
  Applying app.0058_auto_20220202_0841... OK
  Applying app.0059_user_tunnel_cap_multiplier... OK
  Applying app.0060_user_last_active_at... OK
  Applying app.0061_auto_20220215_1206... OK
  Applying app.0062_auto_20220305_0518... OK
  Applying app.0063_auto_20220318_2317... OK
  Applying app.0064_notificationsetting... OK
  Applying app.0065_auto_20220602_0037... OK
  Applying app.0066_auto_20220822_0428... OK
  Applying app.0067_auto_20220920_0203... OK
  Applying app.0068_remove_printevent_alert_muted... OK
  Applying app.0069_auto_20220922_0039... OK
  Applying app.0070_print_g_code_file... OK
  Applying app.0071_auto_20221122_2103... OK
  Applying app.0072_auto_20221123_2032... OK
  Applying app.0073_auto_20230128_0217... OK
  Applying app.0074_auto_20231009_2220... OK
  Applying app.0075_notificationsetting_notify_on_print_pause_and_more... OK
  Applying app.0076_remove_notificationsetting_notify_on_other_print_events... OK
  Applying app.0077_alter_user_options_user_username_alter_user_email_and_more... OK
  Applying app.0078_remove_email_unique_constraint... OK
  Applying app.0079_set_django_site_localhost_3334... OK
  Applying app.0080_firstlayerinspection_firstlayerinspectionimage... OK
  Applying app.0081_firstlayerinspection_poster_url... OK
  Applying app.0082_printer_detection_bending_factor... OK
  Applying app.0083_jusprinchat... OK
  Applying app.0084_jusprinaicredit...Created AI credit records for 1 existing users with unlimited quota
 OK
  Applying app.0085_printerprediction_normalized_p... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying channels_presence.0001_initial... OK
  Applying oauth2_provider.0001_initial... OK
  Applying oauth2_provider.0002_auto_20190406_1805... OK
  Applying oauth2_provider.0003_auto_20201211_1314... OK
  Applying oauth2_provider.0004_auto_20200902_2022... OK
  Applying oauth2_provider.0005_auto_20211222_2352... OK
  Applying oauth2_provider.0006_alter_application_client_secret... OK
  Applying oauth2_provider.0007_application_post_logout_redirect_uris... OK
  Applying oauth2_provider.0008_alter_accesstoken_token... OK
  Applying oauth2_provider.0009_add_hash_client_secret... OK
  Applying oauth2_provider.0010_application_allowed_origins... OK
  Applying oauth2_provider.0011_refreshtoken_token_family... OK
  Applying oauth2_provider.0012_add_token_checksum... OK
  Applying oauth2_provider.0013_alter_application_authorization_grant_type_device... OK
  Applying oauth2_provider.0014_alter_help_text... OK
  Applying oauth2_provider.0015_refreshtoken_token_checksum... OK
  Applying oauth2_provider.0016_alter_devicegrant_scope... OK
  Applying oauth2_provider.0017_application_dcr_created... OK
  Applying oauth2_provider.0018_resource_indicators... OK
  Applying oauth2_provider.0019_application_registration_source... OK
  Applying oauth2_provider.0020_cimd_application_fields... OK
  Applying oauth2_provider.0021_translatable_field_labels... OK
  Applying oauth2_provider.0022_refreshtoken_token_family_index... OK
  Applying sessions.0001_initial... OK
  Applying socialaccount.0001_initial... OK
  Applying socialaccount.0002_token_max_lengths... OK
  Applying socialaccount.0003_extra_data_default_dict... OK
  Applying socialaccount.0004_app_provider_id_settings... OK
  Applying socialaccount.0005_socialtoken_nullable_app... OK
  Applying socialaccount.0006_alter_socialaccount_extra_data... OK
344 static files copied to '/opt/obico/backend/static_build', 1200 post-processed.
/opt/obico/backend/.venv/lib/python3.12/site-packages/pydantic/_internal/_fields.py:161: UserWarning: Field "model_analysis" has conflict with protected namespace "model_".
You may be able to resolve this warning by setting `model_config['protected_namespaces'] = ()`.
  warnings.warn(
System check identified some issues:
WARNINGS:
app.User: (auth.W004) 'User.email' is named as the 'USERNAME_FIELD', but it is not unique.
	HINT: Ensure that your authentication backend(s) can handle non-unique usernames.
Site "10.99.0.198:3334" created.
[2026-11-11 16:36:42] [OK] Initialized Database
[2026-11-11 16:36:42] [INFO] Creating Services
[2026-11-11 16:36:42] [OK] Created Services
[2026-11-11 16:36:43] [INFO] Waiting for Obico to start
[2026-11-11 16:36:49] [OK] Obico is running
[2026-11-11 16:36:49] [INFO] Customizing Container
[2026-11-11 16:36:50] [OK] Customized Container
[2026-11-11 16:36:50] [INFO] Cleaning up
Reading package lists...
Building dependency tree...
Reading state information...
Summary:
  Upgrading: 0, Installing: 0, Removing: 0, Not Upgrading: 0
[2026-11-11 16:36:52] [OK] Cleaned
🔄 ct/obico.sh (pve) — update log (22 lines)
curl: (22) The requested URL returned error: 404
curl: (22) The requested URL returned error: 404
   ______                                      _ __           _____           _       __
  / ____/___  ____ ___  ____ ___  __  ______  (_) /___  __   / ___/__________(_)___  / /______
 / /   / __ \/ __ `__ \/ __ `__ \/ / / / __ \/ / __/ / / /   \__ \/ ___/ ___/ / __ \/ __/ ___/
/ /___/ /_/ / / / / / / / / / / / /_/ / / / / / /_/ /_/ /   ___/ / /__/ /  / / /_/ / /_(__  )
\____/\____/_/ /_/ /_/_/ /_/ /_/\__,_/_/ /_/_/\__/\__, /   /____/\___/_/  /_/ .___/\__/____/
                                                 /____/                    /_/
  Obico
curl: (22) The requested URL returned error: 404
curl: (22) The requested URL returned error: 404
   ______                                      _ __           _____           _       __
  / ____/___  ____ ___  ____ ___  __  ______  (_) /___  __   / ___/__________(_)___  / /______
 / /   / __ \/ __ `__ \/ __ `__ \/ / / / __ \/ / __/ / / /   \__ \/ ___/ ___/ / __ \/ __/ ___/
/ /___/ /_/ / / / / / / / / / / / /_/ / / / / / /_/ /_/ /   ___/ / /__/ /  / / /_/ / /_(__  )
\____/\____/_/ /_/ /_/_/ /_/ /_/\__,_/_/ /_/_/\__/\__, /   /____/\___/_/  /_/ .___/\__/____/
                                                 /____/                    /_/
  Obico
  ⏳   Checking for update: obico
  ✔️  No update available: obico (df8190e)
  ⏳   Cleaning up
  ✔️  Cleaned
📄 ct/obico.sh (incus) — install log (13262 lines)
… 12847 earlier lines cut, the full log is in the run artifacts
 + authy==2.2.6
 + autobahn==26.10.2
 + automat==25.4.16
 + backoff==2.2.1
 + billiard==4.3.1
 + blinker==1.9.0
 + brotli==1.2.1
 + bson==0.5.10
 + cachecontrol==0.14.4
 + cachetools==5.5.2
 + cbor2==6.1.5
 + celery==5.6.3
 + certifi==2026.10.23
 + cffi==2.1.1
 + channels==4.3.2
 + channels-redis==4.3.0
 + charset-normalizer==3.5.2
 + click==8.5.0
 + click-didyoumean==0.3.1
 + click-plugins==1.1.1.2
 + click-repl==0.4.1
 + colorlog==6.12.0
 + constantly==23.10.4
 + crispy-bootstrap4==2026.2
 + cryptography==50.0.2
 + daphne==4.2.3
 + decorator==5.3.1
 + discord-webhook==1.4.1
 + distro==1.9.0
 + dj-database-url==3.1.2
 + django==5.2.19
 + django-allauth==65.21.1
 + django-channels-presence==1.0.0 (from git+https://github.com/TheSpaghettiDetective/django-channels-presence.git@24c15f229372a16c7e8d6e160de89f4817d96c3f)
 + django-cors-headers==4.9.0
 + django-crispy-forms==2.7
 + django-debug-toolbar==8.0.0
 + django-extensions==4.1
 + django-hijack==3.7.9
 + django-ipware==8.0.0
 + django-jstemplate==2.0.1
 + django-oauth-toolkit==3.4.1
 + django-qr-code==5.0.0
 + django-redis==7.0.0
 + django-safedelete==1.5.0
 + django-settings-export==1.2.1
 + django-simple-history==3.13.0
 + django-slick-reporting==1.5.0
 + django-webpack-loader==3.2.4
 + django-widget-tweaks==1.5.1
 + djangorestframework==3.18.3
 + docstring-parser==0.16
 + executing==2.3.0
 + firebase-admin==7.7.0
 + frozenlist==1.8.0
 + google-api-core==2.43.0
 + google-api-python-client==2.159.0
 + google-auth==2.37.0
 + google-auth-httplib2==0.2.0
 + google-cloud-core==2.8.0
 + google-cloud-firestore==2.34.1
 + google-cloud-storage==3.17.1
 + google-crc32c==1.9.0
 + google-resumable-media==2.11.0
 + googleapis-common-protos==1.76.0
 + grpcio==1.85.0
 + grpcio-status==1.85.0
 + gunicorn==26.2.0
 + h11==0.16.0
 + h2==4.4.1
 + hpack==4.2.0
 + httpcore==1.0.9
 + httplib2==0.32.0
 + httpx==0.28.1
 + hyperframe==6.1.0
 + hyperlink==21.0.0
 + idna==3.20
 + importlib-metadata==8.2.0
 + incremental==24.11.0
 + inotify-simple==2.0.1
 + instructor==1.5.1
 + ipdb==0.13.13
 + ipython==9.17.1
 + ipython-pygments-lexers==1.1.1
 + jedi==0.20.1
 + jiter==0.5.0
 + jsonfield==3.2.0
 + jwcrypto==1.6.1
 + kombu==5.6.2
 + langfuse==4.15.4
 + markdown==3.11.2
 + markdown-it-py==4.2.0
 + matplotlib-inline==0.2.2
 + mdurl==0.1.2
 + msgpack==1.2.4
 + multidict==6.9.1
 + newrelic==14.1.0
 + nplusone==1.0.0
 + numpy==1.26.3
 + oauth2client==4.1.3
 + oauthlib==4.0.1
 + openai==1.57.2
 + opentelemetry-api==1.45.1
 + opentelemetry-exporter-http-transport==0.66b1
 + opentelemetry-exporter-otlp-common==0.66b1
 + opentelemetry-exporter-otlp-proto-common==1.45.1
 + opentelemetry-exporter-otlp-proto-http==1.45.1
 + opentelemetry-proto==1.45.1
 + opentelemetry-sdk==1.45.1
 + opentelemetry-semantic-conventions==0.66b1
 + packaging==26.3
 + parso==0.8.7
 + pexpect==4.9.0
 + phonenumbers==9.0.42
 + pillow==13.0.0
 + priority==1.3.0
 + prompt-toolkit==3.0.43
 + propcache==0.5.4
 + proto-plus==1.29.0
 + protobuf==7.36.2
 + psutil==7.2.2
 + psycopg2-binary==2.9.13
 + ptyprocess==0.7.0
 + pure-eval==0.2.4
 + pushbullet-py==0.12.0
 + pyasn1==0.6.5
 + pyasn1-modules==0.4.2
 + pycparser==3.12
 + pydantic==2.8.0
 + pydantic-core==2.20.0
 + pygments==2.21.0
 + pyjwt==2.15.1
 + pyopenssl==26.4.0
 + pyparsing==3.3.3
 + pytelegrambotapi==4.37.1
 + python-dateutil==3.0.0
 + python-ipware==4.1.1
 + python-magic==0.4.27
 + pytz==2026.5
 + pyyaml==6.0.3
 + redis==6.4.0
 + requests==2.34.2
 + requests-oauthlib==2.0.0
 + requests-toolbelt==1.0.0
 + rich==13.9.4
 + rsa==4.9.1
 + segno==1.6.6
 + sentry-sdk==2.73.0
 + service-identity==26.1.0
 + setuptools==75.8.0
 + shellingham==1.5.4
 + simplejson==4.2.0
 + six==1.17.0
 + sniffio==1.3.1
 + sqlparse==0.6.1
 + stack-data==0.6.3
 + tenacity==8.5.0
 + tqdm==4.70.1
 + traitlets==5.16.1
 + twilio==9.12.0
 + twisted==26.4.0
 + txaio==26.6.1
 + typer==0.27.3
 + typing-extensions==4.16.0
 + tzdata==2026.5
 + tzlocal==5.4.5
 + ujson==6.0.0
 + uritemplate==4.2.0
 + urllib3==2.8.0
 + vine==5.1.0
 + wcwidth==0.9.4
 + websocket-client==1.9.2
 + whitenoise==6.12.0
 + wrapt==2.5.1
 + yarl==1.25.1
 + zipp==4.1.2
 + zope-interface==8.7
Checked 1 package in 6ms
Using CPython 3.12.16
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
Resolved 25 packages in 1.16s
   Building newrelic==4.12.0.113
Downloading zstandard (5.3MiB)
Downloading onnxruntime (22.7MiB)
Downloading opencv-python-headless (51.5MiB)
Downloading numpy (15.8MiB)
 Downloaded zstandard
 Downloaded numpy
 Downloaded onnxruntime
      Built newrelic==4.12.0.113
 Downloaded opencv-python-headless
Prepared 16 packages in 1.45s
Installed 25 packages in 2.11s
 + backoff==2.2.1
 + blinker==1.9.0
 + brotli==1.2.1
 + certifi==2026.10.23
 + charset-normalizer==3.5.2
 + click==8.5.1
 + flask==2.3.3
 + flask-compress==1.15
 + flatbuffers==25.12.19
 + gunicorn==21.2.0
 + idna==3.20
 + itsdangerous==2.2.0
 + jinja2==3.1.6
 + markupsafe==3.0.4
 + newrelic==4.12.0.113
 + numpy==2.2.6
 + onnxruntime==1.31.0
 + opencv-python-headless==4.12.0.88
 + packaging==26.3
 + protobuf==7.36.2
 + requests==2.31.0
 + sentry-sdk==1.40.3
 + urllib3==2.8.0
 + werkzeug==3.1.9
 + zstandard==0.25.0
[2026-11-11 16:33:41] [OK] Set up Python Environments
[2026-11-11 16:33:41] [INFO] Installing Moonraker Metadata Library
Cloning into '/opt/moonraker'...
Note: switching to 'f735c0419444848b59342a98ad3532eef123ea46'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
  git switch -c <new-branch-name>
Or undo this operation with:
  git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at f735c04 power: fix 'address' option percent encoding
[2026-11-11 16:33:44] [OK] Installed Moonraker Metadata Library
[2026-11-11 16:33:44] [INFO] Downloading Failure Detection Model
[2026-11-11 16:33:47] [OK] Downloaded Failure Detection Model
[2026-11-11 16:33:47] [INFO] Configuring Obico
[2026-11-11 16:33:47] [OK] Configured Obico
[2026-11-11 16:33:47] [INFO] Initializing Database
/opt/obico/backend/.venv/lib/python3.12/site-packages/pydantic/_internal/_fields.py:161: UserWarning: Field "model_analysis" has conflict with protected namespace "model_".
You may be able to resolve this warning by setting `model_config['protected_namespaces'] = ()`.
  warnings.warn(
System check identified some issues:
WARNINGS:
app.User: (auth.W004) 'User.email' is named as the 'USERNAME_FIELD', but it is not unique.
	HINT: Ensure that your authentication backend(s) can handle non-unique usernames.
Operations to perform:
  Apply all migrations: account, admin, app, auth, channels_presence, contenttypes, oauth2_provider, sessions, sites, socialaccount
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0001_initial... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying app.0001_initial... OK
  Applying account.0001_initial... OK
  Applying account.0002_email_max_length... OK
  Applying account.0003_alter_emailaddress_create_unique_verified_email... OK
  Applying account.0004_alter_emailaddress_drop_unique_email... OK
  Applying account.0005_emailaddress_idx_upper_email... OK
  Applying account.0006_emailaddress_lower... OK
  Applying account.0007_emailaddress_idx_email... OK
  Applying account.0008_emailaddress_unique_primary_email_fixup... OK
  Applying account.0009_emailaddress_unique_primary_email... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying sites.0001_initial... OK
  Applying sites.0002_alter_domain_unique... OK
  Applying app.0002_seed_data_2247... OK
  Applying app.0003_auto_20190202_1354... OK
  Applying app.0004_auto_20190210_1254... OK
  Applying app.0005_auto_20190219_2337... OK
  Applying app.0006_bed_heater_off_default_false... OK
  Applying app.0007_add_phone_num_to_user... OK
  Applying app.0008_create_printer_preidction... OK
  Applying app.0009_add_detective_sensitivity_to_printer... OK
  Applying app.0010_auto_20190303_2125... OK
  Applying app.0011_print_prediction_json_url... OK
  Applying app.0012_auto_20190323_2103... OK
  Applying app.0013_add_alert_fields_to_print... OK
  Applying app.0014_remove_print_fields_from_printer... OK
  Applying app.0015_print_alert_muted_at... OK
  Applying app.0016_add_index_json_url_to_print... OK
  Applying app.0017_user_pushbullet_access_token... OK
  Applying app.0018_add_alert_overwrite_to_print... OK
  Applying app.0019_usercredit... OK
  Applying app.0020_user_telegram_chat_id... OK
  Applying app.0021_make_printer_id_nullable_in_print... OK
  Applying app.0022_auto_20190821_2145... OK
  Applying app.0023_add_consented_at_to_user... OK
  Applying app.0024_auto_20191107_1903... OK
  Applying app.0025_auto_20191107_2013... OK
  Applying app.0026_auto_20191110_1315... OK
  Applying app.0027_add_account_status_to_user... OK
  Applying app.0028_sharedresource... OK
  Applying app.0029_auto_20191212_2101... OK
  Applying app.0030_auto_20191213_0510... OK
  Applying app.0031_auto_20191215_2332... OK
  Applying app.0032_gcodefile... OK
  Applying app.0033_user_slack_access_token... OK
  Applying app.0034_auto_20200311_1805... OK
  Applying app.0035_auto_20200522_0843... OK
  Applying app.0036_auto_20200612_2224... OK
  Applying app.0037_auto_20200629_0127... OK
  Applying app.0038_printshotfeedback_persisted_at... OK
  Applying app.0039_auto_20200728_2028... OK
  Applying app.0040_auto_20201123_0452... OK
  Applying app.0041_auto_20201126_0331... OK
  Applying app.0042_auto_20201202_1937... OK
  Applying app.0043_auto_20201212_0327... OK
  Applying app.0044_auto_20210105_0438... OK
  Applying app.0045_verification_code... OK
  Applying app.0046_auto_20210119_1739... OK
  Applying app.0047_user_pushover_tokens... OK
  Applying app.0048_auto_20210228_1959... OK
  Applying app.0049_auto_20210315_0111... OK
  Applying app.0050_auto_20210325_1318... OK
  Applying app.0051_auto_20210430_1731... OK
  Applying app.0052_auto_20210506_0031... OK
  Applying app.0053_auto_20210925_2331... OK
  Applying app.0054_auto_20211017_1833... OK
  Applying app.0055_octoprinttunnel... OK
  Applying app.0056_auto_20220109_1725... OK
  Applying app.0057_auto_20220112_1613... OK
  Applying app.0058_auto_20220202_0841... OK
  Applying app.0059_user_tunnel_cap_multiplier... OK
  Applying app.0060_user_last_active_at... OK
  Applying app.0061_auto_20220215_1206... OK
  Applying app.0062_auto_20220305_0518... OK
  Applying app.0063_auto_20220318_2317... OK
  Applying app.0064_notificationsetting... OK
  Applying app.0065_auto_20220602_0037... OK
  Applying app.0066_auto_20220822_0428... OK
  Applying app.0067_auto_20220920_0203... OK
  Applying app.0068_remove_printevent_alert_muted... OK
  Applying app.0069_auto_20220922_0039... OK
  Applying app.0070_print_g_code_file... OK
  Applying app.0071_auto_20221122_2103... OK
  Applying app.0072_auto_20221123_2032... OK
  Applying app.0073_auto_20230128_0217... OK
  Applying app.0074_auto_20231009_2220... OK
  Applying app.0075_notificationsetting_notify_on_print_pause_and_more... OK
  Applying app.0076_remove_notificationsetting_notify_on_other_print_events... OK
  Applying app.0077_alter_user_options_user_username_alter_user_email_and_more... OK
  Applying app.0078_remove_email_unique_constraint... OK
  Applying app.0079_set_django_site_localhost_3334... OK
  Applying app.0080_firstlayerinspection_firstlayerinspectionimage... OK
  Applying app.0081_firstlayerinspection_poster_url... OK
  Applying app.0082_printer_detection_bending_factor... OK
  Applying app.0083_jusprinchat... OK
  Applying app.0084_jusprinaicredit...Created AI credit records for 1 existing users with unlimited quota
 OK
  Applying app.0085_printerprediction_normalized_p... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying channels_presence.0001_initial... OK
  Applying oauth2_provider.0001_initial... OK
  Applying oauth2_provider.0002_auto_20190406_1805... OK
  Applying oauth2_provider.0003_auto_20201211_1314... OK
  Applying oauth2_provider.0004_auto_20200902_2022... OK
  Applying oauth2_provider.0005_auto_20211222_2352... OK
  Applying oauth2_provider.0006_alter_application_client_secret... OK
  Applying oauth2_provider.0007_application_post_logout_redirect_uris... OK
  Applying oauth2_provider.0008_alter_accesstoken_token... OK
  Applying oauth2_provider.0009_add_hash_client_secret... OK
  Applying oauth2_provider.0010_application_allowed_origins... OK
  Applying oauth2_provider.0011_refreshtoken_token_family... OK
  Applying oauth2_provider.0012_add_token_checksum... OK
  Applying oauth2_provider.0013_alter_application_authorization_grant_type_device... OK
  Applying oauth2_provider.0014_alter_help_text... OK
  Applying oauth2_provider.0015_refreshtoken_token_checksum... OK
  Applying oauth2_provider.0016_alter_devicegrant_scope... OK
  Applying oauth2_provider.0017_application_dcr_created... OK
  Applying oauth2_provider.0018_resource_indicators... OK
  Applying oauth2_provider.0019_application_registration_source... OK
  Applying oauth2_provider.0020_cimd_application_fields... OK
  Applying oauth2_provider.0021_translatable_field_labels... OK
  Applying oauth2_provider.0022_refreshtoken_token_family_index... OK
  Applying sessions.0001_initial... OK
  Applying socialaccount.0001_initial... OK
  Applying socialaccount.0002_token_max_lengths... OK
  Applying socialaccount.0003_extra_data_default_dict... OK
  Applying socialaccount.0004_app_provider_id_settings... OK
  Applying socialaccount.0005_socialtoken_nullable_app... OK
  Applying socialaccount.0006_alter_socialaccount_extra_data... OK
344 static files copied to '/opt/obico/backend/static_build', 1200 post-processed.
/opt/obico/backend/.venv/lib/python3.12/site-packages/pydantic/_internal/_fields.py:161: UserWarning: Field "model_analysis" has conflict with protected namespace "model_".
You may be able to resolve this warning by setting `model_config['protected_namespaces'] = ()`.
  warnings.warn(
System check identified some issues:
WARNINGS:
app.User: (auth.W004) 'User.email' is named as the 'USERNAME_FIELD', but it is not unique.
	HINT: Ensure that your authentication backend(s) can handle non-unique usernames.
Site "10.98.0.238:3334" created.
[2026-11-11 16:34:36] [OK] Initialized Database
[2026-11-11 16:34:36] [INFO] Creating Services
[2026-11-11 16:34:37] [OK] Created Services
[2026-11-11 16:34:37] [INFO] Waiting for Obico to start
[2026-11-11 16:34:43] [OK] Obico is running
[2026-11-11 16:34:43] [INFO] Customizing Container
[2026-11-11 16:34:45] [OK] Customized Container
[2026-11-11 16:34:45] [INFO] Cleaning up
Reading package lists...
Building dependency tree...
Reading state information...
Summary:
  Upgrading: 0, Installing: 0, Removing: 0, Not Upgrading: 0
[2026-11-11 16:34:46] [OK] Cleaned
🔄 ct/obico.sh (incus) — update log (17 lines)
   ______                                      _ __           _____           _       __
  / ____/___  ____ ___  ____ ___  __  ______  (_) /___  __   / ___/__________(_)___  / /______
 / /   / __ \/ __ `__ \/ __ `__ \/ / / / __ \/ / __/ / / /   \__ \/ ___/ ___/ / __ \/ __/ ___/
/ /___/ /_/ / / / / / / / / / / / /_/ / / / / / /_/ /_/ /   ___/ / /__/ /  / / /_/ / /_(__  )
\____/\____/_/ /_/ /_/_/ /_/ /_/\__,_/_/ /_/_/\__/\__, /   /____/\___/_/  /_/ .___/\__/____/
                                                 /____/                    /_/
  Obico
10.98.0.238
   ______                                      _ __           _____           _       __
  / ____/___  ____ ___  ____ ___  __  ______  (_) /___  __   / ___/__________(_)___  / /______
 / /   / __ \/ __ `__ \/ __ `__ \/ / / / __ \/ / __/ / / /   \__ \/ ___/ ___/ / __ \/ __/ ___/
/ /___/ /_/ / / / / / / / / / / / /_/ / / / / / /_/ /_/ /   ___/ / /__/ /  / / /_/ / /_(__  )
\____/\____/_/ /_/ /_/_/ /_/ /_/\__,_/_/ /_/_/\__/\__, /   /____/\___/_/  /_/ .___/\__/____/
                                                 /____/                    /_/
  Obico
  ⏳   Checking for update: obico
  ✔️  No update available: obico (df8190e)
📄 ct/obico.sh (arm64) — install log (13215 lines)
… 12800 earlier lines cut, the full log is in the run artifacts
 + authy==2.2.6
 + autobahn==26.10.2
 + automat==25.4.16
 + backoff==2.2.1
 + billiard==4.3.1
 + blinker==1.9.0
 + brotli==1.2.1
 + bson==0.5.10
 + cachecontrol==0.14.4
 + cachetools==5.5.2
 + cbor2==6.1.5
 + celery==5.6.3
 + certifi==2026.10.23
 + cffi==2.1.1
 + channels==4.3.2
 + channels-redis==4.3.0
 + charset-normalizer==3.5.2
 + click==8.5.0
 + click-didyoumean==0.3.1
 + click-plugins==1.1.1.2
 + click-repl==0.4.1
 + colorlog==6.12.0
 + constantly==23.10.4
 + crispy-bootstrap4==2026.2
 + cryptography==50.0.2
 + daphne==4.2.3
 + decorator==5.3.1
 + discord-webhook==1.4.1
 + distro==1.9.0
 + dj-database-url==3.1.2
 + django==5.2.19
 + django-allauth==65.21.1
 + django-channels-presence==1.0.0 (from git+https://github.com/TheSpaghettiDetective/django-channels-presence.git@24c15f229372a16c7e8d6e160de89f4817d96c3f)
 + django-cors-headers==4.9.0
 + django-crispy-forms==2.7
 + django-debug-toolbar==8.0.0
 + django-extensions==4.1
 + django-hijack==3.7.9
 + django-ipware==8.0.0
 + django-jstemplate==2.0.1
 + django-oauth-toolkit==3.4.1
 + django-qr-code==5.0.0
 + django-redis==7.0.0
 + django-safedelete==1.5.0
 + django-settings-export==1.2.1
 + django-simple-history==3.13.0
 + django-slick-reporting==1.5.0
 + django-webpack-loader==3.2.4
 + django-widget-tweaks==1.5.1
 + djangorestframework==3.18.3
 + docstring-parser==0.16
 + executing==2.3.0
 + firebase-admin==7.7.0
 + frozenlist==1.8.0
 + google-api-core==2.43.0
 + google-api-python-client==2.159.0
 + google-auth==2.37.0
 + google-auth-httplib2==0.2.0
 + google-cloud-core==2.8.0
 + google-cloud-firestore==2.34.1
 + google-cloud-storage==3.17.1
 + google-crc32c==1.9.0
 + google-resumable-media==2.11.0
 + googleapis-common-protos==1.76.0
 + grpcio==1.85.0
 + grpcio-status==1.85.0
 + gunicorn==26.2.0
 + h11==0.16.0
 + h2==4.4.1
 + hpack==4.2.0
 + httpcore==1.0.9
 + httplib2==0.32.0
 + httpx==0.28.1
 + hyperframe==6.1.0
 + hyperlink==21.0.0
 + idna==3.20
 + importlib-metadata==8.2.0
 + incremental==24.11.0
 + inotify-simple==2.0.1
 + instructor==1.5.1
 + ipdb==0.13.13
 + ipython==9.17.1
 + ipython-pygments-lexers==1.1.1
 + jedi==0.20.1
 + jiter==0.5.0
 + jsonfield==3.2.0
 + jwcrypto==1.6.1
 + kombu==5.6.2
 + langfuse==4.15.4
 + markdown==3.11.2
 + markdown-it-py==4.2.0
 + matplotlib-inline==0.2.2
 + mdurl==0.1.2
 + msgpack==1.2.4
 + multidict==6.9.1
 + newrelic==14.1.0
 + nplusone==1.0.0
 + numpy==1.26.3
 + oauth2client==4.1.3
 + oauthlib==4.0.1
 + openai==1.57.2
 + opentelemetry-api==1.45.1
 + opentelemetry-exporter-http-transport==0.66b1
 + opentelemetry-exporter-otlp-common==0.66b1
 + opentelemetry-exporter-otlp-proto-common==1.45.1
 + opentelemetry-exporter-otlp-proto-http==1.45.1
 + opentelemetry-proto==1.45.1
 + opentelemetry-sdk==1.45.1
 + opentelemetry-semantic-conventions==0.66b1
 + packaging==26.3
 + parso==0.8.7
 + pexpect==4.9.0
 + phonenumbers==9.0.42
 + pillow==13.0.0
 + priority==1.3.0
 + prompt-toolkit==3.0.43
 + propcache==0.5.4
 + proto-plus==1.29.0
 + protobuf==7.36.2
 + psutil==7.2.2
 + psycopg2-binary==2.9.13
 + ptyprocess==0.7.0
 + pure-eval==0.2.4
 + pushbullet-py==0.12.0
 + pyasn1==0.6.5
 + pyasn1-modules==0.4.2
 + pycparser==3.12
 + pydantic==2.8.0
 + pydantic-core==2.20.0
 + pygments==2.21.0
 + pyjwt==2.15.1
 + pyopenssl==26.4.0
 + pyparsing==3.3.3
 + pytelegrambotapi==4.37.1
 + python-dateutil==3.0.0
 + python-ipware==4.1.1
 + python-magic==0.4.27
 + pytz==2026.5
 + pyyaml==6.0.3
 + redis==6.4.0
 + requests==2.34.2
 + requests-oauthlib==2.0.0
 + requests-toolbelt==1.0.0
 + rich==13.9.4
 + rsa==4.9.1
 + segno==1.6.6
 + sentry-sdk==2.73.0
 + service-identity==26.1.0
 + setuptools==75.8.0
 + shellingham==1.5.4
 + simplejson==4.2.0
 + six==1.17.0
 + sniffio==1.3.1
 + sqlparse==0.6.1
 + stack-data==0.6.3
 + tenacity==8.5.0
 + tqdm==4.70.1
 + traitlets==5.16.1
 + twilio==9.12.0
 + twisted==26.4.0
 + txaio==26.6.1
 + typer==0.27.3
 + typing-extensions==4.16.0
 + tzdata==2026.5
 + tzlocal==5.4.5
 + ujson==6.0.0
 + uritemplate==4.2.0
 + urllib3==2.8.0
 + vine==5.1.0
 + wcwidth==0.9.4
 + websocket-client==1.9.2
 + whitenoise==6.12.0
 + wrapt==2.5.1
 + yarl==1.25.1
 + zipp==4.1.2
 + zope-interface==8.7
Checked 1 package in 2ms
Using CPython 3.12.16
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
Resolved 25 packages in 652ms
   Building newrelic==4.12.0.113
Downloading zstandard (4.8MiB)
Downloading numpy (13.4MiB)
Downloading opencv-python-headless (31.6MiB)
Downloading onnxruntime (20.4MiB)
 Downloaded zstandard
 Downloaded numpy
 Downloaded onnxruntime
 Downloaded opencv-python-headless
      Built newrelic==4.12.0.113
Prepared 16 packages in 1.38s
Installed 25 packages in 35ms
 + backoff==2.2.1
 + blinker==1.9.0
 + brotli==1.2.1
 + certifi==2026.10.23
 + charset-normalizer==3.5.2
 + click==8.5.1
 + flask==2.3.3
 + flask-compress==1.15
 + flatbuffers==25.12.19
 + gunicorn==21.2.0
 + idna==3.20
 + itsdangerous==2.2.0
 + jinja2==3.1.6
 + markupsafe==3.0.4
 + newrelic==4.12.0.113
 + numpy==2.2.6
 + onnxruntime==1.31.0
 + opencv-python-headless==4.12.0.88
 + packaging==26.3
 + protobuf==7.36.2
 + requests==2.31.0
 + sentry-sdk==1.40.3
 + urllib3==2.8.0
 + werkzeug==3.1.9
 + zstandard==0.25.0
[2026-11-11 15:35:08] [OK] Set up Python Environments
[2026-11-11 15:35:08] [INFO] Installing Moonraker Metadata Library
Cloning into '/opt/moonraker'...
Note: switching to 'f735c0419444848b59342a98ad3532eef123ea46'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
  git switch -c <new-branch-name>
Or undo this operation with:
  git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at f735c04 power: fix 'address' option percent encoding
[2026-11-11 15:35:09] [OK] Installed Moonraker Metadata Library
[2026-11-11 15:35:09] [INFO] Downloading Failure Detection Model
[2026-11-11 15:35:11] [OK] Downloaded Failure Detection Model
[2026-11-11 15:35:11] [INFO] Configuring Obico
[2026-11-11 15:35:11] [OK] Configured Obico
[2026-11-11 15:35:11] [INFO] Initializing Database
/opt/obico/backend/.venv/lib/python3.12/site-packages/pydantic/_internal/_fields.py:161: UserWarning: Field "model_analysis" has conflict with protected namespace "model_".
You may be able to resolve this warning by setting `model_config['protected_namespaces'] = ()`.
  warnings.warn(
System check identified some issues:
WARNINGS:
app.User: (auth.W004) 'User.email' is named as the 'USERNAME_FIELD', but it is not unique.
	HINT: Ensure that your authentication backend(s) can handle non-unique usernames.
Operations to perform:
  Apply all migrations: account, admin, app, auth, channels_presence, contenttypes, oauth2_provider, sessions, sites, socialaccount
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0001_initial... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying app.0001_initial... OK
  Applying account.0001_initial... OK
  Applying account.0002_email_max_length... OK
  Applying account.0003_alter_emailaddress_create_unique_verified_email... OK
  Applying account.0004_alter_emailaddress_drop_unique_email... OK
  Applying account.0005_emailaddress_idx_upper_email... OK
  Applying account.0006_emailaddress_lower... OK
  Applying account.0007_emailaddress_idx_email... OK
  Applying account.0008_emailaddress_unique_primary_email_fixup... OK
  Applying account.0009_emailaddress_unique_primary_email... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying sites.0001_initial... OK
  Applying sites.0002_alter_domain_unique... OK
  Applying app.0002_seed_data_2247... OK
  Applying app.0003_auto_20190202_1354... OK
  Applying app.0004_auto_20190210_1254... OK
  Applying app.0005_auto_20190219_2337... OK
  Applying app.0006_bed_heater_off_default_false... OK
  Applying app.0007_add_phone_num_to_user... OK
  Applying app.0008_create_printer_preidction... OK
  Applying app.0009_add_detective_sensitivity_to_printer... OK
  Applying app.0010_auto_20190303_2125... OK
  Applying app.0011_print_prediction_json_url... OK
  Applying app.0012_auto_20190323_2103... OK
  Applying app.0013_add_alert_fields_to_print... OK
  Applying app.0014_remove_print_fields_from_printer... OK
  Applying app.0015_print_alert_muted_at... OK
  Applying app.0016_add_index_json_url_to_print... OK
  Applying app.0017_user_pushbullet_access_token... OK
  Applying app.0018_add_alert_overwrite_to_print... OK
  Applying app.0019_usercredit... OK
  Applying app.0020_user_telegram_chat_id... OK
  Applying app.0021_make_printer_id_nullable_in_print... OK
  Applying app.0022_auto_20190821_2145... OK
  Applying app.0023_add_consented_at_to_user... OK
  Applying app.0024_auto_20191107_1903... OK
  Applying app.0025_auto_20191107_2013... OK
  Applying app.0026_auto_20191110_1315... OK
  Applying app.0027_add_account_status_to_user... OK
  Applying app.0028_sharedresource... OK
  Applying app.0029_auto_20191212_2101... OK
  Applying app.0030_auto_20191213_0510... OK
  Applying app.0031_auto_20191215_2332... OK
  Applying app.0032_gcodefile... OK
  Applying app.0033_user_slack_access_token... OK
  Applying app.0034_auto_20200311_1805... OK
  Applying app.0035_auto_20200522_0843... OK
  Applying app.0036_auto_20200612_2224... OK
  Applying app.0037_auto_20200629_0127... OK
  Applying app.0038_printshotfeedback_persisted_at... OK
  Applying app.0039_auto_20200728_2028... OK
  Applying app.0040_auto_20201123_0452... OK
  Applying app.0041_auto_20201126_0331... OK
  Applying app.0042_auto_20201202_1937... OK
  Applying app.0043_auto_20201212_0327... OK
  Applying app.0044_auto_20210105_0438... OK
  Applying app.0045_verification_code... OK
  Applying app.0046_auto_20210119_1739... OK
  Applying app.0047_user_pushover_tokens... OK
  Applying app.0048_auto_20210228_1959... OK
  Applying app.0049_auto_20210315_0111... OK
  Applying app.0050_auto_20210325_1318... OK
  Applying app.0051_auto_20210430_1731... OK
  Applying app.0052_auto_20210506_0031... OK
  Applying app.0053_auto_20210925_2331... OK
  Applying app.0054_auto_20211017_1833... OK
  Applying app.0055_octoprinttunnel... OK
  Applying app.0056_auto_20220109_1725... OK
  Applying app.0057_auto_20220112_1613... OK
  Applying app.0058_auto_20220202_0841... OK
  Applying app.0059_user_tunnel_cap_multiplier... OK
  Applying app.0060_user_last_active_at... OK
  Applying app.0061_auto_20220215_1206... OK
  Applying app.0062_auto_20220305_0518... OK
  Applying app.0063_auto_20220318_2317... OK
  Applying app.0064_notificationsetting... OK
  Applying app.0065_auto_20220602_0037... OK
  Applying app.0066_auto_20220822_0428... OK
  Applying app.0067_auto_20220920_0203... OK
  Applying app.0068_remove_printevent_alert_muted... OK
  Applying app.0069_auto_20220922_0039... OK
  Applying app.0070_print_g_code_file... OK
  Applying app.0071_auto_20221122_2103... OK
  Applying app.0072_auto_20221123_2032... OK
  Applying app.0073_auto_20230128_0217... OK
  Applying app.0074_auto_20231009_2220... OK
  Applying app.0075_notificationsetting_notify_on_print_pause_and_more... OK
  Applying app.0076_remove_notificationsetting_notify_on_other_print_events... OK
  Applying app.0077_alter_user_options_user_username_alter_user_email_and_more... OK
  Applying app.0078_remove_email_unique_constraint... OK
  Applying app.0079_set_django_site_localhost_3334... OK
  Applying app.0080_firstlayerinspection_firstlayerinspectionimage... OK
  Applying app.0081_firstlayerinspection_poster_url... OK
  Applying app.0082_printer_detection_bending_factor... OK
  Applying app.0083_jusprinchat... OK
  Applying app.0084_jusprinaicredit...Created AI credit records for 1 existing users with unlimited quota
 OK
  Applying app.0085_printerprediction_normalized_p... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying channels_presence.0001_initial... OK
  Applying oauth2_provider.0001_initial... OK
  Applying oauth2_provider.0002_auto_20190406_1805... OK
  Applying oauth2_provider.0003_auto_20201211_1314... OK
  Applying oauth2_provider.0004_auto_20200902_2022... OK
  Applying oauth2_provider.0005_auto_20211222_2352... OK
  Applying oauth2_provider.0006_alter_application_client_secret... OK
  Applying oauth2_provider.0007_application_post_logout_redirect_uris... OK
  Applying oauth2_provider.0008_alter_accesstoken_token... OK
  Applying oauth2_provider.0009_add_hash_client_secret... OK
  Applying oauth2_provider.0010_application_allowed_origins... OK
  Applying oauth2_provider.0011_refreshtoken_token_family... OK
  Applying oauth2_provider.0012_add_token_checksum... OK
  Applying oauth2_provider.0013_alter_application_authorization_grant_type_device... OK
  Applying oauth2_provider.0014_alter_help_text... OK
  Applying oauth2_provider.0015_refreshtoken_token_checksum... OK
  Applying oauth2_provider.0016_alter_devicegrant_scope... OK
  Applying oauth2_provider.0017_application_dcr_created... OK
  Applying oauth2_provider.0018_resource_indicators... OK
  Applying oauth2_provider.0019_application_registration_source... OK
  Applying oauth2_provider.0020_cimd_application_fields... OK
  Applying oauth2_provider.0021_translatable_field_labels... OK
  Applying oauth2_provider.0022_refreshtoken_token_family_index... OK
  Applying sessions.0001_initial... OK
  Applying socialaccount.0001_initial... OK
  Applying socialaccount.0002_token_max_lengths... OK
  Applying socialaccount.0003_extra_data_default_dict... OK
  Applying socialaccount.0004_app_provider_id_settings... OK
  Applying socialaccount.0005_socialtoken_nullable_app... OK
  Applying socialaccount.0006_alter_socialaccount_extra_data... OK
344 static files copied to '/opt/obico/backend/static_build', 1200 post-processed.
/opt/obico/backend/.venv/lib/python3.12/site-packages/pydantic/_internal/_fields.py:161: UserWarning: Field "model_analysis" has conflict with protected namespace "model_".
You may be able to resolve this warning by setting `model_config['protected_namespaces'] = ()`.
  warnings.warn(
System check identified some issues:
WARNINGS:
app.User: (auth.W004) 'User.email' is named as the 'USERNAME_FIELD', but it is not unique.
	HINT: Ensure that your authentication backend(s) can handle non-unique usernames.
Site "10.98.0.227:3334" created.
[2026-11-11 15:35:35] [OK] Initialized Database
[2026-11-11 15:35:35] [INFO] Creating Services
[2026-11-11 15:35:35] [OK] Created Services
[2026-11-11 15:35:35] [INFO] Waiting for Obico to start
[2026-11-11 15:35:39] [OK] Obico is running
[2026-11-11 15:35:39] [INFO] Customizing Container
[2026-11-11 15:35:40] [OK] Customized Container
[2026-11-11 15:35:40] [INFO] Cleaning up
Reading package lists...
Building dependency tree...
Reading state information...
Summary:
  Upgrading: 0, Installing: 0, Removing: 0, Not Upgrading: 0
[2026-11-11 15:35:41] [OK] Cleaned
🔄 ct/obico.sh (arm64) — update log (17 lines)
   ______                                      _ __           _____           _       __
  / ____/___  ____ ___  ____ ___  __  ______  (_) /___  __   / ___/__________(_)___  / /______
 / /   / __ \/ __ `__ \/ __ `__ \/ / / / __ \/ / __/ / / /   \__ \/ ___/ ___/ / __ \/ __/ ___/
/ /___/ /_/ / / / / / / / / / / / /_/ / / / / / /_/ /_/ /   ___/ / /__/ /  / / /_/ / /_(__  )
\____/\____/_/ /_/ /_/_/ /_/ /_/\__,_/_/ /_/_/\__/\__, /   /____/\___/_/  /_/ .___/\__/____/
                                                 /____/                    /_/
  Obico
10.98.0.227
   ______                                      _ __           _____           _       __
  / ____/___  ____ ___  ____ ___  __  ______  (_) /___  __   / ___/__________(_)___  / /______
 / /   / __ \/ __ `__ \/ __ `__ \/ / / / __ \/ / __/ / / /   \__ \/ ___/ ___/ / __ \/ __/ ___/
/ /___/ /_/ / / / / / / / / / / / /_/ / / / / / /_/ /_/ /   ___/ / /__/ /  / / /_/ / /_(__  )
\____/\____/_/ /_/ /_/_/ /_/ /_/\__,_/_/ /_/_/\__/\__, /   /____/\___/_/  /_/ .___/\__/____/
                                                 /____/                    /_/
  Obico
  ⏳   Checking for update: obico
  ✔️  No update available: obico (df8190e)

Full logs: workflow run (artifacts result-*). Comment /test to build again.

Comment thread ct/obico.sh
Comment on lines +42 to +43
# No CLEAN_INSTALL: db.sqlite3, media, static_build, .venv and .env are
# gitignored in the upstream repo and survive reset --hard + clean -fd.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

rm coments

Comment thread ct/obico.sh Resolved
Comment thread ct/obico.sh
msg_info "Updating Python Environments"
cd /opt/obico/backend
$STD uv pip install -p .venv/bin/python -r requirements.txt
$STD uv pip install -p .venv/bin/python importlib_metadata==8.2.0

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why pinned?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

following what the obico install does

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that requires manual work on each update, can you extract them dynamically from their files somehow?

Comment thread install/obico-install.sh
Comment on lines +36 to +37
# CPU inference stack, mirroring ml_api/Containerfile.cpu (onnxruntime 1.16.3 has no cp312 wheels)
$STD uv pip install -p .venv/bin/python -r requirements.txt onnxruntime==1.31.0 opencv-python-headless==4.12.0.88

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here, comments, pinned things

Comment thread json/obico.json
"updateable": true,
"privileged": false,
"interface_port": 3334,
"documentation": "https://www.obico.io/docs/server-guides/",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

missing architectures

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants