Skip to content

Release 0.44.0 - #3362

Merged
MichaIng merged 137 commits into
mainfrom
beta
Jun 20, 2026
Merged

Release 0.44.0#3362
MichaIng merged 137 commits into
mainfrom
beta

Conversation

@MichaIng

@MichaIng MichaIng commented Jun 19, 2026

Copy link
Copy Markdown
Member

Breaking changes: #3332 @motioneye-project

  • The signature authentication method has been replaced with session cookies. For using the API, a session cookie needs to be obtained by doing a POST request to the /login API, with username and password arguments as POST data/parameters. If credentials were correct, a session cookie is returned, which needs to be sent with the actual API requests. The cookie has a 24h lifetime, hence scripts/programs should automatically redo the login loop when receiving a 403.
  • For remote motionEye cameras exclusively, a HMAC authentication method has been added, generating a signature from a dedicated secret, request URL, nonce, and tight timestamp. This secret is automatically generated for every motionEye instance, and needs to be entered when adding a remote motionEye camera. Implicitly, motionEye v0.44.0 instances cannot work with older versions vice versa. On first admin login after the update, respectively when selecting the remote motionEye camera from the settings panel, a prompt will allow you to enter the new secret. A new button in the settings panel allows to change it any time later, in case it changes at the remote motionEye instance.
  • The HTTP basic authentication option has been removed.
  • Passwords are now enforced for both users: admin and surveillance/normal, and stored as Argon2 hash on the server. Existing SHA1 hashes and plain text passwords are still functional, and migrated automatically on login. Users are asked to apply passwords on login, if none applied yet.
  • The /action API does now require authentication.

Other changes

🚨 Since this version contains a number of security-related changes, we highly recommend to update your instances ASAP 🚀.

weblate and others added 30 commits December 31, 2025 15:01
Currently translated at 100.0% (380 of 380 strings)

Translated using Weblate (Spanish)

Currently translated at 96.0% (365 of 380 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jorge Aguayo <jaguay@yahoo.com>
Co-authored-by: shdw <weblate@assez.biz>
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/es/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/fr/
Translation: motioneye-project/motioneye : python texts
Translations update from Hosted Weblate
Fix Python 3.14 compatibility by moving subprocess function to top level
Signed-off-by: MichaIng <micha@dietpi.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Merge remote-tracking branch 'origin/dev' into dev

Merge remote-tracking branch 'origin/dev' into dev

Translated using Weblate (Czech)

Currently translated at 97.1% (369 of 380 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (163 of 163 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (380 of 380 strings)

Translated using Weblate (Portuguese)

Currently translated at 29.7% (113 of 380 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Isaki23 <isaquefonseca230706@gmail.com>
Co-authored-by: Marijn <168113859+Marijn0@users.noreply.github.com>
Co-authored-by: Petr Šmejkal <pidler@pidler.cz>
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/nl/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/cs/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/nl/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/pt/
Translation: motioneye-project/motioneye : javascript texts
Translation: motioneye-project/motioneye : python texts
* Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Merge remote-tracking branch 'origin/dev' into dev

Merge remote-tracking branch 'origin/dev' into dev

Translated using Weblate (Czech)

Currently translated at 97.1% (369 of 380 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (163 of 163 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (380 of 380 strings)

Translated using Weblate (Portuguese)

Currently translated at 29.7% (113 of 380 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Isaki23 <isaquefonseca230706@gmail.com>
Co-authored-by: Marijn <168113859+Marijn0@users.noreply.github.com>
Co-authored-by: Petr Šmejkal <pidler@pidler.cz>
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/nl/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/cs/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/nl/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/pt/
Translation: motioneye-project/motioneye : javascript texts
Translation: motioneye-project/motioneye : python texts

* Update translation files

---------

Co-authored-by: Isaki23 <isaquefonseca230706@gmail.com>
Co-authored-by: Marijn <168113859+Marijn0@users.noreply.github.com>
Co-authored-by: Petr Šmejkal <pidler@pidler.cz>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Replace IOLoop.add_timeout() with an awaited retry so the HTTP request
remains open until a frame is available or the retry limit is reached.
Add an admin_only flag to camera configuration and enforce it across the UI and handlers.

Admin-only cameras are hidden from non-admin users in camera listings and are blocked
from accessing pictures, movies, actions, and live frames. The flag is configurable via the UI, disabled by default, and not synced for remote cameras: We want to avoid version conflicts between local and remove motionEye instances, and if a camera is shared with a remote motionEye, the admin of this remote motionEye is free to manage access among its users, independent of whether admin_only is set on the sharing local motionEye for this camera or not.
Signed-off-by: MichaIng <micha@dietpi.com>
Signed-off-by: MichaIng <micha@dietpi.com>
If a remote motionEye is unavailable an exception was not handled.. this was due to the entirely reasonable expectation `raise_error=False` would not raise an error. This is however not the case as documented in the [tornado.httpclient](https://www.tornadoweb.org/en/stable/httpclient.html#tornado.httpclient.AsyncHTTPClient.fetch) documentation:

```
The raise_error=False argument only affects the HTTPError raised when a non-200 response code is used, instead of suppressing all errors.
```

Co-authored-by: MichaIng <micha@dietpi.com>
After splitting parameters key-value pairs by comma, they have a leading space. It remains as part of the key in the resulting dictionary, breaking `utils.build_digest_header()`.

This change strips spaces from each key-value pair before creating the dictionary.

Signed-off-by: MichaIng <micha@dietpi.com>
In #2432, we switched from HTTP/1.1 to HTTP/1.0 to avoid chunks used by `libmicrohttp` (used by `motion`) since v0.9.74, breaking our `Content-Length` based parsing.

This as well changed the default Connection header from `keep-alive` to `close`. Since we otherwise add `Connection: close` explicitly, this changed the connection type for digest authentication only.

With digest authentication, we need to wait for a 401 with a nonce to build the Authorization header, hence the connection needs to stay open. This commit hence adds `Connection: keep-alive` in that case to restore the pre-#2432 behavior.

Additionally, the now redundant `Connection: close` header is removed to save a few bytes.

Additionally, imports are switched to individual methods/constants where applicable, and the code to generate log messages is consolidated in two cases, making use of f-strings and avoiding intermediate variables.

Signed-off-by: MichaIng <micha@dietpi.com>
This commit takes the logic from the base upload_file method to generate the path relative to the camera directory only if subdirs are enabled (`target_dir` is passed), correctly stripping leading slashes, else using `os.path.basename` to strip all path elements, giving the subdir slider an actual purpose.

Additionally, the leading slashes are now `lstrip`ped from the path, instead of using a while loop, simplifying code, and the debug message now shows the path the file is uploaded to.

Co-authored-by: MichaIng <micha@dietpi.com>
…ntication (#3268)

- Add separate per-camera MJPEG streaming username/password (no longer tied to the Surveillance user).
- UI: show streaming credential fields only when authentication is set to Basic or Digest
- Frontend: send streaming_username; send streaming_password only when changed; require Basic/Digest when Admin-only access is enabled.
- Backend: reuse existing streaming credentials when the UI omits the password; parse authentication using only the first : so passwords may contain :.
- Default stream changed to localhost-only; minor logging fix; silenced Flake8 C901 for an existing complex function.
* Fix pytest collecting utility functions as tests (#3272)

Signed-off-by: MichaIng <micha@dietpi.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
The CSS Browser Selector is obsolete nowadays, and we do not seem to make use of the classes it adds in our CSS anyway. The only exception was the Firefox `ff` class, which has been removed in turn: the special-handing is not needed but can be done consistently across all browsers.

Similarly, the jQuery Mouse Wheel Plugin seems to requires binding to the event it fires, which we do not do.

* fix(frontend): remove obsolete browser special handling

Only `-webkit-user-select` is still needed: https://caniuse.com/?search=user-select

Also, always hide the native select box arrow. We show our own blue arrow, and the native one on top of it always looks bad, not only on Firefox. Using only the native one on open boxes on all browsers would be an alternative, but it looks weird if there are multiple select boxes visible, and the selected one changes its arrow style. Ours fits better in to the UI.

Signed-off-by: MichaIng <micha@dietpi.com>
There is a native time input form, which has a time picker, showing time formats in browser language. It submits the time in the same HH:MM format.

Also the "time" class has been removed, as we can match by input[type=time] now, and use the "working-schedule" class to override rules with a more specific selector.

Also remove obsolete CSS rule. That rule did not match anything before either: The "number" class is used only in other input fields supposed to receive numbers. The time input fields do not use that class but have their width set separately in ui.css.

Signed-off-by: MichaIng <micha@dietpi.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
* chore(frontend)-update-external-JavaScript-modules
* fix(frontend): update deprecated and removed jQuery methods. Some of those have been removed with jQuery v3.0 already.
* chore(css): merge "html" selector blocks

Signed-off-by: MichaIng <micha@dietpi.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* chore(frontent): update deprecated jQuery event shorthands

Basically all event handlers and triggers should be applied vie ".on('event', handler)" and ".trigger('event')" respectively. The ones updated here do still work, but are deprecated.

Signed-off-by: MichaIng <micha@dietpi.com>

* chore(frontent): fix typo

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* chore(frontend): further updates

This also removes an IE6-8 fallback, which did not support the getSelection and createRange methods.

Signed-off-by: MichaIng <micha@dietpi.com>

* Update translation files

* fix(frontend): false method migration

Signed-off-by: MichaIng <micha@dietpi.com>

* fix(frontend): convert camera frame sorting to vanilla JavaScript (#3283)

* Initial plan

* fix(frontend): add missing .get() to convert jQuery map to array

Camera frames were not being added to the GUI because jQuery's .map() returns a jQuery object, not an array. The .sort() method was failing on the jQuery object. Fixed by adding .get() to convert to a proper array before sorting.

Co-authored-by: MichaIng <28480705+MichaIng@users.noreply.github.com>

* refactor(frontend): convert camera frame sorting to vanilla JS

Replace jQuery methods with vanilla JavaScript:
- getPageContainer()[0].querySelectorAll() instead of .find()
- Array.from().map() instead of jQuery .map().get()

This eliminates jQuery dependency for camera frame sorting logic.

Co-authored-by: MichaIng <28480705+MichaIng@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MichaIng <28480705+MichaIng@users.noreply.github.com>

---------

Signed-off-by: MichaIng <micha@dietpi.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
text, combi, and file validators all did exactly the same: verifying that any input is given. Moreover, if the second argument required=false is given, their validation always returns true, rending the whole thing unnecessary processing.

This commit merged the 3 validators into one, new "required" validator. The 2nd argument is removed, and this validator is added only if input is required. Else, no validator is added at all.

Generally, it can make sense to validate at least file paths differently. However, as long as not someone aims to add a regex filter which supports all UNIX-like platforms and still serves any purpose, I prefer to remove duplicate and dead code.

In one case, `makeUrlValidator` is called with 2nd argument "true", while this function does not handle the 2nd argument. It is hence removed.

Also, the `<type>-validator` classes are not added anymore. I cannot find them being used anywhere.

Signed-off-by: MichaIng <micha@dietpi.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…avaScript (#3285)

Five validator functions (`makeRequiredValidator`, `makeNumberValidator`, `makeTimeValidator`, `makeUrlValidator`, `makeCustomValidator`) duplicated ~40 lines of setup logic each. Additionally, `makeCharReplacer` was unused, and validators relied on jQuery for DOM operations.

## Changes

**Unified validator architecture**
- Merged `applyValidator` into `makeCustomValidator` - all validators now call `makeCustomValidator()` directly
- All validation functions use short-circuit evaluation: `return condition || i18n.gettext("error message")`
- Optimized visibility check using short-circuit evaluation: `var valid = !isVisible(element) || isValidFn(strVal);`

**Refactored all validators**
```javascript
// Before: ~50 lines of duplicated setup
function makeRequiredValidator($input) {
    $input.each(function () {
        var $this = $(this);
        function isValid(strVal) {
            if (!$this.is(':visible')) return true;
            // ... validation logic
        }
        // ... 40 lines of setup code
    });
}

// After: Single line with short-circuit evaluation
function makeRequiredValidator($input) {
    makeCustomValidator($input, function (strVal) {
        return strVal.length !== 0 || i18n.gettext("Ĉi tiu kampo estas deviga");
    });
}
```

**Migrated to vanilla JavaScript**
- Replaced `$this.is(':visible')` with `isVisible()` helper checking `offsetWidth`/`offsetHeight`/`getClientRects()`
- Replaced `$this.val()` → `element.value`
- Replaced `$this.attr('title', ...)` → `element.title`
- Replaced `$this.addClass()`/`removeClass()` → `element.classList`
- Retained jQuery for event binding (`$input.on()`) per incremental migration approach

**Removed unused code**
- Deleted `makeCharReplacer` (no references in codebase)

**Bug fixes and improvements**
- Time validator: regex now correctly validates 00-23 hours (was accepting 00-29)
- Number validator: added `parseInt` radix parameter, implemented floating-point support with exponential notation
- Number validator: simplified sign handling - when `sign !== true && minVal < 0`, directly sets `minVal = 0`
- Number validator: removed separate "pozitivan nombron" and "pozitivan entjeran nombron" error messages; sign handling now implicit via minVal bounds

## Impact
- 48% code reduction (320 → 165 lines)
- `makeNumberValidator` now properly handles `floating` parameter (previously unused)
- All validators follow consistent short-circuit evaluation pattern
- Simpler sign handling with no redundant checks or extra variables
- All user-facing messages properly internationalized
- No API changes; backward compatible

Signed-off-by: MichaIng <micha@dietpi.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Merge remote-tracking branch 'origin/dev' into dev

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Merge remote-tracking branch 'origin/dev' into dev

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translated using Weblate (Danish)

Currently translated at 36.9% (61 of 165 strings)

Translated using Weblate (German)

Currently translated at 98.7% (163 of 165 strings)

Translated using Weblate (Swedish)

Currently translated at 82.4% (136 of 165 strings)

Translated using Weblate (Italian)

Currently translated at 98.7% (163 of 165 strings)

Translated using Weblate (Arabic)

Currently translated at 15.7% (26 of 165 strings)

Translated using Weblate (Slovak)

Currently translated at 98.1% (162 of 165 strings)

Translated using Weblate (Czech)

Currently translated at 98.1% (162 of 165 strings)

Translated using Weblate (Portuguese)

Currently translated at 96.3% (159 of 165 strings)

Translated using Weblate (French)

Currently translated at 98.7% (163 of 165 strings)

Translated using Weblate (Korean)

Currently translated at 98.1% (162 of 165 strings)

Translated using Weblate (Russian)

Currently translated at 98.1% (162 of 165 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 98.1% (162 of 165 strings)

Translated using Weblate (Ukrainian)

Currently translated at 98.7% (163 of 165 strings)

Translated using Weblate (Greek)

Currently translated at 98.1% (162 of 165 strings)

Translated using Weblate (Catalan)

Currently translated at 98.7% (163 of 165 strings)

Translated using Weblate (Japanese)

Currently translated at 3.6% (6 of 165 strings)

Translated using Weblate (Hungarian)

Currently translated at 27.8% (46 of 165 strings)

Translated using Weblate (Hindi)

Currently translated at 0.0% (0 of 165 strings)

Translated using Weblate (Polish)

Currently translated at 98.7% (163 of 165 strings)

Translated using Weblate (Turkish)

Currently translated at 98.7% (163 of 165 strings)

Translated using Weblate (Turkish)

Currently translated at 96.8% (375 of 387 strings)

Translated using Weblate (English)

Currently translated at 98.7% (163 of 165 strings)

Translated using Weblate (Finnish)

Currently translated at 98.1% (162 of 165 strings)

Translated using Weblate (Spanish)

Currently translated at 98.1% (162 of 165 strings)

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Merge remote-tracking branch 'origin/dev' into dev

Merge remote-tracking branch 'origin/dev' into dev

Translated using Weblate (Dutch)

Currently translated at 100.0% (387 of 387 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (165 of 165 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (165 of 165 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 96.3% (373 of 387 strings)

Translated using Weblate (Catalan)

Currently translated at 96.8% (375 of 387 strings)

Translated using Weblate (Dutch)

Currently translated at 98.7% (382 of 387 strings)

Translated using Weblate (Japanese)

Currently translated at 68.4% (265 of 387 strings)

Translated using Weblate (Korean)

Currently translated at 94.8% (367 of 387 strings)

Translated using Weblate (English)

Currently translated at 98.1% (380 of 387 strings)

Translated using Weblate (Ukrainian)

Currently translated at 98.1% (380 of 387 strings)

Translated using Weblate (Czech)

Currently translated at 95.3% (369 of 387 strings)

Translated using Weblate (French)

Currently translated at 98.1% (380 of 387 strings)

Translated using Weblate (Portuguese)

Currently translated at 29.1% (113 of 387 strings)

Translated using Weblate (Slovak)

Currently translated at 96.8% (375 of 387 strings)

Translated using Weblate (Spanish)

Currently translated at 94.3% (365 of 387 strings)

Translated using Weblate (Hungarian)

Currently translated at 17.0% (66 of 387 strings)

Translated using Weblate (Italian)

Currently translated at 96.6% (374 of 387 strings)

Translated using Weblate (Greek)

Currently translated at 95.0% (368 of 387 strings)

Translated using Weblate (Swedish)

Currently translated at 44.7% (173 of 387 strings)

Translated using Weblate (German)

Currently translated at 98.1% (380 of 387 strings)

Translated using Weblate (Finnish)

Currently translated at 19.8% (77 of 387 strings)

Translated using Weblate (Danish)

Currently translated at 1.2% (5 of 387 strings)

Translated using Weblate (Arabic)

Currently translated at 0.5% (2 of 387 strings)

Translated using Weblate (Polish)

Currently translated at 94.3% (365 of 387 strings)

Translated using Weblate (Hindi)

Currently translated at 0.5% (2 of 387 strings)

Translated using Weblate (Russian)

Currently translated at 97.6% (378 of 387 strings)

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Merge remote-tracking branch 'origin/dev' into dev

Merge remote-tracking branch 'origin/dev' into dev

Merge remote-tracking branch 'origin/dev' into dev

Merge remote-tracking branch 'origin/dev' into dev

Merge remote-tracking branch 'origin/dev' into dev

Merge remote-tracking branch 'origin/dev' into dev

Merge remote-tracking branch 'origin/dev' into dev

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translated using Weblate (Japanese)

Currently translated at 69.3% (265 of 382 strings)

Translated using Weblate (Catalan)

Currently translated at 98.1% (375 of 382 strings)

Translated using Weblate (Spanish)

Currently translated at 95.5% (365 of 382 strings)

Translated using Weblate (Russian)

Currently translated at 98.9% (378 of 382 strings)

Translated using Weblate (Ukrainian)

Currently translated at 99.4% (380 of 382 strings)

Translated using Weblate (Hindi)

Currently translated at 0.5% (2 of 382 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 97.6% (373 of 382 strings)

Translated using Weblate (Italian)

Currently translated at 97.9% (374 of 382 strings)

Translated using Weblate (Czech)

Currently translated at 96.5% (369 of 382 strings)

Translated using Weblate (French)

Currently translated at 99.4% (380 of 382 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (382 of 382 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (382 of 382 strings)

Translated using Weblate (Korean)

Currently translated at 96.0% (367 of 382 strings)

Translated using Weblate (Hungarian)

Currently translated at 17.2% (66 of 382 strings)

Translated using Weblate (German)

Currently translated at 99.4% (380 of 382 strings)

Translated using Weblate (Swedish)

Currently translated at 45.2% (173 of 382 strings)

Translated using Weblate (Turkish)

Currently translated at 98.1% (375 of 382 strings)

Translated using Weblate (Greek)

Currently translated at 96.3% (368 of 382 strings)

Translated using Weblate (Finnish)

Currently translated at 20.1% (77 of 382 strings)

Translated using Weblate (Polish)

Currently translated at 95.5% (365 of 382 strings)

Translated using Weblate (Portuguese)

Currently translated at 29.5% (113 of 382 strings)

Translated using Weblate (Danish)

Currently translated at 1.3% (5 of 382 strings)

Translated using Weblate (Arabic)

Currently translated at 0.5% (2 of 382 strings)

Translated using Weblate (Slovak)

Currently translated at 98.1% (375 of 382 strings)

Translated using Weblate (English)

Currently translated at 99.4% (380 of 382 strings)

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Merge remote-tracking branch 'origin/dev' into dev

Merge remote-tracking branch 'origin/dev' into dev

Merge remote-tracking branch 'origin/dev' into dev

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: LibreTranslate <noreply-mt-libretranslate@weblate.org>
Co-authored-by: Marijn <168113859+Marijn0@users.noreply.github.com>
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/ar/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/ca/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/cs/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/da/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/de/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/el/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/en/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/es/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/fi/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/fr/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/hi/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/hu/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/it/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/ja/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/ko/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/nl/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/pl/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/pt/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/ru/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/sk/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/sv/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/tr/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/uk/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/ar/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/ca/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/cs/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/da/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/de/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/el/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/en/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/es/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/fi/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/fr/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/hi/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/hu/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/it/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/ja/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/ko/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/nl/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/pl/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/pt/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/ru/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/sk/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/sv/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/tr/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/uk/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/zh_Hans/
Translation: motioneye-project/motioneye : javascript texts
Translation: motioneye-project/motioneye : python texts
We let Weblate generate the i18next JSON files directly.

Signed-off-by: MichaIng <micha@dietpi.com>
Translations update from Hosted Weblate
This reverts commit 3e2f816.

Weblate does not support the exact JSON format gettext.js needs. Re-enable for now. Ultimately this requires a split into string extraction, only of source files changed, and PO to JSON conversion + MO cleanup, only if PO files changes. Templates should have minimal header to reduce noise and Webalte + CI loops.

Signed-off-by: MichaIng <micha@dietpi.com>
github-actions Bot and others added 15 commits June 17, 2026 14:20
Dependabot requires a PEP 751 pyproject.lock to manage dependencies. But we intentioanlly do not lock them them, but add lower constraints only. We could add a lockfile to our container images, to allow reproducible builds, but not as part of our repo. Python dependencies are not embedded, hence for reproducable wheel builds, it is irrelevant.

Signed-off-by: MichaIng <micha@dietpi.com>
Translations update from Hosted Weblate
Signed-off-by: MichaIng <micha@dietpi.com>
Currently translated at 100.0% (394 of 394 strings)

Translated using Weblate (German)

Currently translated at 100.0% (175 of 175 strings)

Translated using Weblate (German)

Currently translated at 100.0% (394 of 394 strings)

Translated using Weblate (English)

Currently translated at 100.0% (175 of 175 strings)

Translated using Weblate (French)

Currently translated at 98.9% (390 of 394 strings)

Translated using Weblate (French)

Currently translated at 98.2% (172 of 175 strings)

Translated using Weblate (French)

Currently translated at 98.2% (172 of 175 strings)

Translated using Weblate (French)

Currently translated at 98.2% (172 of 175 strings)

Translated using Weblate (French)

Currently translated at 98.2% (172 of 175 strings)

Translated using Weblate (Czech)

Currently translated at 90.8% (159 of 175 strings)

Translated using Weblate (Czech)

Currently translated at 90.8% (159 of 175 strings)

Translated using Weblate (Korean)

Currently translated at 92.8% (366 of 394 strings)

Translated using Weblate (Korean)

Currently translated at 92.8% (366 of 394 strings)

Translated using Weblate (Korean)

Currently translated at 92.8% (366 of 394 strings)

Translated using Weblate (Korean)

Currently translated at 92.8% (366 of 394 strings)

Translated using Weblate (Hindi)

Currently translated at 3.8% (15 of 394 strings)

Translated using Weblate (Hindi)

Currently translated at 3.8% (15 of 394 strings)

Translated using Weblate (Hindi)

Currently translated at 3.8% (15 of 394 strings)

Translated using Weblate (Hindi)

Currently translated at 3.8% (15 of 394 strings)

Translated using Weblate (Hindi)

Currently translated at 3.8% (15 of 394 strings)

Translated using Weblate (Nepali)

Currently translated at 5.8% (23 of 394 strings)

Translated using Weblate (Nepali)

Currently translated at 5.8% (23 of 394 strings)

Translated using Weblate (Malay)

Currently translated at 0.0% (0 of 175 strings)

Translated using Weblate (Malay)

Currently translated at 0.0% (0 of 175 strings)

Translated using Weblate (Romanian)

Currently translated at 94.9% (374 of 394 strings)

Translated using Weblate (Romanian)

Currently translated at 94.9% (374 of 394 strings)

Translated using Weblate (German)

Currently translated at 98.2% (172 of 175 strings)

Translated using Weblate (German)

Currently translated at 98.2% (172 of 175 strings)

Translated using Weblate (Bengali)

Currently translated at 0.7% (3 of 394 strings)

Translated using Weblate (Bengali)

Currently translated at 0.7% (3 of 394 strings)

Translated using Weblate (Bengali)

Currently translated at 0.7% (3 of 394 strings)

Translated using Weblate (Greek)

Currently translated at 93.1% (367 of 394 strings)

Translated using Weblate (Greek)

Currently translated at 93.1% (367 of 394 strings)

Translated using Weblate (Greek)

Currently translated at 93.1% (367 of 394 strings)

Translated using Weblate (Greek)

Currently translated at 93.1% (367 of 394 strings)

Translated using Weblate (Punjabi)

Currently translated at 0.5% (2 of 394 strings)

Translated using Weblate (Punjabi)

Currently translated at 0.5% (2 of 394 strings)

Translated using Weblate (Punjabi)

Currently translated at 0.5% (2 of 394 strings)

Translated using Weblate (Portuguese)

Currently translated at 98.7% (389 of 394 strings)

Translated using Weblate (Portuguese)

Currently translated at 98.7% (389 of 394 strings)

Translated using Weblate (Portuguese)

Currently translated at 98.7% (389 of 394 strings)

Translated using Weblate (Portuguese)

Currently translated at 98.7% (389 of 394 strings)

Translated using Weblate (Portuguese)

Currently translated at 98.7% (389 of 394 strings)

Translated using Weblate (Portuguese)

Currently translated at 98.7% (389 of 394 strings)

Translated using Weblate (Portuguese)

Currently translated at 98.7% (389 of 394 strings)

Translated using Weblate (Portuguese)

Currently translated at 98.7% (389 of 394 strings)

Translated using Weblate (Russian)

Currently translated at 95.9% (378 of 394 strings)

Translated using Weblate (Russian)

Currently translated at 95.9% (378 of 394 strings)

Translated using Weblate (Russian)

Currently translated at 95.9% (378 of 394 strings)

Translated using Weblate (Russian)

Currently translated at 95.9% (378 of 394 strings)

Translated using Weblate (Russian)

Currently translated at 95.9% (378 of 394 strings)

Translated using Weblate (Hindi)

Currently translated at 7.4% (13 of 175 strings)

Translated using Weblate (Hindi)

Currently translated at 7.4% (13 of 175 strings)

Translated using Weblate (Hindi)

Currently translated at 7.4% (13 of 175 strings)

Translated using Weblate (Slovak)

Currently translated at 95.1% (375 of 394 strings)

Translated using Weblate (Slovak)

Currently translated at 95.1% (375 of 394 strings)

Translated using Weblate (Slovak)

Currently translated at 95.1% (375 of 394 strings)

Translated using Weblate (Slovak)

Currently translated at 95.1% (375 of 394 strings)

Translated using Weblate (Tamil)

Currently translated at 90.8% (159 of 175 strings)

Translated using Weblate (Tamil)

Currently translated at 90.8% (159 of 175 strings)

Translated using Weblate (Tamil)

Currently translated at 92.6% (365 of 394 strings)

Translated using Weblate (Tamil)

Currently translated at 92.6% (365 of 394 strings)

Translated using Weblate (Tamil)

Currently translated at 92.6% (365 of 394 strings)

Translated using Weblate (Punjabi)

Currently translated at 9.7% (17 of 175 strings)

Translated using Weblate (Punjabi)

Currently translated at 9.7% (17 of 175 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (394 of 394 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (394 of 394 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (394 of 394 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (394 of 394 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (394 of 394 strings)

Translated using Weblate (Portuguese)

Currently translated at 97.7% (171 of 175 strings)

Translated using Weblate (Portuguese)

Currently translated at 97.7% (171 of 175 strings)

Translated using Weblate (Portuguese)

Currently translated at 97.7% (171 of 175 strings)

Translated using Weblate (Portuguese)

Currently translated at 97.7% (171 of 175 strings)

Translated using Weblate (Portuguese)

Currently translated at 97.7% (171 of 175 strings)

Translated using Weblate (Danish)

Currently translated at 98.2% (172 of 175 strings)

Translated using Weblate (Danish)

Currently translated at 98.2% (172 of 175 strings)

Translated using Weblate (Danish)

Currently translated at 98.2% (172 of 175 strings)

Translated using Weblate (Danish)

Currently translated at 98.2% (172 of 175 strings)

Translated using Weblate (Danish)

Currently translated at 98.2% (172 of 175 strings)

Translated using Weblate (Korean)

Currently translated at 90.8% (159 of 175 strings)

Translated using Weblate (Korean)

Currently translated at 90.8% (159 of 175 strings)

Translated using Weblate (Hungarian)

Currently translated at 42.2% (74 of 175 strings)

Translated using Weblate (Hungarian)

Currently translated at 42.2% (74 of 175 strings)

Translated using Weblate (Hungarian)

Currently translated at 42.2% (74 of 175 strings)

Translated using Weblate (Hungarian)

Currently translated at 42.2% (74 of 175 strings)

Translated using Weblate (Ukrainian)

Currently translated at 98.2% (387 of 394 strings)

Translated using Weblate (Ukrainian)

Currently translated at 98.2% (387 of 394 strings)

Translated using Weblate (Ukrainian)

Currently translated at 98.2% (387 of 394 strings)

Translated using Weblate (Ukrainian)

Currently translated at 98.2% (387 of 394 strings)

Translated using Weblate (Ukrainian)

Currently translated at 98.2% (387 of 394 strings)

Translated using Weblate (Ukrainian)

Currently translated at 98.2% (387 of 394 strings)

Translated using Weblate (Swedish)

Currently translated at 76.5% (134 of 175 strings)

Translated using Weblate (Swedish)

Currently translated at 76.5% (134 of 175 strings)

Translated using Weblate (Danish)

Currently translated at 34.2% (135 of 394 strings)

Translated using Weblate (Danish)

Currently translated at 34.2% (135 of 394 strings)

Translated using Weblate (Danish)

Currently translated at 34.2% (135 of 394 strings)

Translated using Weblate (Danish)

Currently translated at 34.2% (135 of 394 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (175 of 175 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (175 of 175 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (175 of 175 strings)

Translated using Weblate (Finnish)

Currently translated at 19.5% (77 of 394 strings)

Translated using Weblate (Finnish)

Currently translated at 19.5% (77 of 394 strings)

Translated using Weblate (Finnish)

Currently translated at 19.5% (77 of 394 strings)

Translated using Weblate (Czech)

Currently translated at 93.4% (368 of 394 strings)

Translated using Weblate (Czech)

Currently translated at 93.4% (368 of 394 strings)

Translated using Weblate (Czech)

Currently translated at 93.4% (368 of 394 strings)

Translated using Weblate (Czech)

Currently translated at 93.4% (368 of 394 strings)

Translated using Weblate (English)

Currently translated at 98.2% (172 of 175 strings)

Translated using Weblate (English)

Currently translated at 98.2% (172 of 175 strings)

Translated using Weblate (English)

Currently translated at 98.2% (172 of 175 strings)

Translated using Weblate (Spanish)

Currently translated at 98.2% (172 of 175 strings)

Translated using Weblate (Spanish)

Currently translated at 98.2% (172 of 175 strings)

Translated using Weblate (Spanish)

Currently translated at 98.2% (172 of 175 strings)

Translated using Weblate (Turkish)

Currently translated at 95.1% (375 of 394 strings)

Translated using Weblate (Turkish)

Currently translated at 95.1% (375 of 394 strings)

Translated using Weblate (Turkish)

Currently translated at 95.1% (375 of 394 strings)

Translated using Weblate (Turkish)

Currently translated at 95.1% (375 of 394 strings)

Translated using Weblate (Ukrainian)

Currently translated at 93.1% (163 of 175 strings)

Translated using Weblate (Ukrainian)

Currently translated at 93.1% (163 of 175 strings)

Translated using Weblate (Ukrainian)

Currently translated at 93.1% (163 of 175 strings)

Translated using Weblate (Ukrainian)

Currently translated at 93.1% (163 of 175 strings)

Translated using Weblate (Slovak)

Currently translated at 90.8% (159 of 175 strings)

Translated using Weblate (Slovak)

Currently translated at 90.8% (159 of 175 strings)

Translated using Weblate (Italian)

Currently translated at 94.9% (374 of 394 strings)

Translated using Weblate (Italian)

Currently translated at 94.9% (374 of 394 strings)

Translated using Weblate (Italian)

Currently translated at 94.9% (374 of 394 strings)

Translated using Weblate (Italian)

Currently translated at 94.9% (374 of 394 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 93.1% (163 of 175 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 93.1% (163 of 175 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 93.1% (163 of 175 strings)

Translated using Weblate (Nepali)

Currently translated at 13.7% (24 of 175 strings)

Translated using Weblate (Nepali)

Currently translated at 13.7% (24 of 175 strings)

Translated using Weblate (English)

Currently translated at 99.2% (391 of 394 strings)

Translated using Weblate (English)

Currently translated at 99.2% (391 of 394 strings)

Translated using Weblate (English)

Currently translated at 99.2% (391 of 394 strings)

Translated using Weblate (English)

Currently translated at 99.2% (391 of 394 strings)

Translated using Weblate (Catalan)

Currently translated at 95.1% (375 of 394 strings)

Translated using Weblate (Catalan)

Currently translated at 95.1% (375 of 394 strings)

Translated using Weblate (Catalan)

Currently translated at 95.1% (375 of 394 strings)

Translated using Weblate (Catalan)

Currently translated at 95.1% (375 of 394 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 97.4% (384 of 394 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 97.4% (384 of 394 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 97.4% (384 of 394 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 97.4% (384 of 394 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 97.4% (384 of 394 strings)

Translated using Weblate (Turkish)

Currently translated at 91.4% (160 of 175 strings)

Translated using Weblate (Turkish)

Currently translated at 91.4% (160 of 175 strings)

Translated using Weblate (Turkish)

Currently translated at 91.4% (160 of 175 strings)

Translated using Weblate (Japanese)

Currently translated at 3.4% (6 of 175 strings)

Translated using Weblate (Japanese)

Currently translated at 3.4% (6 of 175 strings)

Translated using Weblate (Bulgarian)

Currently translated at 0.5% (1 of 175 strings)

Translated using Weblate (Bulgarian)

Currently translated at 0.5% (1 of 175 strings)

Translated using Weblate (Bulgarian)

Currently translated at 0.5% (1 of 175 strings)

Translated using Weblate (French)

Currently translated at 98.9% (390 of 394 strings)

Translated using Weblate (French)

Currently translated at 98.9% (390 of 394 strings)

Translated using Weblate (French)

Currently translated at 98.9% (390 of 394 strings)

Translated using Weblate (French)

Currently translated at 98.9% (390 of 394 strings)

Translated using Weblate (French)

Currently translated at 98.9% (390 of 394 strings)

Translated using Weblate (Japanese)

Currently translated at 67.2% (265 of 394 strings)

Translated using Weblate (Japanese)

Currently translated at 67.2% (265 of 394 strings)

Translated using Weblate (Japanese)

Currently translated at 67.2% (265 of 394 strings)

Translated using Weblate (Japanese)

Currently translated at 67.2% (265 of 394 strings)

Translated using Weblate (Arabic)

Currently translated at 14.8% (26 of 175 strings)

Translated using Weblate (Arabic)

Currently translated at 14.8% (26 of 175 strings)

Translated using Weblate (German)

Currently translated at 99.2% (391 of 394 strings)

Translated using Weblate (German)

Currently translated at 99.2% (391 of 394 strings)

Translated using Weblate (German)

Currently translated at 99.2% (391 of 394 strings)

Translated using Weblate (German)

Currently translated at 99.2% (391 of 394 strings)

Translated using Weblate (Hungarian)

Currently translated at 22.3% (88 of 394 strings)

Translated using Weblate (Hungarian)

Currently translated at 22.3% (88 of 394 strings)

Translated using Weblate (Hungarian)

Currently translated at 22.3% (88 of 394 strings)

Translated using Weblate (Hungarian)

Currently translated at 22.3% (88 of 394 strings)

Translated using Weblate (Finnish)

Currently translated at 90.8% (159 of 175 strings)

Translated using Weblate (Finnish)

Currently translated at 90.8% (159 of 175 strings)

Translated using Weblate (Polish)

Currently translated at 91.4% (160 of 175 strings)

Translated using Weblate (Polish)

Currently translated at 91.4% (160 of 175 strings)

Translated using Weblate (Polish)

Currently translated at 91.4% (160 of 175 strings)

Translated using Weblate (Arabic)

Currently translated at 0.5% (2 of 394 strings)

Translated using Weblate (Arabic)

Currently translated at 0.5% (2 of 394 strings)

Translated using Weblate (Arabic)

Currently translated at 0.5% (2 of 394 strings)

Translated using Weblate (Arabic)

Currently translated at 0.5% (2 of 394 strings)

Translated using Weblate (Russian)

Currently translated at 90.8% (159 of 175 strings)

Translated using Weblate (Russian)

Currently translated at 90.8% (159 of 175 strings)

Translated using Weblate (Malay)

Currently translated at 0.2% (1 of 394 strings)

Translated using Weblate (Malay)

Currently translated at 0.2% (1 of 394 strings)

Translated using Weblate (Malay)

Currently translated at 0.2% (1 of 394 strings)

Translated using Weblate (Polish)

Currently translated at 92.6% (365 of 394 strings)

Translated using Weblate (Polish)

Currently translated at 92.6% (365 of 394 strings)

Translated using Weblate (Polish)

Currently translated at 92.6% (365 of 394 strings)

Translated using Weblate (Polish)

Currently translated at 92.6% (365 of 394 strings)

Translated using Weblate (Spanish)

Currently translated at 98.7% (389 of 394 strings)

Translated using Weblate (Spanish)

Currently translated at 98.7% (389 of 394 strings)

Translated using Weblate (Spanish)

Currently translated at 98.7% (389 of 394 strings)

Translated using Weblate (Spanish)

Currently translated at 98.7% (389 of 394 strings)

Translated using Weblate (Spanish)

Currently translated at 98.7% (389 of 394 strings)

Translated using Weblate (Spanish)

Currently translated at 98.7% (389 of 394 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 90.2% (158 of 175 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 90.2% (158 of 175 strings)

Translated using Weblate (Catalan)

Currently translated at 91.4% (160 of 175 strings)

Translated using Weblate (Catalan)

Currently translated at 91.4% (160 of 175 strings)

Translated using Weblate (Catalan)

Currently translated at 91.4% (160 of 175 strings)

Translated using Weblate (Romanian)

Currently translated at 90.8% (159 of 175 strings)

Translated using Weblate (Romanian)

Currently translated at 90.8% (159 of 175 strings)

Translated using Weblate (Bulgarian)

Currently translated at 0.2% (1 of 394 strings)

Translated using Weblate (Bulgarian)

Currently translated at 0.2% (1 of 394 strings)

Translated using Weblate (Greek)

Currently translated at 90.8% (159 of 175 strings)

Translated using Weblate (Greek)

Currently translated at 90.8% (159 of 175 strings)

Translated using Weblate (Bengali)

Currently translated at 0.0% (0 of 175 strings)

Translated using Weblate (Bengali)

Currently translated at 0.0% (0 of 175 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 95.1% (375 of 394 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 95.1% (375 of 394 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 95.1% (375 of 394 strings)

Translated using Weblate (Italian)

Currently translated at 91.4% (160 of 175 strings)

Translated using Weblate (Italian)

Currently translated at 91.4% (160 of 175 strings)

Translated using Weblate (Italian)

Currently translated at 91.4% (160 of 175 strings)

Translated using Weblate (Swedish)

Currently translated at 43.9% (173 of 394 strings)

Translated using Weblate (Swedish)

Currently translated at 43.9% (173 of 394 strings)

Translated using Weblate (Swedish)

Currently translated at 43.9% (173 of 394 strings)

Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: Arnau Llovet Vidal <arnaullv@gmail.com>
Co-authored-by: Burak <admin@homelab.gen.tr>
Co-authored-by: Dimitar Kalinov <dkalinoff@gmail.com>
Co-authored-by: Gabriel <bloxgabriel18@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Hosted Weblate user 148881 <kovacsgyugyu@gmail.com>
Co-authored-by: Isaki23 <isaquefonseca230706@gmail.com>
Co-authored-by: Joaquim Fonseca <jjmf2300@gmail.com>
Co-authored-by: Jorge Aguayo <jaguay@yahoo.com>
Co-authored-by: Jose Riha <jose1711@gmail.com>
Co-authored-by: LibreTranslate <noreply-mt-libretranslate@weblate.org>
Co-authored-by: Lorcan Lerouvillois <lorcan.lerouvillois@gmail.com>
Co-authored-by: Maksymilian Kłusek <123858.xyz@gmail.com>
Co-authored-by: Manuel Garrido Fernández <mgarridof@gmail.com>
Co-authored-by: Marijn <168113859+Marijn0@users.noreply.github.com>
Co-authored-by: MarkZ <daqinit@qq.com>
Co-authored-by: MichaIng <micha@dietpi.com>
Co-authored-by: Onur TORAMAN <onur@toraman.net>
Co-authored-by: Pablo Esteban Bondaz <pabloestebanbondaz@gmail.com>
Co-authored-by: Petr Šmejkal <pidler@pidler.cz>
Co-authored-by: Piotr Turek <piotr.turek@borpol.com.pl>
Co-authored-by: Robert Brutoczki <robibrutoczki@googlemail.com>
Co-authored-by: Saulo Barbosa Oliveira <neosoyo@gmail.com>
Co-authored-by: Siddharth S <siddharth.sadhana@proton.me>
Co-authored-by: SimonHanel <simon@hanel.dk>
Co-authored-by: Tbnilen <tbn@kse.dk>
Co-authored-by: Tommy B.Nielsen <4060dk@gmail.com>
Co-authored-by: User2068 <user603849745775@proton.me>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: Zhang Wei <Zhang@users.noreply.hosted.weblate.org>
Co-authored-by: Ziteng <765484893@qq.com>
Co-authored-by: albanobattistella <albano_battistella@hotmail.com>
Co-authored-by: qnotions <qnotions@gmail.com>
Co-authored-by: shdw <weblate@assez.biz>
Co-authored-by: vrcher <matt.yalta72@gmail.com>
Co-authored-by: Егор Ермаков <eg.ermakov2016@yandex.ru>
Co-authored-by: தமிழ்நேரம் <tamilneram247@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/ar/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/bg/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/bn/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/ca/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/cs/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/da/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/de/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/el/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/en/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/es/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/fi/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/fr/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/hi/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/hu/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/it/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/ja/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/ko/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/ms/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/ne/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/nl/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/pa/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/pl/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/pt/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/ro/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/ru/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/sk/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/sv/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/ta/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/tr/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/uk/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-javascript/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/ar/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/bg/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/bn/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/ca/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/cs/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/da/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/de/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/el/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/en/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/es/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/fi/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/fr/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/hi/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/hu/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/it/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/ja/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/ko/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/ms/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/ne/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/nl/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/pa/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/pl/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/pt/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/ro/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/ru/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/sk/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/sv/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/ta/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/tr/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/uk/
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/zh_Hans/
Translation: motioneye-project/motioneye : javascript texts
Translation: motioneye-project/motioneye : python texts
This solves a low severity security vulnerability in tornado.

Signed-off-by: MichaIng <micha@dietpi.com>
Translations update from Hosted Weblate
This API is harmless, affects visual preferences only: camera frame alignment and sizes, as well as lowering the displayed camera resolution and framerate.

However, this matters only for the GUI after authentication, hence there is no point to allow using this API without authentication, messing with users' preferences.

For clarity, the functions to getting/setting prefs have been moved into the prefs handler script, and inlined, since they are used only at this single place.

Since I am lazy to create two PRs, this commit additionally allows the blue settings panel buttons to grow with long text. With some translations, they can be too small. The fixed width is turned into a minimal width with a padding. Buttons with short texts will have the same size, but buttons with longer text will grow with the text length.

* chore: apply strict typing and f-string usage

Signed-off-by: MichaIng <micha@dietpi.com>
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v6...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
by using Python 3.7 compatible typing. Also use f-strings where possible in touched files.

Add Python 3.9 to our test matrix, which is the oldest version able to build the project (due to setuptools >=77.0.3). Add ruff linter and formatter with Python 3.7 as target version, and all supported Python versions to black. Use the faster "black-pre-commit-mirror".

Also add Ubuntu 26.04 Resolute runners to test matrix where possible.

Signed-off-by: MichaIng <micha@dietpi.com>
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/motioneye-project/motioneye-python-texts/
Translation: motioneye-project/motioneye : python texts
Translations update from Hosted Weblate
@MichaIng MichaIng added this to the v0.44.0 milestone Jun 19, 2026
@MichaIng MichaIng changed the title Release 0.43.1 Release 0.44.0 Jun 19, 2026
Comment thread motioneye/handlers/login.py Dismissed
Comment thread motioneye/handlers/movie_playback.py Dismissed
Comment thread motioneye/handlers/relay_event.py Dismissed
Comment thread motioneye/handlers/prefs.py Dismissed
@MichaIng
MichaIng requested review from Marijn0 and zagrim June 19, 2026 21:00
@Marijn0

Marijn0 commented Jun 19, 2026

Copy link
Copy Markdown
Collaborator

In the release notes it states:

Since the HTTP basic authentication option was later removed during the 0.44.0 beta cycle, this is no longer relevant for the final release IMO.

@MichaIng

Copy link
Copy Markdown
Member Author

Good find, that might have been confusing 😄. Btw: I'll add the CVE/advisory references later on in https://github.com/motioneye-project/motioneye/releases, once PyPI and Docker Hub builds were published.

@Marijn0

Marijn0 commented Jun 19, 2026

Copy link
Copy Markdown
Collaborator

And the version string needs to be updated as well. 🙂

@MichaIng

MichaIng commented Jun 19, 2026

Copy link
Copy Markdown
Member Author

Yes, my last unreviewed file, to change right before merge 😄.

EDIT: Though, not much reason to wait with that. Just done.

MichaIng added 2 commits June 19, 2026 23:53
Signed-off-by: MichaIng <micha@dietpi.com>
Bump version string for v0.44.0 stable release
Comment thread motioneye/static/js/main.js

@zagrim zagrim left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

👍

@MichaIng
MichaIng merged commit 505e250 into main Jun 20, 2026
27 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

10 participants