Skip to main content

AudioCheck - Releases

← App details

Nextcloud 34

AudioCheck 1.2.17
Release Details
UpdatedAug. 7, 2026, 3:13 p.m.
Changelog

Fixed

  • Browse showed audio outside Library folders — the catalog no longer indexes or lists tracks that are not under an enabled library root (for example only Privat/Music and Privat/Audiobooks). File events outside those folders are ignored; moving audio out of a library removes it from AudioCheck (files stay in Nextcloud Files).
  • Removing a library left stale tracks — deleting a library folder now purges its catalog rows so Browse/Music/Audiobooks update immediately.
  • Empty-library scan no longer walks the whole home — with no library folders configured, scan clears the catalog instead of falling back to /.
  • Folders facet invented parent paths — Browse → Folders no longer surfaces ancestors above your configured roots (such as /Privat or /).

Changed

  • Library UX copy — clearer remove confirmation and “How it works” steps that state only added folders appear in the library.
  • Nextcloudmax-version remains 34 (current stable 34.0.2).

Tests

  • Integration coverage for library scope (out-of-library writes, orphan purge, remove-library, folder facets, empty catalog).
  • Unit/contract gates and mutation gauntlet for indexing, browse joins, and remove-library purge.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureCQSfvNab+sLV0AaIzS3PNSB7PJmM2jwDEtvmy1jzH48WPRjDTBDW0eUlMn2+EhCkfC1VrMhAEVnuFJ9/lDOrihRSJNJKxWmh6jYt+TQOl0tomIoVFgUawJSrtHhQq9JOhzoclyNxuykan3AZNrDC1jz7bDDPafVVHi+Fd1cFwliPvxtTdJ4YwLUqSY8/XopMmJgMAT3pnq3uQWp9IBKicIdQ33xN6pOpedrwcRQFPTtqCtoUHfsbpaogWwyk1UGfOe/4GD7sLq+hw7WVzbMli2rhQzPnJqYRogiGutC7AvuCuh2a/1L8Hs0P0PVupszYOP+C9ECKg+FNfGpdRHOxCNbDYv7JSNVAv/FxWMmmjif97GfQR+Ly1Ev43Rz6td9uoX7sFkgtK0ZPXhcXj+XYBbV2S8HfVOCM9wVglkh5wytK0u9+rsS1uDLRB9/FW7it9DSOIicEzIXNDQms5XJ1+c3x7+mAAYNmvIHQR8BVhC8e0jC7Ve2kOXL6jbS0lgvMuy4QwSO6kOLr2jMeghavRruOj2a1IDjST6tlgja0FLQfdVTFLRS7buJdOpSRCIpMb2RFHa9oG7ff2gvBUI8JlHsAdHroEXACzROT8C2jODK9hNrmRWAD0bjT3a1pD+TS3Amh13sS+iNfGAOr5ZGp8VDZwesbYK0v36NzBMxSY3c=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.16
Release Details
UpdatedAug. 4, 2026, 9:14 p.m.
Changelog

Changed

  • Library folders UX — folder rows are a single clear line (name, path, track count, Remove). Content type and nested-folder settings live under collapsed Folder options.
  • Add folder flow — no content-type modal; Music / Audiobook / Auto-detect shortcuts, path-based type guessing, and automatic scan after add.
  • Store listing copy — README and info.xml descriptions clarified (free AGPL web app, formats, get-started steps).
  • Nextcloudmax-version remains 34 (current stable 34.0.2).

Tests

  • Journey + axe WCAG 2.1 AA coverage for the simplified Library surface (library-folders-ux / nested-scan e2e and PHPUnit contracts).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureUubMG3p3B/DZ3peLbwILnZdU4kKfomEhp5GJbYHG4DoXx3CkKAzKLBRdNqAn3oRVJnr+b1KGmVk2J6R7Vf6o32p7TCJWncl8vvNCu8xs/+T8bzvNNy/5QroZsYI7bRAGD1WiUINHvHzdh308HOXPfEsk1vpVGEIOeijX2k43P72uYhH2RsRwS8aoOJVo/Sreo6Q9UYiqJE+q0hldHxLbpBZCkhk2H131GA6SyAoNgZw/+VpFYV2dn744TTh9Fqf73sp0mDofKFhlJ88FDVlnF4s/gAdTS57WDtcbGcabcCqYpGe9v/kLrktkw8Fjy8F1wxW7BcG8D+RZ6bkN5XQmmo8iKF5+cRBz4BS1nDza/E9NK6OcuoWHF9gj3lOLcqPCdy+ECILKV+mlzgJhv9+wocFLyft5j/eQbl0TwRas7CVf3RQ/Pr6XJp7v0ow5WUD5R0ByYFXxyQuUa/0RO1bNdsrW2ymBe6LCbPtnzCEP6GcbBeuqZuL9Oijn/5M389DRecA9FyOpGlZSnG6wIM92ViUekHmGdR+t4Qj01ucV5z70swLve7cD5kxlQFAxwH8chdLacQqbJCrZ+f5KKfG7doTW6p0USFIm5M/rkaozs1SpwM0T8XRu7VLFrnHiiUWodA7a8Sg839jYkrdqQ/eCj/mr5KtIoXzIuXGqT6olu8s=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.15
Release Details
UpdatedAug. 2, 2026, 12:13 p.m.
Changelog

Changed

  • Packaging release: version bump for App Store / GitHub republish; confirmed Nextcloud max-version 34 against latest stable 34.0.2.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureI1SMSyNnozaIb1DCCg2uY/BLzxKDfhYxeBpmy2GdCSb4N/6EWoclCmNazmCodz7woCEOQVKPr62s0jyJ5UZ4xLEcIS4IinW8vJCHQKsPMURXao/YNaVkn9wIflgz7isyd7El0DXjUBbqgIQltY1QvrlA+HL877NarmEa5JOf8C/itN0fSUp1De68b75obdu3vLpZVCDtnMVOt7G3wobjwe0pQ+ArxvSEUrrWi7hOev9ipaROW4eP52dAH89Yn7BBzkHoAwtSP8lD4/7BT2heWAR4SrtMcxffmo0C9ZRwCNS4k55T7xfe3bhQtiKJn2EsvwDy6PnJK1QY3IAbw76Dkbwf9rEqJgqZh+VVNLJh8XBKAI4n02J9A/iUEAEtf9uf2Gxzza4kk3SHCDrTkuza0CUnUuFsFzIbSILfG3vH6gRFF+sNyOkce+k2C7KbNumVj6PxjtTOCWDcwyZhj28jEKx2sqtzfZGoo5k4Z+WGjeuqYTFam6sIm4vZduVfnOaO5zmKiWjFWc6BrbneKj1o++gR/GimY8Wt5YCvLBi0CWgXM2zKrhACg+USk3B4LySIT5WXTiYn/L8/BPugZZLDfRnlN+Xk6yl77ZERA41jmMkKeoDjow/xCYEG37fhau5oKWcr1K8H5uaJ5wQeVFETt8ipibqXCZmc+W9dZAmko7A=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.14
Release Details
UpdatedJuly 31, 2026, 10:58 p.m.
Changelog

Fixed

  • Nested audiobook folders skipped during scan (issue #9) — recursive walks no longer drop a book folder that sorts last (or alone) under its author. Layouts like /Audiobooks/Author/Book/*.mp3 and /Audiobooks/Author/Book/CD 1/*.mp3 are indexed completely.
  • Scan cursor size on deep trees — walk position is stored in a compact path+offsets form so deep Author/Book/Chapter stacks stay within the varchar(4000) cursor column across resumes.
  • Multi-disc grouping — untagged files in CD n / Disc n / Chapter n / Kapitel n folders group under the parent book and keep disc order.
  • Same-second scan prune — a new full scan picks a generation strictly newer than any existing last_seen_at, so tracks indexed by a file event in the same second are still pruned when the file becomes inaccessible (e.g. share revoke).
  • Batch-boundary infinite rescan — finishing a library root on an exact SCAN_BATCH_SIZE boundary no longer persists an empty walk cursor that restarted the same root forever and skipped prune; pause only while the current root still has work (or before starting the next root).

Changed

  • Library UX — clearer “All nested folders” scope, an Author/Book layout tip, and Settings copy that names the nested audiobook pattern.
  • Walk depth cap — recursive scans stop descending after 32 folder levels (files at that depth still index) to bound pathological nesting.
  • Nextcloudmax-version remains 34 (current stable).

Unreleased

Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignaturekRn8Ins0iJGjq8QIE9RSXuWodovQaXRFp1l7YGcmUlmIOEmixZZvdpauj87CmbFfyUECJefyuX/Zyyaza+GhJj956AHQhEEg769KX8Wr7458OmKkfsMtPmTfE1u+NOl52FU7XLGYhkiuiiZzMo+FgO2o51CmWqL3qZUsIQsYQ0tV7i0czPKYeSe6F6eHLH/DDwzj2zzpi+wYOX/xmxpwcsCs4nRiPZ4fAfuQGUiZPXPVwz+/w8u9hz3wS0B1vxsQ2oorvsLFM4w/kYbK+xqyHt+7VV8OkOAwNKnZqGatYH5jMOnspmqKGtVeGc7TOzCISmTiry0gJG6gY3ph+A7SE4l27dHKOtXPZkKnEF6PYrvPN39G06nE5t1IvuUUr4463dR3zp7Dmi5a9e6SkkbtBRC46pO6MD7RI/1B/JtTILU5DcQBTDA2J24HclNCu2E8sULEdzoEqBraly3oSe8obWFjFw62iTITvkToieDkztuZ1LTICykEq+YmTrQ4qYPRnxA/crG1yVyl6r/NawDL0l1MWQJB004pOqmH2tjTWZOdWg7CRgiLn9bowIDkFL89TFo+Ej2LWxXyLXl602lgBqbwMrVIXoO+RSrn0usICB40zX/oC1ihaLHjKYGaFQiFQMHmIYfCQVVCWJRLFyVlo3+UDlZRxqy7AG1WrejoNfE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.13
Release Details
UpdatedJuly 31, 2026, 4:36 p.m.
Changelog

Added

  • Mini player ±30 — jump back/forward 30 seconds on the mini transport (same contract as Now Playing, keyboard, and MediaSession).
  • Hide mini on Now Playing — the dock is hidden on Aktuelle Wiedergabe (SSR + SPA) so the full player is the only transport strip.

Fixed

  • Mini jump aria-labels — PHP t() cannot substitute JS {seconds} placeholders; labels use fixed strings plus client hydrate from SEEK_JUMP_SEC.
  • Focus / inert when dock hides — keyboard focus leaves the mini player before it becomes hidden; inert blocks interaction while Now Playing is open.
  • No-op relative seek pending — clearing pending immediately when −/+ does not move currentTime (e.g. −30 already at 0) so sticky pending cannot skew the next jump.

Changed

  • Responsive mini transport — five-button row stays usable at 320px with ≥44px touch targets for jump controls.

Unreleased

Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureeeyzFx9yVprYFecyG2++BDonnwqVdzr5C6fwmGhOly0kfgLs87nkGK/6Gv1Y7RHH5tpSvpr283z3H3pSQoDqZhxPyiqBE56oBjfK2h19Ww51UInil7kmBICWps7KT8xK5tetj0ozFCkjeA/0VX+ueJwcspM1qHXTPL1EvJwRi0abmV699RajZrrEt7oh0dYYQ93Y9l5VJkjQ9Uws5oimqdj70NBN9JBbzqc6QPlubfeMCsU7DGMAuW3k6m8xVQByT6QzJzAHbPM/FpUwdY6jX7/ktYdZ+/OY4o1ofa8TxUMjV7supVJF0SPIfCw4GzyrM1cx7iKfhVkpZsxa9n2gp5QomW9VurvH7vfJCGdTlMxdxX9mjRxb1tbEr7rs96Sq2A2whO97bOdibhpza9g9mJdwoetqKxgbDSYwNbUghX9dRZ6I+DjxHUg1z6ZE+YI2gmSpRU6DeGbaZzL859dX01BtviYAaYv8sXowvIErE4vv1RfIHShLMDJ+wX47vv6dOuK+fJMI9wN7f6KsCdxv84smJ/hzmsuaCFZ7s+5Lfx4OW3e6LGKIfMQfYDctgeysPAGD8lBx5nkcbHIx7/wfh0ljvm6dmvUpAc5sjPwV7hSTFd7Uv7Z0tew8CHIZOV4y14Pa99eo9pNxX4GeqWx6jrd7P5vPxOYZuL4ZZyO9GHQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.12
Release Details
UpdatedJuly 31, 2026, 12:19 p.m.
Changelog

Added

  • Jump back / forward 30 seconds on Now Playing — podcast-style −30 / +30 beside play (issue #6). Mini player stays simple; open Now Playing for jumps. Keyboard ←/→ and MediaSession seek use 30 seconds.

Fixed

  • Rapid ±30 seek race (web + mobile) — relative seeks accumulate against a pending target so double-taps cannot both read a stale clock and land on the same position; absolute scrub / track change cancels in-flight relative seeks.
  • MediaSession seek offset — OS/browser often advertises 10s; product hard-locks seekbackward/seekforward to 30s to match on-screen controls.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignaturePOnP8cp5nA8/cw3K2jjsWjDfLC83cAhtbGU3l69+0EIJwwgBfcGpYHK4N1bgxVRqDjrLO/4MJe3LDAmQbIvNLs+Tqv2f4QlE82LfCNS5Pqw0jQWWamR+irc7JXdMONcKvdSZaExWph3ySYcgGU6ABKGAl6K4PWepNaDc4P411lklYFcv+WXr60B9j5euPNIvr3zffXnpvsXzID9JoN7PAO5krreThU3lQHjjuivvKXLq9EZxyhHb91/KoG47VyFMIr1BJgu3JLhx3RkJoSNCUJaDzWnHVCO+2nizMyTBXF52PyF6ikLuVInaY9DOtcmvFAGSyME/gUHSzNSwI30yBdJCKawj9cKOGdXODy4UV0MDQfZjhl814k3Hdv3TDMNZ4yeGIjFpMp14vCBLvNbIe3h3wMpayPhGq3iEhDKu1UXO4WKVtFGG0+zDpuQEucF/fdWyuXKrX5qzK1oS1JNSmLC+/ZaeDdWBF8R5wKIBhGoLz3/NScsYeRcX+bNgJNDOHWNzzx+gdllrjyPhYmJmliIkr56Z4337apsLiosLi0DFS1lM7YCQ9MI6x0mzwEbAzRATLJIfTJY3nPCHLEuwJOXd65TNnpkwKfTCIpwna95zZRq+4vMxK0q6YiYNcq9XwfY7ULt96SGWcdhsKb14793w8xXUIQx+zcEPSpGlv+0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.11
Release Details
UpdatedJuly 30, 2026, 9:38 p.m.
Changelog

Fixed

  • Fatal on every file move/rename (issue #7) — NodeEventListener called the non-existent NodeRenamedEvent::getNode(). Rename events expose getSource() / getTarget() only; the listener now routes through ScanService::handleRename(), updates audio index paths in place, purges cross-storage source ids, and never lets indexing exceptions abort DAV MOVE (copy-without-delete).
  • Folder move index drift — renaming/moving a folder now rewrites descendant ac_tracks.rel_path and matching ac_libraries.folder_path prefixes (Nextcloud only emits one event for the folder), then assigns library_id immediately from the new paths (no waiting on a background scan). Previously unindexed audio that entered a library is discovered with a bounded synchronous walk; only overflow queues a scan.
  • Copied audio never indexedNodeCopiedEvent is registered; file copies upsert immediately; folder copies use the same bounded index-into-libraries path.
  • include_subfolders on path resolve — library matching for node events now honours non-recursive library roots.
  • User/group delete listeners — cleanup failures are logged and no longer bubble into the core delete event bus.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureJ4PQtIV1I7xSKw7cG1ijV0lZ2KjgD63Y+zrmRuXSjlmLYNiksrZqv54YwWcHR3SQthSxBPOC/8h8rQ8JOHB7nWBwcs9QBB4PgU5C0F5nCnmB2Mb9Yf8LelSAdRrcZV7U3Eyf6X9/Gr/JqcOz6WgE0N2Eg3gyoDWWFmnnd9A2hqprazXx7wthwWOdi5+zA3umOjKJscQdjXKeJ/Ihs7tuFWmv1puISUFNhLj5UycCeNl+1vQ07JbAz++uRIm0QRVeJzAqt4hXBkGGaLzLW0teAkZnbEmCwLhZTrgWqQXVw9qYbnoY9cmWoMNR6RF0ShFAtvW97rv9u0XK4cRHuilmC9NP8KrfRMAjXSBE8fZrvCy+FgFlo6neM8CngcUgHd6n27vgArhWq1c7lQpbONj48jhV6dLINJkTIJ6wGnBZcPBnqhLvOWwM/574wj/0WoBP9oVYlKALsV6zCvp7dlRPZeS85+HFiSeXw3vtUKxoQKz4T+vYYupNjZGYTNL55THtH5Kgn7siKeyNiaLfushQRmvWD9T+7flZmgogs5zWxet+OjRO2WWqQeuCh9L2j9EtW527UYrO3QecCeu6Cj38+7WW+S6t+eeFJSXCotzh9X6dYXVnUCUOyrF0WwGS3huHPfJJsJqYWbPaJ7AOR+6XPr0dqKfZlnjZqFGOKulJxuc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.10
Release Details
UpdatedJuly 21, 2026, 11:19 a.m.
Changelog

Fixed

  • Queue-wide listening speed — changing speed on Now playing now sticks for the whole queue. The HTML media load() algorithm was resetting playbackRate to on every track change because only playbackRate (not defaultPlaybackRate) was set before src/load(). Both rates are kept in sync and re-applied after load/play; the UI reads the session speed via getSpeed() instead of the audio element.
  • Keyboard speed shortcuts[ / ] now persist the new rate with the queue/session (same as the speed control).
  • Settings default speed — saving the default no longer overrides an active listening session mid-queue.

Changed

  • Now playing speed control — clearer “Listening speed” label with − / select / + controls, hint that speed applies to the whole queue, 44px touch targets, and WCAG-focused labels/descriptions.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureYzRV2/sof1CISYuL/0VSftxtNGIjW6NT6swdgC1ygQ/aG/9huRnCOo23g//CcTsOPKMDgM+lpty6YftiHdDXhXS6dzbIcSqdDXuBOcHyn0fTyWHBEF7p+APMswQd5zMBhXfsxje2IXCr3OKyUIUbbSNrj00FFY1dpkS3M2oO9ud8xQ8Hld0cUcDtsw6rSmlC4kj9FN+6+pOrT1P2qMGOgvgUYf96HL5wY6oFRZTgaXJ0itz+MaHI/uvlHclzxR0FcTQqtMljaiM6qcwT81yjfxOTjv/Bs6i/B1YDKwEUc5I8+pUP8zye3sqgPmmopwzMXEpuPpM6U54hABH8IADCniyb/VZHTmTJoHz+OhctNgpsQcNc8BojVaaFa66nY17qHOnsmvlc0P0xPJQzBfXu3M4wnsepyGQPZqtrQ/2IsE8S4LLyqWn0wi2wxNbL/Il/+oHITMbFwKyd+pVpxroAunprQsYe5T4g1aUjgANSKTTmbzMbWzb7k8CIYmAhine/1U3stAfuojIgb8K0HNZUI52OPoTuC4dSiVaGq2zWmQeMy8QantICnBSFRlaxsWK0Mk05UTPCNQYX310Wmh5jWW7lbQLBxw4NdJeObbCULKdH0OkbHKfJiXRNtrwa8bpLzeTFv31peFxEFLyHFiREh7WGjUE+fUdmHUjZm2D66Mw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.9
Release Details
UpdatedJuly 15, 2026, 10:25 a.m.
Changelog

Fixed

  • Favorites listing regression test — unit and integration tests lock in hardened loadFavoriteFileIds() behavior (issue #3).
  • Native widget scheme on forced themes (issue #4 follow-up) — color-scheme is now bound to the applied Nextcloud theme (body[data-theme-*]) instead of a blanket light dark, so select dropdowns, spinners, and other browser-drawn widgets no longer render white on a forced dark theme when the OS prefers light (and vice versa). Modals and toasts, which portal onto <body>, get the same binding.
  • Active sort chip contrast — active filter chips paired --color-primary-element-light backgrounds with --color-primary-element-text ink, which is tuned for the solid primary color and became dark-on-dark (illegible) on dark themes; they now use --color-primary-element-light-text.
  • Stale theme-bind.css after upgrades — the late-loaded theme re-binding stylesheet is now versioned (?v=<app version>) so browsers pick up theming fixes on upgrade instead of serving a months-old cached copy.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignaturekTA/K5U++VfgdYLxsxtjxZdHoshbTcsnF1xoQPIi3JUCH88gDobRUpY1tWJ5WggZxWlve/HquNdt6ZcR5WSB3ymajBfWv3+vTxJWKHNpcg83tFRoq4MHPlnwHAaasAedaIYxrtg9tx6WL6pv4jof/8eN6Qcc0wmqOceCYxnGN1pSoPFpA9euzSLQtti1krxbYI++RgT1w89bvKwnAi7ToMX2HuqzwmU0z8jaSyeI1fVXzo8sWT2IJrYLNMfTdZmgGUjELW7dLnSR4OrjP4STsBWiyLHJrWLlqfa3SBr1aVQdLLMM0QGrnYaPOKEFaFI/WAnOsTYKbpXa8RUiJKnw7xcYaHKDJ9UqJCe4b8rn6/kW+hrXgFvEov9MSWWgPxlohEO7TYPB/JM/71m3KnKkT0oC05UMrbBTIV9KHg12RktHi/FOP3QZazySt7M+vA1oQpFFpLqUG+Ts4i1dft9gkftk38FH/tX+g64yrxNfIGOz1/snR8VaIjCi71loLM6MPrcFGoP0UGuorQKRRi3EDLJbgJLW9yQrhY7WrtfozmoRIPpL7ZDZG1PzF+ri1UkXYrSOY1hSQOsNXfxvxAdM6tZK1ajDdnqnAm3VayKeAqnHXvVOnYkPjyvu+8IfaAAwyNqVBNUMu1yL3Cg1SKgGmctC9wzJ/srdMf1iTwp9ylw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.8
Release Details
UpdatedJuly 13, 2026, 1:36 p.m.
Changelog

Changed

  • Nextcloud 34 — raised max-version to 34 for the current stable server release.

Fixed

  • Scan memory — library scans walk folders depth-first in batches instead of loading every audio file into memory before indexing; cursor now stores a walkStack for resume.
  • Concurrent scans — only one worker can claim RUNNING per user via an atomic DB update; lease heartbeats prevent stale takeover mid-batch.
  • Playlist integrity — reorder and delete run inside DB transactions so partial failures cannot leave inconsistent sort orders or orphan headers.
  • Mini player volume (mobile) — volume icon opens an accessible popover with slider and mute on small screens; desktop keeps inline controls (WCAG 2.1 AA).
  • API error loggingsafe() and service catch blocks now pass the exception object (['exception' => $e]) to the logger instead of a message context key, which the Nextcloud logger's PSR-3 interpolation silently discarded. Internal errors now log the full class, message, and stack trace.
  • Favorites listing 500ITags::getFavorites() may return false on transient DB errors; LibraryService now degrades to "no favorites" instead of throwing a TypeError that broke /api/tracks?favorite=1 and all views built on it.
  • SQL portability — count queries no longer inherit ORDER BY on non-aggregated columns (rejected by PostgreSQL and MySQL 8 with ONLY_FULL_GROUP_BY); MAX() aggregates use selectAlias() so library sync revisions and playlist sort orders are read correctly; internal Doctrine ArrayParameterType replaced with the public IQueryBuilder::PARAM_INT_ARRAY.
  • Upsert races — concurrent progress saves, listened-flag writes, queue creation, and track scanning no longer 500 on unique-constraint violations; the losing writer retries as an update.
  • Playlist integrity — duplicate-name detection only maps genuine unique-constraint violations to a validation error (other DB errors surface as server errors); playlist items get a stable secondary sort key; defaultSpeed is clamped on update.
  • Favorites shuffle truncation — the client paged past the server's 100-per-page clamp instead of silently shuffling only the first 100 favorites; removed a misleading 500-track request limit from facet browsing.
  • User-facing error messages — machine codes like internal_error are translated to human-readable, localized messages in toasts; network failures get a dedicated "could not reach the server" message; fixed "1 items" pluralization on the Playlists page.
  • Dark / high-contrast theming — theme-derived --ac-* tokens are re-bound on body, #content[class*="app-audiocheck"], and #app-content.ac-app; css/theme-bind.css loads after Nextcloud theme stylesheets so backgrounds and ink stay paired on every theme (fixes light text on white backgrounds in dark mode). Added --ac-surface and corrected --ac-muted-strong mixing. Guard script scripts/check-theme-tokens.sh enforces token scope in CI.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureEAfydT7TAjAp7u/mC4U4BMg430xVorUQLwN9NJ2t0FOyr4iRNrvTX+twWERHgHflQ5YKRTAelQ/Tv5cqesv10hAeRkwdKbI8Ziz2dgVydD6aXMPzqCqzAXvr89PWutU0/GG46O2QEw45mg5qmETDfG88ecH5LwgUuDgTT2C5306oAKghnWZeGQ0MjiZMDPe4AU8d13pVVR9PxqaAlKgzQBAd1qDrelEeRreRA0VKcCqr2emryvfCZNbsFSeLxKVuIQk8Npd0c/QXVxqo4pk/3dxMcpB5HW5jucKBKSob/+1Am4dH7YK4o194GEOhnMuPD7WGDVZwJtnjXykJBHaaxJWl0Un5R1/mncAOPdur2dD40OvZXWCVQKL8Qm3MAqC2YgaPOwewsEHshvrA0MHew4BoD4iyjGBk36Ckry5IG8dsE7W0gDRS1PXOEJH/VjgKZtg0vNOuONubwuhW5N7+DSkJaCzUXwZJr/sXMgbD6R0dxOKs4d04wfcGm//ft+YTX03jZ8az5NPV1yNvM6YXZ7aDd9FxsMRtQloxq9+/C3Qha9kYJ5lP5Xk+s/XoPtQpY2N6RZEQOUX4ZqZ4sNunrao4c0F3XeUC8q13lWsQBma71iG9wm8GJ/SkJIR5ejaRIUTTqhC0ztJFwTEYXVGg/P6Z9cLr+Estq4QKmOT7r6I=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.7
Release Details
UpdatedJuly 11, 2026, 7:39 p.m.
Changelog

Fixed

  • Scan memory — library scans walk folders depth-first in batches instead of loading every audio file into memory before indexing; cursor now stores a walkStack for resume.
  • Concurrent scans — only one worker can claim RUNNING per user via an atomic DB update; lease heartbeats prevent stale takeover mid-batch.
  • Playlist integrity — reorder and delete run inside DB transactions so partial failures cannot leave inconsistent sort orders or orphan headers.
  • Mini player volume (mobile) — volume icon opens an accessible popover with slider and mute on small screens; desktop keeps inline controls (WCAG 2.1 AA).
  • API error loggingsafe() and service catch blocks now pass the exception object (['exception' => $e]) to the logger instead of a message context key, which the Nextcloud logger's PSR-3 interpolation silently discarded. Internal errors now log the full class, message, and stack trace.
  • Favorites listing 500ITags::getFavorites() may return false on transient DB errors; LibraryService now degrades to "no favorites" instead of throwing a TypeError that broke /api/tracks?favorite=1 and all views built on it.
  • SQL portability — count queries no longer inherit ORDER BY on non-aggregated columns (rejected by PostgreSQL and MySQL 8 with ONLY_FULL_GROUP_BY); MAX() aggregates use selectAlias() so library sync revisions and playlist sort orders are read correctly; internal Doctrine ArrayParameterType replaced with the public IQueryBuilder::PARAM_INT_ARRAY.
  • Upsert races — concurrent progress saves, listened-flag writes, queue creation, and track scanning no longer 500 on unique-constraint violations; the losing writer retries as an update.
  • Playlist integrity — duplicate-name detection only maps genuine unique-constraint violations to a validation error (other DB errors surface as server errors); playlist items get a stable secondary sort key; defaultSpeed is clamped on update.
  • Favorites shuffle truncation — the client paged past the server's 100-per-page clamp instead of silently shuffling only the first 100 favorites; removed a misleading 500-track request limit from facet browsing.
  • User-facing error messages — machine codes like internal_error are translated to human-readable, localized messages in toasts; network failures get a dedicated "could not reach the server" message; fixed "1 items" pluralization on the Playlists page.
  • Dark / high-contrast theming — theme-derived --ac-* tokens are re-bound on body, #content[class*="app-audiocheck"], and #app-content.ac-app; css/theme-bind.css loads after Nextcloud theme stylesheets so backgrounds and ink stay paired on every theme (fixes light text on white backgrounds in dark mode). Added --ac-surface and corrected --ac-muted-strong mixing. Guard script scripts/check-theme-tokens.sh enforces token scope in CI.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureOYSJOAEPFmNzWN3GZeKQnDwpPjDre+YRdIPE6OCmwPAgZillckDvFX20VFmeDaLpxiVh9P6Vg/OerpU/SHxINbKCntGCIV+5I/mJX5rwx5rpdW9bjN3f58J09bqnkUo8s2sCGlKq0y9neu3ZHuRhPKGCuLVbJPP7LBs7RXDJxQjxWNIE35PflwsixAD3E2M/iPkH3jJV56AJKviy9cQa5Wa6pBGFDBb9TxF8XLo0tckNp3SBQ3F6jpcA2prvoglKQl2vIlYXb71iyXhkVYYwteHXmLmeOwiDGrYXr+4TvNgN2mU+ZjfptHEFvVKJ0Ldx8RSU4Q7R4tU9RZtUwxqqmDnRpBVBR5m4jBdBcAagjLMBg6zeqtNdJodSmyzQLQmDs6Jhtu2w+iOYd56cdZMjlV+7y+RtpCc8o36zCasZco8UbMFhHrCZ1LxAoDoqIcZONynmmcgKIUof5xkbPyE8I9xtnool86ye7HiQOMDNjYyRoNFygPtf1vuEu4UXyAZkY6a8XNUZIWUvjEfPn/5JuvcjOsErcbKFUKkuPN9mDhYbKHJUo/ESNyQrjjfhiEeMyl9x8NFNAN6B2qx6pt32NWCqtYK1K00KRpP9nJlVD/IWxvs3zJFh5M/G2k3fDH5CRV/NJiWDYo8CwNschMcaO6oc+7KH4x2UssmC033rTd8=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.6
Release Details
UpdatedJune 24, 2026, 9:03 p.m.
Changelog

Added

  • Global search — shell search filters Home, Browse, Music, Audiobooks, and Playlists with debounced query sync.
  • Sleep timer — duration, end-of-chapter, and end-of-track stops on Now playing.
  • Playback start choice — Play all / collection actions offer start from beginning vs continue when saved progress exists.
  • Accent-insensitive search — normalized shadow columns (*_norm) and migration backfill library search across web and mobile.

Changed

  • App shell — persistent page chrome (breadcrumb, icon header, scope strip, grouped nav hints) aligned with BudgetCheck and MobilityCheck across all routes.
  • Section cards — Settings, App settings, Library, Browse, Music/Audiobooks, Playlists, and collection detail use shared sectionCard / collapsibleSectionCard layout.
  • Track lists (mobile) — library browse rows render as bordered cards at ≤767px; collection detail tracks match the same pattern.
  • Playlist detail actions — secondary header actions collapse into a More actions menu on narrow viewports; Play stays visible.
  • Messaging — polite/assertive live regions and toast stack for status feedback.

Fixed

  • Browse page — removed duplicate inline page header after shell migration.
  • Play all — header action only on Tracks (Music/Audiobooks) and Favorites (Browse) tabs.
  • Integration test runnerrun-docker-tests.sh resolves the Nextcloud root correctly from the app directory.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureJv9Cfgd5KiHuIhWVcnmPvc+tjX9hD+iP5PRAzEryrCAlq0yfNInv9T82hm7Sw0Uug78ddijfkZ2dgD2vRZm5Pik97LCUi8R8Vck1U5LU3aSVhrHNH02l86ntKWjjhiIUj26X589gMc1DcB0nNrEjrUCf50RMtrLcB3qR1WBuzAKPW3GbA5c/zkB56nhPelVSXFY99ksX1wwNFQwvNHQ1hUNziNoaQTI5EtTr3lizvigJvY7UAZjlIdTZe7c2Gfn2YVmto5YQ7EYEfxZfQIhS3NUBDGdhpAZV2wbSFDYpcx/AxLOikAp6rU7mgb08cAsm1G19dWcSBGTFRhVJ+bBucZXzY4H1siljWo7bVp47mXBCL4TxakLtaW4TIvaYJ0KQ+hLU5Rp1JIp4fdeyXIQ4XjoEBsFxpjwme1h1z0/Dp6tGsCBcd1vuZOks3KFD2+758sCVVqz+v+sDk6+fJL7M5YK9DsHRt8j5CxVFqTfsQI4Ew87pONnYruNABlOfsW0v1AnyKI1da/oEti14Ki6ONM0sWznSbGIS00CSbR7T4wiP2ev1HFQSe+hAlTEqwyP0UuNGR1QKvlTXVdL+46M8HBx4sqlW8wfzeEFnXFsH/IQHwuw6bgPDTIoemTg/Kgfi2m3XIqdaBruQ2sXo+yMzZZ1s+q1yKA5WLDBG/D4Y0n4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.5
Release Details
UpdatedJune 20, 2026, 1:59 p.m.
Changelog

Added

  • Paginated library APIs — collection, facet, and playlist track endpoints accept page and limit so large libraries stay responsive in the web app and mobile clients.
  • Load more in the web UI — Browse collections/facets, Music/Audiobooks browse, and Playlists use server-side pagination with Load more instead of loading entire track lists at once.
  • Play now / shuffle on full lists — playlist actions fetch all pages before queuing so Play now and Shuffle play cover the complete list (with the existing 2000-track cap).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureDyugqURQcSAJsnY+5whWW+8l45Ca4rETbg8Ggr2DLSJaoNi1PE3sRa54HAWGBu5emmP6y1qOTo5O4qqTCz7R1s+VLQhB7S2UgbNyx5OyW0Z7wJ1i34W9Ve+xQLiUbrj/opqCKZiQXzqttSOXFpeT5MXOa1eykRYXHk1ogIXyA9WULjFasagxE0bJ5MqJdKLg0e+Iw3jnnBP9UDI+LOEYyGJx/AZqwsiL7wqmLcBQs3EVgF2BeMpD5jqaFyPPVodE86fqKFM6lUcC6dfxBlkrT+mgfg9Md0/gIG7FQlTljcjnpUEd5eeWp4/8K05mOiPcW8II1B1DGM4N4y6+yt0U0x2Vz22rI0wnlpBgOIrCu1b4JOiwkX60/NZwsLlhAy1v2M7+qxyN/FU6JlJM6ICo4jEnkWLXJ820IbliDDmhm/G6ji9O5NDQJFuN9h99ez80kz7g3x/CeflE3OJGmqWWR+1h7MjvYtL7AznGsqlnBs/H8ed9eqjIcFPmRPGTVXYtwRRDYLjCb2d3DGOWEzjeQVWmxQfkpm3D8UguefW7xhZX1L/YonrP914vDK7NXxl3eNPll9rQGxnCDgCfcU1RXLGpSAzYZ9VtO9TEf2y9azdq+7tOLQuI1b0SyUTONjXYOldJGXanC1AMC/QRzT8ELFrl0+D9rKeGJ1dQJyyfQa4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.4
Release Details
UpdatedJune 19, 2026, 7:17 p.m.
Changelog

Added

  • AJAX cron scan ticks — when Nextcloud uses AJAX/webcron instead of system cron, queued library scans advance via /api/scan/ajax-cron while you stay in AudioCheck (library polling and app-wide heartbeat). “Scan now” still runs an initial in-process batch; remaining batches no longer stall until a full server cron run.
  • Stale scan lock recovery — abandoned running scan rows older than 10 minutes are treated as resumable so large libraries cannot deadlock after a crash.

Changed

  • Library cron callout — explains that scans continue while using AudioCheck on AJAX cron hosts (system cron remains recommended for large libraries).
  • AJAX scan tick rate limit — 120 requests per minute per user on /api/scan/ajax-cron.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureeGQI1vbXZcWucftZYcIA0TsZ2vgHuGiAUqXs/l09B/vCADzp2LDJ1qT6X7I8SN0tybnfjYv0KUns/VcMjYZI/liyDB9AJSQIYGO/9hwPKbjyeqLPiXbP391GwHpoAcZtZs3KJQY/Ufyl7+QR44o//+81C4FQkovYK1vhQFJLUCjdTncMiESHh8ewU57NM0jqtsU1zx+aqYZLS4rkg/K1sdQq216A+L20+g7bGjMEa4NwAzrApmnLUNhTW4NjVdwAHjJuhrahVA/HWKhgo/Sakz7TlttO8T9sCzdUl7UOejDn0KnQO5XmYFqkxa5i/M9atHeIsij7L7KKKIbvReYujL6MvReZQchzMTYnVv39kZZ2TlfrsKwrevQRf+CKNczpp0tsqbrL3p6lo1I9D9bb1Xt045qA2c2q8IL3b2fSCY7emGGJWvQLtDsEZ/uAg28s6pK8wuur5PJWBFRV3lRiQtaIIgjtdggPWK//+Mo5+58hYgM1EyzjC/92lmnO510xXgEocC1JRRjlrYCoZGvpCmRFEza9woRsdb2dsPedx/XuIO/dvFpQ10Zw4jRmVTzlr6bguua8stUJ5d7P2ltRtVHNOtJck4it+pxqzKnwq1e//0QdQIef17EuUq7TgtXpONGwvGMioKTzveZ9XprZGfGUqDTLgZgpcaSyJuZDLvw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.2
Release Details
UpdatedJune 18, 2026, 1:10 p.m.
Changelog

Fixed

  • App Store screenshots — screenshot URLs in info.xml are now single-line (whitespace in the URL text prevented the store from loading images).
  • MP4 podcasts missed during scan — recursive library scans only searched *.mp4 when no audio/* files were found; MP4/M4A/M4B files tagged as video/mp4 are now always merged into scan results.

Added

  • MP4 audio container support.mp4, .m4a, and .m4b files tagged as video/mp4 are accepted at the file gate, indexed, and offered in the Files app (extension-filtered for video/mp4).

Changed

  • App Store copy (EN + DE) — accurate format list, clarified server-side resume, removed unverifiable WCAG certification wording; accessibility described as design goals.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureT3vGGbmLd07nyi0eKXGtXs/jwWf/17iRFXBQQc0fdpJDqvMcU20ZdcyR2LVJoWdX8FimEA1VZmI0tVmFDvUrT5bdPNNn29O09MAVd9ERPhtcTWagy9LJ7roXxaHZ6ZiB+PErl2581x/+Hrf90AHcHNcOcqZ0gE3dOUjCE988aZ8Z7fXQ22LWhkJQFirlO1uq30WP2vqQ2k2Yt5fOvchmB5joPNZHnbwg5Vndmitv3PTaTruytzGoUzTrzPD0n0E1OPO/lDjeslW32UMiK2DRtqUUVvDPnrzLA3L5IBcST1WU+N8COf+agslTqLp5M+m8+LKrxuQaOh1GX1Q824IFgkW/8zizXyt45PWJSyFQYNOtlEspl+IX8hKyT2gWguxhQP6kefYBhb/WJrYcemcwcey8c/StlUKYjU8bIulSTl+Yd95YO/sMaHSneeY7R7pIX3Z2OFRjoPGVaMmuoB/hdQLTw2/V8DHCHzZlfpQHmZblCQ3k2p0o2gKS/qlgUgqtEhHbs2VBsg3ugU4Iji1z6vGTDe++R4YIjCawU5xUi8uRV7KH7A8letsHsa2upRHfR0Poe1r8TWni6qBiPd3ZtoGxh2U3QDhccwHnmUYPxE2Es2cZ4Um9t0SWX0TId4+7DQs2uatnHx7MrJaCIMlGlId9VGGLUQFWQD8xlcUn4lU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.1
Release Details
UpdatedJune 16, 2026, 8:13 p.m.
Changelog

Fixed

  • Queue destroyed on reload / app switch while playing. When restoring a queue that was playing, the browser's autoplay policy rejects audio.play() with NotAllowedError on any fresh document (reload, returning from another Nextcloud app, or a deep-link landing). The player misread that benign rejection as a media failure, marked the track unavailable, skipped through the rest, and then cleared the durable server queue — losing it on every device. loadTrack() now distinguishes autoplay/abort rejections (keep the track loaded and paused, ready to resume with one tap) from genuine media errors. The cross-device queue is preserved and recoverable.
  • Durable queue no longer discarded on a real playback error. A track that cannot be decoded in the current browser is treated as "unplayable here", not "deleted by the user"; the curated queue stays recoverable on reload or on another device. Only explicit user actions (clear queue / remove last item) wipe the persisted queue.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
Signatureai5A4WCVeltI2oihLkhMkkv3ONBNXb4T8FTzRwIjVSo0ns7GY34IwJ4iM5YS17YWC9qJVWEyAnScnNEkLcFMvJGiIvBH+TAzFZcGXzh/v2CKEZU87Dhd7ddczCMoyJ5vRk+tK3oD4idftiC/8HvyxE19O7QQv4XDO8+U+YX8MvNflhqo2on076ICOK3qYlK4G/KsNkXlv9YryLVJ+GjSkXVx7hWFQeUXrbyqmVNDYBtLpfo5yr8dQZfWmVq822TIlpqXKlFJF8AHPfixuTbaq3VE6JvEC+zvy7ngEpnV5s5Sh0hoHaB731PrGzhXR48hEvdfgUVW7MkyqL0pE0bEcyavi9NGw9HuzLshIJg7Xb0tFy0yZENOJhn9oiVuOiwRqTotiBCTIDVlDziRRNDDKfIDlgGagIEKctBoN8AuVSku0IRN/4GKYEORVWGqB/ER5AR0LksqSCFIA9VRYdtvvvkKyFbovZUAyLyW61miWtGztYoMTN5//708ooWc45n64KfL5VfTLUIV5hrJAkz1DtwlPBpGnOYKhUIVG9h9wIbT2ij8cCMeT2jSdrpAIn0hroK1hhb2b4Zo1Hx8BnK7ekeLLC/ay481STM/CC2ljPtEiepgjT1OC7+Q+Fc+Tt3rI901YMWi9eFqumNW2s88EDqdhHzdWA87RT6a+QjledY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0

Nextcloud 33

AudioCheck 1.2.17
Release Details
UpdatedAug. 7, 2026, 3:13 p.m.
Changelog

Fixed

  • Browse showed audio outside Library folders — the catalog no longer indexes or lists tracks that are not under an enabled library root (for example only Privat/Music and Privat/Audiobooks). File events outside those folders are ignored; moving audio out of a library removes it from AudioCheck (files stay in Nextcloud Files).
  • Removing a library left stale tracks — deleting a library folder now purges its catalog rows so Browse/Music/Audiobooks update immediately.
  • Empty-library scan no longer walks the whole home — with no library folders configured, scan clears the catalog instead of falling back to /.
  • Folders facet invented parent paths — Browse → Folders no longer surfaces ancestors above your configured roots (such as /Privat or /).

Changed

  • Library UX copy — clearer remove confirmation and “How it works” steps that state only added folders appear in the library.
  • Nextcloudmax-version remains 34 (current stable 34.0.2).

Tests

  • Integration coverage for library scope (out-of-library writes, orphan purge, remove-library, folder facets, empty catalog).
  • Unit/contract gates and mutation gauntlet for indexing, browse joins, and remove-library purge.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureCQSfvNab+sLV0AaIzS3PNSB7PJmM2jwDEtvmy1jzH48WPRjDTBDW0eUlMn2+EhCkfC1VrMhAEVnuFJ9/lDOrihRSJNJKxWmh6jYt+TQOl0tomIoVFgUawJSrtHhQq9JOhzoclyNxuykan3AZNrDC1jz7bDDPafVVHi+Fd1cFwliPvxtTdJ4YwLUqSY8/XopMmJgMAT3pnq3uQWp9IBKicIdQ33xN6pOpedrwcRQFPTtqCtoUHfsbpaogWwyk1UGfOe/4GD7sLq+hw7WVzbMli2rhQzPnJqYRogiGutC7AvuCuh2a/1L8Hs0P0PVupszYOP+C9ECKg+FNfGpdRHOxCNbDYv7JSNVAv/FxWMmmjif97GfQR+Ly1Ev43Rz6td9uoX7sFkgtK0ZPXhcXj+XYBbV2S8HfVOCM9wVglkh5wytK0u9+rsS1uDLRB9/FW7it9DSOIicEzIXNDQms5XJ1+c3x7+mAAYNmvIHQR8BVhC8e0jC7Ve2kOXL6jbS0lgvMuy4QwSO6kOLr2jMeghavRruOj2a1IDjST6tlgja0FLQfdVTFLRS7buJdOpSRCIpMb2RFHa9oG7ff2gvBUI8JlHsAdHroEXACzROT8C2jODK9hNrmRWAD0bjT3a1pD+TS3Amh13sS+iNfGAOr5ZGp8VDZwesbYK0v36NzBMxSY3c=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.16
Release Details
UpdatedAug. 4, 2026, 9:14 p.m.
Changelog

Changed

  • Library folders UX — folder rows are a single clear line (name, path, track count, Remove). Content type and nested-folder settings live under collapsed Folder options.
  • Add folder flow — no content-type modal; Music / Audiobook / Auto-detect shortcuts, path-based type guessing, and automatic scan after add.
  • Store listing copy — README and info.xml descriptions clarified (free AGPL web app, formats, get-started steps).
  • Nextcloudmax-version remains 34 (current stable 34.0.2).

Tests

  • Journey + axe WCAG 2.1 AA coverage for the simplified Library surface (library-folders-ux / nested-scan e2e and PHPUnit contracts).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureUubMG3p3B/DZ3peLbwILnZdU4kKfomEhp5GJbYHG4DoXx3CkKAzKLBRdNqAn3oRVJnr+b1KGmVk2J6R7Vf6o32p7TCJWncl8vvNCu8xs/+T8bzvNNy/5QroZsYI7bRAGD1WiUINHvHzdh308HOXPfEsk1vpVGEIOeijX2k43P72uYhH2RsRwS8aoOJVo/Sreo6Q9UYiqJE+q0hldHxLbpBZCkhk2H131GA6SyAoNgZw/+VpFYV2dn744TTh9Fqf73sp0mDofKFhlJ88FDVlnF4s/gAdTS57WDtcbGcabcCqYpGe9v/kLrktkw8Fjy8F1wxW7BcG8D+RZ6bkN5XQmmo8iKF5+cRBz4BS1nDza/E9NK6OcuoWHF9gj3lOLcqPCdy+ECILKV+mlzgJhv9+wocFLyft5j/eQbl0TwRas7CVf3RQ/Pr6XJp7v0ow5WUD5R0ByYFXxyQuUa/0RO1bNdsrW2ymBe6LCbPtnzCEP6GcbBeuqZuL9Oijn/5M389DRecA9FyOpGlZSnG6wIM92ViUekHmGdR+t4Qj01ucV5z70swLve7cD5kxlQFAxwH8chdLacQqbJCrZ+f5KKfG7doTW6p0USFIm5M/rkaozs1SpwM0T8XRu7VLFrnHiiUWodA7a8Sg839jYkrdqQ/eCj/mr5KtIoXzIuXGqT6olu8s=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.15
Release Details
UpdatedAug. 2, 2026, 12:13 p.m.
Changelog

Changed

  • Packaging release: version bump for App Store / GitHub republish; confirmed Nextcloud max-version 34 against latest stable 34.0.2.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureI1SMSyNnozaIb1DCCg2uY/BLzxKDfhYxeBpmy2GdCSb4N/6EWoclCmNazmCodz7woCEOQVKPr62s0jyJ5UZ4xLEcIS4IinW8vJCHQKsPMURXao/YNaVkn9wIflgz7isyd7El0DXjUBbqgIQltY1QvrlA+HL877NarmEa5JOf8C/itN0fSUp1De68b75obdu3vLpZVCDtnMVOt7G3wobjwe0pQ+ArxvSEUrrWi7hOev9ipaROW4eP52dAH89Yn7BBzkHoAwtSP8lD4/7BT2heWAR4SrtMcxffmo0C9ZRwCNS4k55T7xfe3bhQtiKJn2EsvwDy6PnJK1QY3IAbw76Dkbwf9rEqJgqZh+VVNLJh8XBKAI4n02J9A/iUEAEtf9uf2Gxzza4kk3SHCDrTkuza0CUnUuFsFzIbSILfG3vH6gRFF+sNyOkce+k2C7KbNumVj6PxjtTOCWDcwyZhj28jEKx2sqtzfZGoo5k4Z+WGjeuqYTFam6sIm4vZduVfnOaO5zmKiWjFWc6BrbneKj1o++gR/GimY8Wt5YCvLBi0CWgXM2zKrhACg+USk3B4LySIT5WXTiYn/L8/BPugZZLDfRnlN+Xk6yl77ZERA41jmMkKeoDjow/xCYEG37fhau5oKWcr1K8H5uaJ5wQeVFETt8ipibqXCZmc+W9dZAmko7A=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.14
Release Details
UpdatedJuly 31, 2026, 10:58 p.m.
Changelog

Fixed

  • Nested audiobook folders skipped during scan (issue #9) — recursive walks no longer drop a book folder that sorts last (or alone) under its author. Layouts like /Audiobooks/Author/Book/*.mp3 and /Audiobooks/Author/Book/CD 1/*.mp3 are indexed completely.
  • Scan cursor size on deep trees — walk position is stored in a compact path+offsets form so deep Author/Book/Chapter stacks stay within the varchar(4000) cursor column across resumes.
  • Multi-disc grouping — untagged files in CD n / Disc n / Chapter n / Kapitel n folders group under the parent book and keep disc order.
  • Same-second scan prune — a new full scan picks a generation strictly newer than any existing last_seen_at, so tracks indexed by a file event in the same second are still pruned when the file becomes inaccessible (e.g. share revoke).
  • Batch-boundary infinite rescan — finishing a library root on an exact SCAN_BATCH_SIZE boundary no longer persists an empty walk cursor that restarted the same root forever and skipped prune; pause only while the current root still has work (or before starting the next root).

Changed

  • Library UX — clearer “All nested folders” scope, an Author/Book layout tip, and Settings copy that names the nested audiobook pattern.
  • Walk depth cap — recursive scans stop descending after 32 folder levels (files at that depth still index) to bound pathological nesting.
  • Nextcloudmax-version remains 34 (current stable).

Unreleased

Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignaturekRn8Ins0iJGjq8QIE9RSXuWodovQaXRFp1l7YGcmUlmIOEmixZZvdpauj87CmbFfyUECJefyuX/Zyyaza+GhJj956AHQhEEg769KX8Wr7458OmKkfsMtPmTfE1u+NOl52FU7XLGYhkiuiiZzMo+FgO2o51CmWqL3qZUsIQsYQ0tV7i0czPKYeSe6F6eHLH/DDwzj2zzpi+wYOX/xmxpwcsCs4nRiPZ4fAfuQGUiZPXPVwz+/w8u9hz3wS0B1vxsQ2oorvsLFM4w/kYbK+xqyHt+7VV8OkOAwNKnZqGatYH5jMOnspmqKGtVeGc7TOzCISmTiry0gJG6gY3ph+A7SE4l27dHKOtXPZkKnEF6PYrvPN39G06nE5t1IvuUUr4463dR3zp7Dmi5a9e6SkkbtBRC46pO6MD7RI/1B/JtTILU5DcQBTDA2J24HclNCu2E8sULEdzoEqBraly3oSe8obWFjFw62iTITvkToieDkztuZ1LTICykEq+YmTrQ4qYPRnxA/crG1yVyl6r/NawDL0l1MWQJB004pOqmH2tjTWZOdWg7CRgiLn9bowIDkFL89TFo+Ej2LWxXyLXl602lgBqbwMrVIXoO+RSrn0usICB40zX/oC1ihaLHjKYGaFQiFQMHmIYfCQVVCWJRLFyVlo3+UDlZRxqy7AG1WrejoNfE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.13
Release Details
UpdatedJuly 31, 2026, 4:36 p.m.
Changelog

Added

  • Mini player ±30 — jump back/forward 30 seconds on the mini transport (same contract as Now Playing, keyboard, and MediaSession).
  • Hide mini on Now Playing — the dock is hidden on Aktuelle Wiedergabe (SSR + SPA) so the full player is the only transport strip.

Fixed

  • Mini jump aria-labels — PHP t() cannot substitute JS {seconds} placeholders; labels use fixed strings plus client hydrate from SEEK_JUMP_SEC.
  • Focus / inert when dock hides — keyboard focus leaves the mini player before it becomes hidden; inert blocks interaction while Now Playing is open.
  • No-op relative seek pending — clearing pending immediately when −/+ does not move currentTime (e.g. −30 already at 0) so sticky pending cannot skew the next jump.

Changed

  • Responsive mini transport — five-button row stays usable at 320px with ≥44px touch targets for jump controls.

Unreleased

Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureeeyzFx9yVprYFecyG2++BDonnwqVdzr5C6fwmGhOly0kfgLs87nkGK/6Gv1Y7RHH5tpSvpr283z3H3pSQoDqZhxPyiqBE56oBjfK2h19Ww51UInil7kmBICWps7KT8xK5tetj0ozFCkjeA/0VX+ueJwcspM1qHXTPL1EvJwRi0abmV699RajZrrEt7oh0dYYQ93Y9l5VJkjQ9Uws5oimqdj70NBN9JBbzqc6QPlubfeMCsU7DGMAuW3k6m8xVQByT6QzJzAHbPM/FpUwdY6jX7/ktYdZ+/OY4o1ofa8TxUMjV7supVJF0SPIfCw4GzyrM1cx7iKfhVkpZsxa9n2gp5QomW9VurvH7vfJCGdTlMxdxX9mjRxb1tbEr7rs96Sq2A2whO97bOdibhpza9g9mJdwoetqKxgbDSYwNbUghX9dRZ6I+DjxHUg1z6ZE+YI2gmSpRU6DeGbaZzL859dX01BtviYAaYv8sXowvIErE4vv1RfIHShLMDJ+wX47vv6dOuK+fJMI9wN7f6KsCdxv84smJ/hzmsuaCFZ7s+5Lfx4OW3e6LGKIfMQfYDctgeysPAGD8lBx5nkcbHIx7/wfh0ljvm6dmvUpAc5sjPwV7hSTFd7Uv7Z0tew8CHIZOV4y14Pa99eo9pNxX4GeqWx6jrd7P5vPxOYZuL4ZZyO9GHQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.12
Release Details
UpdatedJuly 31, 2026, 12:19 p.m.
Changelog

Added

  • Jump back / forward 30 seconds on Now Playing — podcast-style −30 / +30 beside play (issue #6). Mini player stays simple; open Now Playing for jumps. Keyboard ←/→ and MediaSession seek use 30 seconds.

Fixed

  • Rapid ±30 seek race (web + mobile) — relative seeks accumulate against a pending target so double-taps cannot both read a stale clock and land on the same position; absolute scrub / track change cancels in-flight relative seeks.
  • MediaSession seek offset — OS/browser often advertises 10s; product hard-locks seekbackward/seekforward to 30s to match on-screen controls.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignaturePOnP8cp5nA8/cw3K2jjsWjDfLC83cAhtbGU3l69+0EIJwwgBfcGpYHK4N1bgxVRqDjrLO/4MJe3LDAmQbIvNLs+Tqv2f4QlE82LfCNS5Pqw0jQWWamR+irc7JXdMONcKvdSZaExWph3ySYcgGU6ABKGAl6K4PWepNaDc4P411lklYFcv+WXr60B9j5euPNIvr3zffXnpvsXzID9JoN7PAO5krreThU3lQHjjuivvKXLq9EZxyhHb91/KoG47VyFMIr1BJgu3JLhx3RkJoSNCUJaDzWnHVCO+2nizMyTBXF52PyF6ikLuVInaY9DOtcmvFAGSyME/gUHSzNSwI30yBdJCKawj9cKOGdXODy4UV0MDQfZjhl814k3Hdv3TDMNZ4yeGIjFpMp14vCBLvNbIe3h3wMpayPhGq3iEhDKu1UXO4WKVtFGG0+zDpuQEucF/fdWyuXKrX5qzK1oS1JNSmLC+/ZaeDdWBF8R5wKIBhGoLz3/NScsYeRcX+bNgJNDOHWNzzx+gdllrjyPhYmJmliIkr56Z4337apsLiosLi0DFS1lM7YCQ9MI6x0mzwEbAzRATLJIfTJY3nPCHLEuwJOXd65TNnpkwKfTCIpwna95zZRq+4vMxK0q6YiYNcq9XwfY7ULt96SGWcdhsKb14793w8xXUIQx+zcEPSpGlv+0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.11
Release Details
UpdatedJuly 30, 2026, 9:38 p.m.
Changelog

Fixed

  • Fatal on every file move/rename (issue #7) — NodeEventListener called the non-existent NodeRenamedEvent::getNode(). Rename events expose getSource() / getTarget() only; the listener now routes through ScanService::handleRename(), updates audio index paths in place, purges cross-storage source ids, and never lets indexing exceptions abort DAV MOVE (copy-without-delete).
  • Folder move index drift — renaming/moving a folder now rewrites descendant ac_tracks.rel_path and matching ac_libraries.folder_path prefixes (Nextcloud only emits one event for the folder), then assigns library_id immediately from the new paths (no waiting on a background scan). Previously unindexed audio that entered a library is discovered with a bounded synchronous walk; only overflow queues a scan.
  • Copied audio never indexedNodeCopiedEvent is registered; file copies upsert immediately; folder copies use the same bounded index-into-libraries path.
  • include_subfolders on path resolve — library matching for node events now honours non-recursive library roots.
  • User/group delete listeners — cleanup failures are logged and no longer bubble into the core delete event bus.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureJ4PQtIV1I7xSKw7cG1ijV0lZ2KjgD63Y+zrmRuXSjlmLYNiksrZqv54YwWcHR3SQthSxBPOC/8h8rQ8JOHB7nWBwcs9QBB4PgU5C0F5nCnmB2Mb9Yf8LelSAdRrcZV7U3Eyf6X9/Gr/JqcOz6WgE0N2Eg3gyoDWWFmnnd9A2hqprazXx7wthwWOdi5+zA3umOjKJscQdjXKeJ/Ihs7tuFWmv1puISUFNhLj5UycCeNl+1vQ07JbAz++uRIm0QRVeJzAqt4hXBkGGaLzLW0teAkZnbEmCwLhZTrgWqQXVw9qYbnoY9cmWoMNR6RF0ShFAtvW97rv9u0XK4cRHuilmC9NP8KrfRMAjXSBE8fZrvCy+FgFlo6neM8CngcUgHd6n27vgArhWq1c7lQpbONj48jhV6dLINJkTIJ6wGnBZcPBnqhLvOWwM/574wj/0WoBP9oVYlKALsV6zCvp7dlRPZeS85+HFiSeXw3vtUKxoQKz4T+vYYupNjZGYTNL55THtH5Kgn7siKeyNiaLfushQRmvWD9T+7flZmgogs5zWxet+OjRO2WWqQeuCh9L2j9EtW527UYrO3QecCeu6Cj38+7WW+S6t+eeFJSXCotzh9X6dYXVnUCUOyrF0WwGS3huHPfJJsJqYWbPaJ7AOR+6XPr0dqKfZlnjZqFGOKulJxuc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.10
Release Details
UpdatedJuly 21, 2026, 11:19 a.m.
Changelog

Fixed

  • Queue-wide listening speed — changing speed on Now playing now sticks for the whole queue. The HTML media load() algorithm was resetting playbackRate to on every track change because only playbackRate (not defaultPlaybackRate) was set before src/load(). Both rates are kept in sync and re-applied after load/play; the UI reads the session speed via getSpeed() instead of the audio element.
  • Keyboard speed shortcuts[ / ] now persist the new rate with the queue/session (same as the speed control).
  • Settings default speed — saving the default no longer overrides an active listening session mid-queue.

Changed

  • Now playing speed control — clearer “Listening speed” label with − / select / + controls, hint that speed applies to the whole queue, 44px touch targets, and WCAG-focused labels/descriptions.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureYzRV2/sof1CISYuL/0VSftxtNGIjW6NT6swdgC1ygQ/aG/9huRnCOo23g//CcTsOPKMDgM+lpty6YftiHdDXhXS6dzbIcSqdDXuBOcHyn0fTyWHBEF7p+APMswQd5zMBhXfsxje2IXCr3OKyUIUbbSNrj00FFY1dpkS3M2oO9ud8xQ8Hld0cUcDtsw6rSmlC4kj9FN+6+pOrT1P2qMGOgvgUYf96HL5wY6oFRZTgaXJ0itz+MaHI/uvlHclzxR0FcTQqtMljaiM6qcwT81yjfxOTjv/Bs6i/B1YDKwEUc5I8+pUP8zye3sqgPmmopwzMXEpuPpM6U54hABH8IADCniyb/VZHTmTJoHz+OhctNgpsQcNc8BojVaaFa66nY17qHOnsmvlc0P0xPJQzBfXu3M4wnsepyGQPZqtrQ/2IsE8S4LLyqWn0wi2wxNbL/Il/+oHITMbFwKyd+pVpxroAunprQsYe5T4g1aUjgANSKTTmbzMbWzb7k8CIYmAhine/1U3stAfuojIgb8K0HNZUI52OPoTuC4dSiVaGq2zWmQeMy8QantICnBSFRlaxsWK0Mk05UTPCNQYX310Wmh5jWW7lbQLBxw4NdJeObbCULKdH0OkbHKfJiXRNtrwa8bpLzeTFv31peFxEFLyHFiREh7WGjUE+fUdmHUjZm2D66Mw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.9
Release Details
UpdatedJuly 15, 2026, 10:25 a.m.
Changelog

Fixed

  • Favorites listing regression test — unit and integration tests lock in hardened loadFavoriteFileIds() behavior (issue #3).
  • Native widget scheme on forced themes (issue #4 follow-up) — color-scheme is now bound to the applied Nextcloud theme (body[data-theme-*]) instead of a blanket light dark, so select dropdowns, spinners, and other browser-drawn widgets no longer render white on a forced dark theme when the OS prefers light (and vice versa). Modals and toasts, which portal onto <body>, get the same binding.
  • Active sort chip contrast — active filter chips paired --color-primary-element-light backgrounds with --color-primary-element-text ink, which is tuned for the solid primary color and became dark-on-dark (illegible) on dark themes; they now use --color-primary-element-light-text.
  • Stale theme-bind.css after upgrades — the late-loaded theme re-binding stylesheet is now versioned (?v=<app version>) so browsers pick up theming fixes on upgrade instead of serving a months-old cached copy.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignaturekTA/K5U++VfgdYLxsxtjxZdHoshbTcsnF1xoQPIi3JUCH88gDobRUpY1tWJ5WggZxWlve/HquNdt6ZcR5WSB3ymajBfWv3+vTxJWKHNpcg83tFRoq4MHPlnwHAaasAedaIYxrtg9tx6WL6pv4jof/8eN6Qcc0wmqOceCYxnGN1pSoPFpA9euzSLQtti1krxbYI++RgT1w89bvKwnAi7ToMX2HuqzwmU0z8jaSyeI1fVXzo8sWT2IJrYLNMfTdZmgGUjELW7dLnSR4OrjP4STsBWiyLHJrWLlqfa3SBr1aVQdLLMM0QGrnYaPOKEFaFI/WAnOsTYKbpXa8RUiJKnw7xcYaHKDJ9UqJCe4b8rn6/kW+hrXgFvEov9MSWWgPxlohEO7TYPB/JM/71m3KnKkT0oC05UMrbBTIV9KHg12RktHi/FOP3QZazySt7M+vA1oQpFFpLqUG+Ts4i1dft9gkftk38FH/tX+g64yrxNfIGOz1/snR8VaIjCi71loLM6MPrcFGoP0UGuorQKRRi3EDLJbgJLW9yQrhY7WrtfozmoRIPpL7ZDZG1PzF+ri1UkXYrSOY1hSQOsNXfxvxAdM6tZK1ajDdnqnAm3VayKeAqnHXvVOnYkPjyvu+8IfaAAwyNqVBNUMu1yL3Cg1SKgGmctC9wzJ/srdMf1iTwp9ylw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.8
Release Details
UpdatedJuly 13, 2026, 1:36 p.m.
Changelog

Changed

  • Nextcloud 34 — raised max-version to 34 for the current stable server release.

Fixed

  • Scan memory — library scans walk folders depth-first in batches instead of loading every audio file into memory before indexing; cursor now stores a walkStack for resume.
  • Concurrent scans — only one worker can claim RUNNING per user via an atomic DB update; lease heartbeats prevent stale takeover mid-batch.
  • Playlist integrity — reorder and delete run inside DB transactions so partial failures cannot leave inconsistent sort orders or orphan headers.
  • Mini player volume (mobile) — volume icon opens an accessible popover with slider and mute on small screens; desktop keeps inline controls (WCAG 2.1 AA).
  • API error loggingsafe() and service catch blocks now pass the exception object (['exception' => $e]) to the logger instead of a message context key, which the Nextcloud logger's PSR-3 interpolation silently discarded. Internal errors now log the full class, message, and stack trace.
  • Favorites listing 500ITags::getFavorites() may return false on transient DB errors; LibraryService now degrades to "no favorites" instead of throwing a TypeError that broke /api/tracks?favorite=1 and all views built on it.
  • SQL portability — count queries no longer inherit ORDER BY on non-aggregated columns (rejected by PostgreSQL and MySQL 8 with ONLY_FULL_GROUP_BY); MAX() aggregates use selectAlias() so library sync revisions and playlist sort orders are read correctly; internal Doctrine ArrayParameterType replaced with the public IQueryBuilder::PARAM_INT_ARRAY.
  • Upsert races — concurrent progress saves, listened-flag writes, queue creation, and track scanning no longer 500 on unique-constraint violations; the losing writer retries as an update.
  • Playlist integrity — duplicate-name detection only maps genuine unique-constraint violations to a validation error (other DB errors surface as server errors); playlist items get a stable secondary sort key; defaultSpeed is clamped on update.
  • Favorites shuffle truncation — the client paged past the server's 100-per-page clamp instead of silently shuffling only the first 100 favorites; removed a misleading 500-track request limit from facet browsing.
  • User-facing error messages — machine codes like internal_error are translated to human-readable, localized messages in toasts; network failures get a dedicated "could not reach the server" message; fixed "1 items" pluralization on the Playlists page.
  • Dark / high-contrast theming — theme-derived --ac-* tokens are re-bound on body, #content[class*="app-audiocheck"], and #app-content.ac-app; css/theme-bind.css loads after Nextcloud theme stylesheets so backgrounds and ink stay paired on every theme (fixes light text on white backgrounds in dark mode). Added --ac-surface and corrected --ac-muted-strong mixing. Guard script scripts/check-theme-tokens.sh enforces token scope in CI.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureEAfydT7TAjAp7u/mC4U4BMg430xVorUQLwN9NJ2t0FOyr4iRNrvTX+twWERHgHflQ5YKRTAelQ/Tv5cqesv10hAeRkwdKbI8Ziz2dgVydD6aXMPzqCqzAXvr89PWutU0/GG46O2QEw45mg5qmETDfG88ecH5LwgUuDgTT2C5306oAKghnWZeGQ0MjiZMDPe4AU8d13pVVR9PxqaAlKgzQBAd1qDrelEeRreRA0VKcCqr2emryvfCZNbsFSeLxKVuIQk8Npd0c/QXVxqo4pk/3dxMcpB5HW5jucKBKSob/+1Am4dH7YK4o194GEOhnMuPD7WGDVZwJtnjXykJBHaaxJWl0Un5R1/mncAOPdur2dD40OvZXWCVQKL8Qm3MAqC2YgaPOwewsEHshvrA0MHew4BoD4iyjGBk36Ckry5IG8dsE7W0gDRS1PXOEJH/VjgKZtg0vNOuONubwuhW5N7+DSkJaCzUXwZJr/sXMgbD6R0dxOKs4d04wfcGm//ft+YTX03jZ8az5NPV1yNvM6YXZ7aDd9FxsMRtQloxq9+/C3Qha9kYJ5lP5Xk+s/XoPtQpY2N6RZEQOUX4ZqZ4sNunrao4c0F3XeUC8q13lWsQBma71iG9wm8GJ/SkJIR5ejaRIUTTqhC0ztJFwTEYXVGg/P6Z9cLr+Estq4QKmOT7r6I=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.7
Release Details
UpdatedJuly 11, 2026, 7:39 p.m.
Changelog

Fixed

  • Scan memory — library scans walk folders depth-first in batches instead of loading every audio file into memory before indexing; cursor now stores a walkStack for resume.
  • Concurrent scans — only one worker can claim RUNNING per user via an atomic DB update; lease heartbeats prevent stale takeover mid-batch.
  • Playlist integrity — reorder and delete run inside DB transactions so partial failures cannot leave inconsistent sort orders or orphan headers.
  • Mini player volume (mobile) — volume icon opens an accessible popover with slider and mute on small screens; desktop keeps inline controls (WCAG 2.1 AA).
  • API error loggingsafe() and service catch blocks now pass the exception object (['exception' => $e]) to the logger instead of a message context key, which the Nextcloud logger's PSR-3 interpolation silently discarded. Internal errors now log the full class, message, and stack trace.
  • Favorites listing 500ITags::getFavorites() may return false on transient DB errors; LibraryService now degrades to "no favorites" instead of throwing a TypeError that broke /api/tracks?favorite=1 and all views built on it.
  • SQL portability — count queries no longer inherit ORDER BY on non-aggregated columns (rejected by PostgreSQL and MySQL 8 with ONLY_FULL_GROUP_BY); MAX() aggregates use selectAlias() so library sync revisions and playlist sort orders are read correctly; internal Doctrine ArrayParameterType replaced with the public IQueryBuilder::PARAM_INT_ARRAY.
  • Upsert races — concurrent progress saves, listened-flag writes, queue creation, and track scanning no longer 500 on unique-constraint violations; the losing writer retries as an update.
  • Playlist integrity — duplicate-name detection only maps genuine unique-constraint violations to a validation error (other DB errors surface as server errors); playlist items get a stable secondary sort key; defaultSpeed is clamped on update.
  • Favorites shuffle truncation — the client paged past the server's 100-per-page clamp instead of silently shuffling only the first 100 favorites; removed a misleading 500-track request limit from facet browsing.
  • User-facing error messages — machine codes like internal_error are translated to human-readable, localized messages in toasts; network failures get a dedicated "could not reach the server" message; fixed "1 items" pluralization on the Playlists page.
  • Dark / high-contrast theming — theme-derived --ac-* tokens are re-bound on body, #content[class*="app-audiocheck"], and #app-content.ac-app; css/theme-bind.css loads after Nextcloud theme stylesheets so backgrounds and ink stay paired on every theme (fixes light text on white backgrounds in dark mode). Added --ac-surface and corrected --ac-muted-strong mixing. Guard script scripts/check-theme-tokens.sh enforces token scope in CI.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureOYSJOAEPFmNzWN3GZeKQnDwpPjDre+YRdIPE6OCmwPAgZillckDvFX20VFmeDaLpxiVh9P6Vg/OerpU/SHxINbKCntGCIV+5I/mJX5rwx5rpdW9bjN3f58J09bqnkUo8s2sCGlKq0y9neu3ZHuRhPKGCuLVbJPP7LBs7RXDJxQjxWNIE35PflwsixAD3E2M/iPkH3jJV56AJKviy9cQa5Wa6pBGFDBb9TxF8XLo0tckNp3SBQ3F6jpcA2prvoglKQl2vIlYXb71iyXhkVYYwteHXmLmeOwiDGrYXr+4TvNgN2mU+ZjfptHEFvVKJ0Ldx8RSU4Q7R4tU9RZtUwxqqmDnRpBVBR5m4jBdBcAagjLMBg6zeqtNdJodSmyzQLQmDs6Jhtu2w+iOYd56cdZMjlV+7y+RtpCc8o36zCasZco8UbMFhHrCZ1LxAoDoqIcZONynmmcgKIUof5xkbPyE8I9xtnool86ye7HiQOMDNjYyRoNFygPtf1vuEu4UXyAZkY6a8XNUZIWUvjEfPn/5JuvcjOsErcbKFUKkuPN9mDhYbKHJUo/ESNyQrjjfhiEeMyl9x8NFNAN6B2qx6pt32NWCqtYK1K00KRpP9nJlVD/IWxvs3zJFh5M/G2k3fDH5CRV/NJiWDYo8CwNschMcaO6oc+7KH4x2UssmC033rTd8=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.6
Release Details
UpdatedJune 24, 2026, 9:03 p.m.
Changelog

Added

  • Global search — shell search filters Home, Browse, Music, Audiobooks, and Playlists with debounced query sync.
  • Sleep timer — duration, end-of-chapter, and end-of-track stops on Now playing.
  • Playback start choice — Play all / collection actions offer start from beginning vs continue when saved progress exists.
  • Accent-insensitive search — normalized shadow columns (*_norm) and migration backfill library search across web and mobile.

Changed

  • App shell — persistent page chrome (breadcrumb, icon header, scope strip, grouped nav hints) aligned with BudgetCheck and MobilityCheck across all routes.
  • Section cards — Settings, App settings, Library, Browse, Music/Audiobooks, Playlists, and collection detail use shared sectionCard / collapsibleSectionCard layout.
  • Track lists (mobile) — library browse rows render as bordered cards at ≤767px; collection detail tracks match the same pattern.
  • Playlist detail actions — secondary header actions collapse into a More actions menu on narrow viewports; Play stays visible.
  • Messaging — polite/assertive live regions and toast stack for status feedback.

Fixed

  • Browse page — removed duplicate inline page header after shell migration.
  • Play all — header action only on Tracks (Music/Audiobooks) and Favorites (Browse) tabs.
  • Integration test runnerrun-docker-tests.sh resolves the Nextcloud root correctly from the app directory.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureJv9Cfgd5KiHuIhWVcnmPvc+tjX9hD+iP5PRAzEryrCAlq0yfNInv9T82hm7Sw0Uug78ddijfkZ2dgD2vRZm5Pik97LCUi8R8Vck1U5LU3aSVhrHNH02l86ntKWjjhiIUj26X589gMc1DcB0nNrEjrUCf50RMtrLcB3qR1WBuzAKPW3GbA5c/zkB56nhPelVSXFY99ksX1wwNFQwvNHQ1hUNziNoaQTI5EtTr3lizvigJvY7UAZjlIdTZe7c2Gfn2YVmto5YQ7EYEfxZfQIhS3NUBDGdhpAZV2wbSFDYpcx/AxLOikAp6rU7mgb08cAsm1G19dWcSBGTFRhVJ+bBucZXzY4H1siljWo7bVp47mXBCL4TxakLtaW4TIvaYJ0KQ+hLU5Rp1JIp4fdeyXIQ4XjoEBsFxpjwme1h1z0/Dp6tGsCBcd1vuZOks3KFD2+758sCVVqz+v+sDk6+fJL7M5YK9DsHRt8j5CxVFqTfsQI4Ew87pONnYruNABlOfsW0v1AnyKI1da/oEti14Ki6ONM0sWznSbGIS00CSbR7T4wiP2ev1HFQSe+hAlTEqwyP0UuNGR1QKvlTXVdL+46M8HBx4sqlW8wfzeEFnXFsH/IQHwuw6bgPDTIoemTg/Kgfi2m3XIqdaBruQ2sXo+yMzZZ1s+q1yKA5WLDBG/D4Y0n4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.5
Release Details
UpdatedJune 20, 2026, 1:59 p.m.
Changelog

Added

  • Paginated library APIs — collection, facet, and playlist track endpoints accept page and limit so large libraries stay responsive in the web app and mobile clients.
  • Load more in the web UI — Browse collections/facets, Music/Audiobooks browse, and Playlists use server-side pagination with Load more instead of loading entire track lists at once.
  • Play now / shuffle on full lists — playlist actions fetch all pages before queuing so Play now and Shuffle play cover the complete list (with the existing 2000-track cap).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureDyugqURQcSAJsnY+5whWW+8l45Ca4rETbg8Ggr2DLSJaoNi1PE3sRa54HAWGBu5emmP6y1qOTo5O4qqTCz7R1s+VLQhB7S2UgbNyx5OyW0Z7wJ1i34W9Ve+xQLiUbrj/opqCKZiQXzqttSOXFpeT5MXOa1eykRYXHk1ogIXyA9WULjFasagxE0bJ5MqJdKLg0e+Iw3jnnBP9UDI+LOEYyGJx/AZqwsiL7wqmLcBQs3EVgF2BeMpD5jqaFyPPVodE86fqKFM6lUcC6dfxBlkrT+mgfg9Md0/gIG7FQlTljcjnpUEd5eeWp4/8K05mOiPcW8II1B1DGM4N4y6+yt0U0x2Vz22rI0wnlpBgOIrCu1b4JOiwkX60/NZwsLlhAy1v2M7+qxyN/FU6JlJM6ICo4jEnkWLXJ820IbliDDmhm/G6ji9O5NDQJFuN9h99ez80kz7g3x/CeflE3OJGmqWWR+1h7MjvYtL7AznGsqlnBs/H8ed9eqjIcFPmRPGTVXYtwRRDYLjCb2d3DGOWEzjeQVWmxQfkpm3D8UguefW7xhZX1L/YonrP914vDK7NXxl3eNPll9rQGxnCDgCfcU1RXLGpSAzYZ9VtO9TEf2y9azdq+7tOLQuI1b0SyUTONjXYOldJGXanC1AMC/QRzT8ELFrl0+D9rKeGJ1dQJyyfQa4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.4
Release Details
UpdatedJune 19, 2026, 7:17 p.m.
Changelog

Added

  • AJAX cron scan ticks — when Nextcloud uses AJAX/webcron instead of system cron, queued library scans advance via /api/scan/ajax-cron while you stay in AudioCheck (library polling and app-wide heartbeat). “Scan now” still runs an initial in-process batch; remaining batches no longer stall until a full server cron run.
  • Stale scan lock recovery — abandoned running scan rows older than 10 minutes are treated as resumable so large libraries cannot deadlock after a crash.

Changed

  • Library cron callout — explains that scans continue while using AudioCheck on AJAX cron hosts (system cron remains recommended for large libraries).
  • AJAX scan tick rate limit — 120 requests per minute per user on /api/scan/ajax-cron.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureeGQI1vbXZcWucftZYcIA0TsZ2vgHuGiAUqXs/l09B/vCADzp2LDJ1qT6X7I8SN0tybnfjYv0KUns/VcMjYZI/liyDB9AJSQIYGO/9hwPKbjyeqLPiXbP391GwHpoAcZtZs3KJQY/Ufyl7+QR44o//+81C4FQkovYK1vhQFJLUCjdTncMiESHh8ewU57NM0jqtsU1zx+aqYZLS4rkg/K1sdQq216A+L20+g7bGjMEa4NwAzrApmnLUNhTW4NjVdwAHjJuhrahVA/HWKhgo/Sakz7TlttO8T9sCzdUl7UOejDn0KnQO5XmYFqkxa5i/M9atHeIsij7L7KKKIbvReYujL6MvReZQchzMTYnVv39kZZ2TlfrsKwrevQRf+CKNczpp0tsqbrL3p6lo1I9D9bb1Xt045qA2c2q8IL3b2fSCY7emGGJWvQLtDsEZ/uAg28s6pK8wuur5PJWBFRV3lRiQtaIIgjtdggPWK//+Mo5+58hYgM1EyzjC/92lmnO510xXgEocC1JRRjlrYCoZGvpCmRFEza9woRsdb2dsPedx/XuIO/dvFpQ10Zw4jRmVTzlr6bguua8stUJ5d7P2ltRtVHNOtJck4it+pxqzKnwq1e//0QdQIef17EuUq7TgtXpONGwvGMioKTzveZ9XprZGfGUqDTLgZgpcaSyJuZDLvw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.2
Release Details
UpdatedJune 18, 2026, 1:10 p.m.
Changelog

Fixed

  • App Store screenshots — screenshot URLs in info.xml are now single-line (whitespace in the URL text prevented the store from loading images).
  • MP4 podcasts missed during scan — recursive library scans only searched *.mp4 when no audio/* files were found; MP4/M4A/M4B files tagged as video/mp4 are now always merged into scan results.

Added

  • MP4 audio container support.mp4, .m4a, and .m4b files tagged as video/mp4 are accepted at the file gate, indexed, and offered in the Files app (extension-filtered for video/mp4).

Changed

  • App Store copy (EN + DE) — accurate format list, clarified server-side resume, removed unverifiable WCAG certification wording; accessibility described as design goals.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureT3vGGbmLd07nyi0eKXGtXs/jwWf/17iRFXBQQc0fdpJDqvMcU20ZdcyR2LVJoWdX8FimEA1VZmI0tVmFDvUrT5bdPNNn29O09MAVd9ERPhtcTWagy9LJ7roXxaHZ6ZiB+PErl2581x/+Hrf90AHcHNcOcqZ0gE3dOUjCE988aZ8Z7fXQ22LWhkJQFirlO1uq30WP2vqQ2k2Yt5fOvchmB5joPNZHnbwg5Vndmitv3PTaTruytzGoUzTrzPD0n0E1OPO/lDjeslW32UMiK2DRtqUUVvDPnrzLA3L5IBcST1WU+N8COf+agslTqLp5M+m8+LKrxuQaOh1GX1Q824IFgkW/8zizXyt45PWJSyFQYNOtlEspl+IX8hKyT2gWguxhQP6kefYBhb/WJrYcemcwcey8c/StlUKYjU8bIulSTl+Yd95YO/sMaHSneeY7R7pIX3Z2OFRjoPGVaMmuoB/hdQLTw2/V8DHCHzZlfpQHmZblCQ3k2p0o2gKS/qlgUgqtEhHbs2VBsg3ugU4Iji1z6vGTDe++R4YIjCawU5xUi8uRV7KH7A8letsHsa2upRHfR0Poe1r8TWni6qBiPd3ZtoGxh2U3QDhccwHnmUYPxE2Es2cZ4Um9t0SWX0TId4+7DQs2uatnHx7MrJaCIMlGlId9VGGLUQFWQD8xlcUn4lU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.1
Release Details
UpdatedJune 16, 2026, 8:13 p.m.
Changelog

Fixed

  • Queue destroyed on reload / app switch while playing. When restoring a queue that was playing, the browser's autoplay policy rejects audio.play() with NotAllowedError on any fresh document (reload, returning from another Nextcloud app, or a deep-link landing). The player misread that benign rejection as a media failure, marked the track unavailable, skipped through the rest, and then cleared the durable server queue — losing it on every device. loadTrack() now distinguishes autoplay/abort rejections (keep the track loaded and paused, ready to resume with one tap) from genuine media errors. The cross-device queue is preserved and recoverable.
  • Durable queue no longer discarded on a real playback error. A track that cannot be decoded in the current browser is treated as "unplayable here", not "deleted by the user"; the curated queue stays recoverable on reload or on another device. Only explicit user actions (clear queue / remove last item) wipe the persisted queue.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
Signatureai5A4WCVeltI2oihLkhMkkv3ONBNXb4T8FTzRwIjVSo0ns7GY34IwJ4iM5YS17YWC9qJVWEyAnScnNEkLcFMvJGiIvBH+TAzFZcGXzh/v2CKEZU87Dhd7ddczCMoyJ5vRk+tK3oD4idftiC/8HvyxE19O7QQv4XDO8+U+YX8MvNflhqo2on076ICOK3qYlK4G/KsNkXlv9YryLVJ+GjSkXVx7hWFQeUXrbyqmVNDYBtLpfo5yr8dQZfWmVq822TIlpqXKlFJF8AHPfixuTbaq3VE6JvEC+zvy7ngEpnV5s5Sh0hoHaB731PrGzhXR48hEvdfgUVW7MkyqL0pE0bEcyavi9NGw9HuzLshIJg7Xb0tFy0yZENOJhn9oiVuOiwRqTotiBCTIDVlDziRRNDDKfIDlgGagIEKctBoN8AuVSku0IRN/4GKYEORVWGqB/ER5AR0LksqSCFIA9VRYdtvvvkKyFbovZUAyLyW61miWtGztYoMTN5//708ooWc45n64KfL5VfTLUIV5hrJAkz1DtwlPBpGnOYKhUIVG9h9wIbT2ij8cCMeT2jSdrpAIn0hroK1hhb2b4Zo1Hx8BnK7ekeLLC/ay481STM/CC2ljPtEiepgjT1OC7+Q+Fc+Tt3rI901YMWi9eFqumNW2s88EDqdhHzdWA87RT6a+QjledY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0

Nextcloud 32

AudioCheck 1.2.17
Release Details
UpdatedAug. 7, 2026, 3:13 p.m.
Changelog

Fixed

  • Browse showed audio outside Library folders — the catalog no longer indexes or lists tracks that are not under an enabled library root (for example only Privat/Music and Privat/Audiobooks). File events outside those folders are ignored; moving audio out of a library removes it from AudioCheck (files stay in Nextcloud Files).
  • Removing a library left stale tracks — deleting a library folder now purges its catalog rows so Browse/Music/Audiobooks update immediately.
  • Empty-library scan no longer walks the whole home — with no library folders configured, scan clears the catalog instead of falling back to /.
  • Folders facet invented parent paths — Browse → Folders no longer surfaces ancestors above your configured roots (such as /Privat or /).

Changed

  • Library UX copy — clearer remove confirmation and “How it works” steps that state only added folders appear in the library.
  • Nextcloudmax-version remains 34 (current stable 34.0.2).

Tests

  • Integration coverage for library scope (out-of-library writes, orphan purge, remove-library, folder facets, empty catalog).
  • Unit/contract gates and mutation gauntlet for indexing, browse joins, and remove-library purge.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureCQSfvNab+sLV0AaIzS3PNSB7PJmM2jwDEtvmy1jzH48WPRjDTBDW0eUlMn2+EhCkfC1VrMhAEVnuFJ9/lDOrihRSJNJKxWmh6jYt+TQOl0tomIoVFgUawJSrtHhQq9JOhzoclyNxuykan3AZNrDC1jz7bDDPafVVHi+Fd1cFwliPvxtTdJ4YwLUqSY8/XopMmJgMAT3pnq3uQWp9IBKicIdQ33xN6pOpedrwcRQFPTtqCtoUHfsbpaogWwyk1UGfOe/4GD7sLq+hw7WVzbMli2rhQzPnJqYRogiGutC7AvuCuh2a/1L8Hs0P0PVupszYOP+C9ECKg+FNfGpdRHOxCNbDYv7JSNVAv/FxWMmmjif97GfQR+Ly1Ev43Rz6td9uoX7sFkgtK0ZPXhcXj+XYBbV2S8HfVOCM9wVglkh5wytK0u9+rsS1uDLRB9/FW7it9DSOIicEzIXNDQms5XJ1+c3x7+mAAYNmvIHQR8BVhC8e0jC7Ve2kOXL6jbS0lgvMuy4QwSO6kOLr2jMeghavRruOj2a1IDjST6tlgja0FLQfdVTFLRS7buJdOpSRCIpMb2RFHa9oG7ff2gvBUI8JlHsAdHroEXACzROT8C2jODK9hNrmRWAD0bjT3a1pD+TS3Amh13sS+iNfGAOr5ZGp8VDZwesbYK0v36NzBMxSY3c=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.16
Release Details
UpdatedAug. 4, 2026, 9:14 p.m.
Changelog

Changed

  • Library folders UX — folder rows are a single clear line (name, path, track count, Remove). Content type and nested-folder settings live under collapsed Folder options.
  • Add folder flow — no content-type modal; Music / Audiobook / Auto-detect shortcuts, path-based type guessing, and automatic scan after add.
  • Store listing copy — README and info.xml descriptions clarified (free AGPL web app, formats, get-started steps).
  • Nextcloudmax-version remains 34 (current stable 34.0.2).

Tests

  • Journey + axe WCAG 2.1 AA coverage for the simplified Library surface (library-folders-ux / nested-scan e2e and PHPUnit contracts).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureUubMG3p3B/DZ3peLbwILnZdU4kKfomEhp5GJbYHG4DoXx3CkKAzKLBRdNqAn3oRVJnr+b1KGmVk2J6R7Vf6o32p7TCJWncl8vvNCu8xs/+T8bzvNNy/5QroZsYI7bRAGD1WiUINHvHzdh308HOXPfEsk1vpVGEIOeijX2k43P72uYhH2RsRwS8aoOJVo/Sreo6Q9UYiqJE+q0hldHxLbpBZCkhk2H131GA6SyAoNgZw/+VpFYV2dn744TTh9Fqf73sp0mDofKFhlJ88FDVlnF4s/gAdTS57WDtcbGcabcCqYpGe9v/kLrktkw8Fjy8F1wxW7BcG8D+RZ6bkN5XQmmo8iKF5+cRBz4BS1nDza/E9NK6OcuoWHF9gj3lOLcqPCdy+ECILKV+mlzgJhv9+wocFLyft5j/eQbl0TwRas7CVf3RQ/Pr6XJp7v0ow5WUD5R0ByYFXxyQuUa/0RO1bNdsrW2ymBe6LCbPtnzCEP6GcbBeuqZuL9Oijn/5M389DRecA9FyOpGlZSnG6wIM92ViUekHmGdR+t4Qj01ucV5z70swLve7cD5kxlQFAxwH8chdLacQqbJCrZ+f5KKfG7doTW6p0USFIm5M/rkaozs1SpwM0T8XRu7VLFrnHiiUWodA7a8Sg839jYkrdqQ/eCj/mr5KtIoXzIuXGqT6olu8s=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.15
Release Details
UpdatedAug. 2, 2026, 12:13 p.m.
Changelog

Changed

  • Packaging release: version bump for App Store / GitHub republish; confirmed Nextcloud max-version 34 against latest stable 34.0.2.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureI1SMSyNnozaIb1DCCg2uY/BLzxKDfhYxeBpmy2GdCSb4N/6EWoclCmNazmCodz7woCEOQVKPr62s0jyJ5UZ4xLEcIS4IinW8vJCHQKsPMURXao/YNaVkn9wIflgz7isyd7El0DXjUBbqgIQltY1QvrlA+HL877NarmEa5JOf8C/itN0fSUp1De68b75obdu3vLpZVCDtnMVOt7G3wobjwe0pQ+ArxvSEUrrWi7hOev9ipaROW4eP52dAH89Yn7BBzkHoAwtSP8lD4/7BT2heWAR4SrtMcxffmo0C9ZRwCNS4k55T7xfe3bhQtiKJn2EsvwDy6PnJK1QY3IAbw76Dkbwf9rEqJgqZh+VVNLJh8XBKAI4n02J9A/iUEAEtf9uf2Gxzza4kk3SHCDrTkuza0CUnUuFsFzIbSILfG3vH6gRFF+sNyOkce+k2C7KbNumVj6PxjtTOCWDcwyZhj28jEKx2sqtzfZGoo5k4Z+WGjeuqYTFam6sIm4vZduVfnOaO5zmKiWjFWc6BrbneKj1o++gR/GimY8Wt5YCvLBi0CWgXM2zKrhACg+USk3B4LySIT5WXTiYn/L8/BPugZZLDfRnlN+Xk6yl77ZERA41jmMkKeoDjow/xCYEG37fhau5oKWcr1K8H5uaJ5wQeVFETt8ipibqXCZmc+W9dZAmko7A=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.14
Release Details
UpdatedJuly 31, 2026, 10:58 p.m.
Changelog

Fixed

  • Nested audiobook folders skipped during scan (issue #9) — recursive walks no longer drop a book folder that sorts last (or alone) under its author. Layouts like /Audiobooks/Author/Book/*.mp3 and /Audiobooks/Author/Book/CD 1/*.mp3 are indexed completely.
  • Scan cursor size on deep trees — walk position is stored in a compact path+offsets form so deep Author/Book/Chapter stacks stay within the varchar(4000) cursor column across resumes.
  • Multi-disc grouping — untagged files in CD n / Disc n / Chapter n / Kapitel n folders group under the parent book and keep disc order.
  • Same-second scan prune — a new full scan picks a generation strictly newer than any existing last_seen_at, so tracks indexed by a file event in the same second are still pruned when the file becomes inaccessible (e.g. share revoke).
  • Batch-boundary infinite rescan — finishing a library root on an exact SCAN_BATCH_SIZE boundary no longer persists an empty walk cursor that restarted the same root forever and skipped prune; pause only while the current root still has work (or before starting the next root).

Changed

  • Library UX — clearer “All nested folders” scope, an Author/Book layout tip, and Settings copy that names the nested audiobook pattern.
  • Walk depth cap — recursive scans stop descending after 32 folder levels (files at that depth still index) to bound pathological nesting.
  • Nextcloudmax-version remains 34 (current stable).

Unreleased

Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignaturekRn8Ins0iJGjq8QIE9RSXuWodovQaXRFp1l7YGcmUlmIOEmixZZvdpauj87CmbFfyUECJefyuX/Zyyaza+GhJj956AHQhEEg769KX8Wr7458OmKkfsMtPmTfE1u+NOl52FU7XLGYhkiuiiZzMo+FgO2o51CmWqL3qZUsIQsYQ0tV7i0czPKYeSe6F6eHLH/DDwzj2zzpi+wYOX/xmxpwcsCs4nRiPZ4fAfuQGUiZPXPVwz+/w8u9hz3wS0B1vxsQ2oorvsLFM4w/kYbK+xqyHt+7VV8OkOAwNKnZqGatYH5jMOnspmqKGtVeGc7TOzCISmTiry0gJG6gY3ph+A7SE4l27dHKOtXPZkKnEF6PYrvPN39G06nE5t1IvuUUr4463dR3zp7Dmi5a9e6SkkbtBRC46pO6MD7RI/1B/JtTILU5DcQBTDA2J24HclNCu2E8sULEdzoEqBraly3oSe8obWFjFw62iTITvkToieDkztuZ1LTICykEq+YmTrQ4qYPRnxA/crG1yVyl6r/NawDL0l1MWQJB004pOqmH2tjTWZOdWg7CRgiLn9bowIDkFL89TFo+Ej2LWxXyLXl602lgBqbwMrVIXoO+RSrn0usICB40zX/oC1ihaLHjKYGaFQiFQMHmIYfCQVVCWJRLFyVlo3+UDlZRxqy7AG1WrejoNfE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.13
Release Details
UpdatedJuly 31, 2026, 4:36 p.m.
Changelog

Added

  • Mini player ±30 — jump back/forward 30 seconds on the mini transport (same contract as Now Playing, keyboard, and MediaSession).
  • Hide mini on Now Playing — the dock is hidden on Aktuelle Wiedergabe (SSR + SPA) so the full player is the only transport strip.

Fixed

  • Mini jump aria-labels — PHP t() cannot substitute JS {seconds} placeholders; labels use fixed strings plus client hydrate from SEEK_JUMP_SEC.
  • Focus / inert when dock hides — keyboard focus leaves the mini player before it becomes hidden; inert blocks interaction while Now Playing is open.
  • No-op relative seek pending — clearing pending immediately when −/+ does not move currentTime (e.g. −30 already at 0) so sticky pending cannot skew the next jump.

Changed

  • Responsive mini transport — five-button row stays usable at 320px with ≥44px touch targets for jump controls.

Unreleased

Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureeeyzFx9yVprYFecyG2++BDonnwqVdzr5C6fwmGhOly0kfgLs87nkGK/6Gv1Y7RHH5tpSvpr283z3H3pSQoDqZhxPyiqBE56oBjfK2h19Ww51UInil7kmBICWps7KT8xK5tetj0ozFCkjeA/0VX+ueJwcspM1qHXTPL1EvJwRi0abmV699RajZrrEt7oh0dYYQ93Y9l5VJkjQ9Uws5oimqdj70NBN9JBbzqc6QPlubfeMCsU7DGMAuW3k6m8xVQByT6QzJzAHbPM/FpUwdY6jX7/ktYdZ+/OY4o1ofa8TxUMjV7supVJF0SPIfCw4GzyrM1cx7iKfhVkpZsxa9n2gp5QomW9VurvH7vfJCGdTlMxdxX9mjRxb1tbEr7rs96Sq2A2whO97bOdibhpza9g9mJdwoetqKxgbDSYwNbUghX9dRZ6I+DjxHUg1z6ZE+YI2gmSpRU6DeGbaZzL859dX01BtviYAaYv8sXowvIErE4vv1RfIHShLMDJ+wX47vv6dOuK+fJMI9wN7f6KsCdxv84smJ/hzmsuaCFZ7s+5Lfx4OW3e6LGKIfMQfYDctgeysPAGD8lBx5nkcbHIx7/wfh0ljvm6dmvUpAc5sjPwV7hSTFd7Uv7Z0tew8CHIZOV4y14Pa99eo9pNxX4GeqWx6jrd7P5vPxOYZuL4ZZyO9GHQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.12
Release Details
UpdatedJuly 31, 2026, 12:19 p.m.
Changelog

Added

  • Jump back / forward 30 seconds on Now Playing — podcast-style −30 / +30 beside play (issue #6). Mini player stays simple; open Now Playing for jumps. Keyboard ←/→ and MediaSession seek use 30 seconds.

Fixed

  • Rapid ±30 seek race (web + mobile) — relative seeks accumulate against a pending target so double-taps cannot both read a stale clock and land on the same position; absolute scrub / track change cancels in-flight relative seeks.
  • MediaSession seek offset — OS/browser often advertises 10s; product hard-locks seekbackward/seekforward to 30s to match on-screen controls.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignaturePOnP8cp5nA8/cw3K2jjsWjDfLC83cAhtbGU3l69+0EIJwwgBfcGpYHK4N1bgxVRqDjrLO/4MJe3LDAmQbIvNLs+Tqv2f4QlE82LfCNS5Pqw0jQWWamR+irc7JXdMONcKvdSZaExWph3ySYcgGU6ABKGAl6K4PWepNaDc4P411lklYFcv+WXr60B9j5euPNIvr3zffXnpvsXzID9JoN7PAO5krreThU3lQHjjuivvKXLq9EZxyhHb91/KoG47VyFMIr1BJgu3JLhx3RkJoSNCUJaDzWnHVCO+2nizMyTBXF52PyF6ikLuVInaY9DOtcmvFAGSyME/gUHSzNSwI30yBdJCKawj9cKOGdXODy4UV0MDQfZjhl814k3Hdv3TDMNZ4yeGIjFpMp14vCBLvNbIe3h3wMpayPhGq3iEhDKu1UXO4WKVtFGG0+zDpuQEucF/fdWyuXKrX5qzK1oS1JNSmLC+/ZaeDdWBF8R5wKIBhGoLz3/NScsYeRcX+bNgJNDOHWNzzx+gdllrjyPhYmJmliIkr56Z4337apsLiosLi0DFS1lM7YCQ9MI6x0mzwEbAzRATLJIfTJY3nPCHLEuwJOXd65TNnpkwKfTCIpwna95zZRq+4vMxK0q6YiYNcq9XwfY7ULt96SGWcdhsKb14793w8xXUIQx+zcEPSpGlv+0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.11
Release Details
UpdatedJuly 30, 2026, 9:38 p.m.
Changelog

Fixed

  • Fatal on every file move/rename (issue #7) — NodeEventListener called the non-existent NodeRenamedEvent::getNode(). Rename events expose getSource() / getTarget() only; the listener now routes through ScanService::handleRename(), updates audio index paths in place, purges cross-storage source ids, and never lets indexing exceptions abort DAV MOVE (copy-without-delete).
  • Folder move index drift — renaming/moving a folder now rewrites descendant ac_tracks.rel_path and matching ac_libraries.folder_path prefixes (Nextcloud only emits one event for the folder), then assigns library_id immediately from the new paths (no waiting on a background scan). Previously unindexed audio that entered a library is discovered with a bounded synchronous walk; only overflow queues a scan.
  • Copied audio never indexedNodeCopiedEvent is registered; file copies upsert immediately; folder copies use the same bounded index-into-libraries path.
  • include_subfolders on path resolve — library matching for node events now honours non-recursive library roots.
  • User/group delete listeners — cleanup failures are logged and no longer bubble into the core delete event bus.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureJ4PQtIV1I7xSKw7cG1ijV0lZ2KjgD63Y+zrmRuXSjlmLYNiksrZqv54YwWcHR3SQthSxBPOC/8h8rQ8JOHB7nWBwcs9QBB4PgU5C0F5nCnmB2Mb9Yf8LelSAdRrcZV7U3Eyf6X9/Gr/JqcOz6WgE0N2Eg3gyoDWWFmnnd9A2hqprazXx7wthwWOdi5+zA3umOjKJscQdjXKeJ/Ihs7tuFWmv1puISUFNhLj5UycCeNl+1vQ07JbAz++uRIm0QRVeJzAqt4hXBkGGaLzLW0teAkZnbEmCwLhZTrgWqQXVw9qYbnoY9cmWoMNR6RF0ShFAtvW97rv9u0XK4cRHuilmC9NP8KrfRMAjXSBE8fZrvCy+FgFlo6neM8CngcUgHd6n27vgArhWq1c7lQpbONj48jhV6dLINJkTIJ6wGnBZcPBnqhLvOWwM/574wj/0WoBP9oVYlKALsV6zCvp7dlRPZeS85+HFiSeXw3vtUKxoQKz4T+vYYupNjZGYTNL55THtH5Kgn7siKeyNiaLfushQRmvWD9T+7flZmgogs5zWxet+OjRO2WWqQeuCh9L2j9EtW527UYrO3QecCeu6Cj38+7WW+S6t+eeFJSXCotzh9X6dYXVnUCUOyrF0WwGS3huHPfJJsJqYWbPaJ7AOR+6XPr0dqKfZlnjZqFGOKulJxuc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.10
Release Details
UpdatedJuly 21, 2026, 11:19 a.m.
Changelog

Fixed

  • Queue-wide listening speed — changing speed on Now playing now sticks for the whole queue. The HTML media load() algorithm was resetting playbackRate to on every track change because only playbackRate (not defaultPlaybackRate) was set before src/load(). Both rates are kept in sync and re-applied after load/play; the UI reads the session speed via getSpeed() instead of the audio element.
  • Keyboard speed shortcuts[ / ] now persist the new rate with the queue/session (same as the speed control).
  • Settings default speed — saving the default no longer overrides an active listening session mid-queue.

Changed

  • Now playing speed control — clearer “Listening speed” label with − / select / + controls, hint that speed applies to the whole queue, 44px touch targets, and WCAG-focused labels/descriptions.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureYzRV2/sof1CISYuL/0VSftxtNGIjW6NT6swdgC1ygQ/aG/9huRnCOo23g//CcTsOPKMDgM+lpty6YftiHdDXhXS6dzbIcSqdDXuBOcHyn0fTyWHBEF7p+APMswQd5zMBhXfsxje2IXCr3OKyUIUbbSNrj00FFY1dpkS3M2oO9ud8xQ8Hld0cUcDtsw6rSmlC4kj9FN+6+pOrT1P2qMGOgvgUYf96HL5wY6oFRZTgaXJ0itz+MaHI/uvlHclzxR0FcTQqtMljaiM6qcwT81yjfxOTjv/Bs6i/B1YDKwEUc5I8+pUP8zye3sqgPmmopwzMXEpuPpM6U54hABH8IADCniyb/VZHTmTJoHz+OhctNgpsQcNc8BojVaaFa66nY17qHOnsmvlc0P0xPJQzBfXu3M4wnsepyGQPZqtrQ/2IsE8S4LLyqWn0wi2wxNbL/Il/+oHITMbFwKyd+pVpxroAunprQsYe5T4g1aUjgANSKTTmbzMbWzb7k8CIYmAhine/1U3stAfuojIgb8K0HNZUI52OPoTuC4dSiVaGq2zWmQeMy8QantICnBSFRlaxsWK0Mk05UTPCNQYX310Wmh5jWW7lbQLBxw4NdJeObbCULKdH0OkbHKfJiXRNtrwa8bpLzeTFv31peFxEFLyHFiREh7WGjUE+fUdmHUjZm2D66Mw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.9
Release Details
UpdatedJuly 15, 2026, 10:25 a.m.
Changelog

Fixed

  • Favorites listing regression test — unit and integration tests lock in hardened loadFavoriteFileIds() behavior (issue #3).
  • Native widget scheme on forced themes (issue #4 follow-up) — color-scheme is now bound to the applied Nextcloud theme (body[data-theme-*]) instead of a blanket light dark, so select dropdowns, spinners, and other browser-drawn widgets no longer render white on a forced dark theme when the OS prefers light (and vice versa). Modals and toasts, which portal onto <body>, get the same binding.
  • Active sort chip contrast — active filter chips paired --color-primary-element-light backgrounds with --color-primary-element-text ink, which is tuned for the solid primary color and became dark-on-dark (illegible) on dark themes; they now use --color-primary-element-light-text.
  • Stale theme-bind.css after upgrades — the late-loaded theme re-binding stylesheet is now versioned (?v=<app version>) so browsers pick up theming fixes on upgrade instead of serving a months-old cached copy.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignaturekTA/K5U++VfgdYLxsxtjxZdHoshbTcsnF1xoQPIi3JUCH88gDobRUpY1tWJ5WggZxWlve/HquNdt6ZcR5WSB3ymajBfWv3+vTxJWKHNpcg83tFRoq4MHPlnwHAaasAedaIYxrtg9tx6WL6pv4jof/8eN6Qcc0wmqOceCYxnGN1pSoPFpA9euzSLQtti1krxbYI++RgT1w89bvKwnAi7ToMX2HuqzwmU0z8jaSyeI1fVXzo8sWT2IJrYLNMfTdZmgGUjELW7dLnSR4OrjP4STsBWiyLHJrWLlqfa3SBr1aVQdLLMM0QGrnYaPOKEFaFI/WAnOsTYKbpXa8RUiJKnw7xcYaHKDJ9UqJCe4b8rn6/kW+hrXgFvEov9MSWWgPxlohEO7TYPB/JM/71m3KnKkT0oC05UMrbBTIV9KHg12RktHi/FOP3QZazySt7M+vA1oQpFFpLqUG+Ts4i1dft9gkftk38FH/tX+g64yrxNfIGOz1/snR8VaIjCi71loLM6MPrcFGoP0UGuorQKRRi3EDLJbgJLW9yQrhY7WrtfozmoRIPpL7ZDZG1PzF+ri1UkXYrSOY1hSQOsNXfxvxAdM6tZK1ajDdnqnAm3VayKeAqnHXvVOnYkPjyvu+8IfaAAwyNqVBNUMu1yL3Cg1SKgGmctC9wzJ/srdMf1iTwp9ylw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.8
Release Details
UpdatedJuly 13, 2026, 1:36 p.m.
Changelog

Changed

  • Nextcloud 34 — raised max-version to 34 for the current stable server release.

Fixed

  • Scan memory — library scans walk folders depth-first in batches instead of loading every audio file into memory before indexing; cursor now stores a walkStack for resume.
  • Concurrent scans — only one worker can claim RUNNING per user via an atomic DB update; lease heartbeats prevent stale takeover mid-batch.
  • Playlist integrity — reorder and delete run inside DB transactions so partial failures cannot leave inconsistent sort orders or orphan headers.
  • Mini player volume (mobile) — volume icon opens an accessible popover with slider and mute on small screens; desktop keeps inline controls (WCAG 2.1 AA).
  • API error loggingsafe() and service catch blocks now pass the exception object (['exception' => $e]) to the logger instead of a message context key, which the Nextcloud logger's PSR-3 interpolation silently discarded. Internal errors now log the full class, message, and stack trace.
  • Favorites listing 500ITags::getFavorites() may return false on transient DB errors; LibraryService now degrades to "no favorites" instead of throwing a TypeError that broke /api/tracks?favorite=1 and all views built on it.
  • SQL portability — count queries no longer inherit ORDER BY on non-aggregated columns (rejected by PostgreSQL and MySQL 8 with ONLY_FULL_GROUP_BY); MAX() aggregates use selectAlias() so library sync revisions and playlist sort orders are read correctly; internal Doctrine ArrayParameterType replaced with the public IQueryBuilder::PARAM_INT_ARRAY.
  • Upsert races — concurrent progress saves, listened-flag writes, queue creation, and track scanning no longer 500 on unique-constraint violations; the losing writer retries as an update.
  • Playlist integrity — duplicate-name detection only maps genuine unique-constraint violations to a validation error (other DB errors surface as server errors); playlist items get a stable secondary sort key; defaultSpeed is clamped on update.
  • Favorites shuffle truncation — the client paged past the server's 100-per-page clamp instead of silently shuffling only the first 100 favorites; removed a misleading 500-track request limit from facet browsing.
  • User-facing error messages — machine codes like internal_error are translated to human-readable, localized messages in toasts; network failures get a dedicated "could not reach the server" message; fixed "1 items" pluralization on the Playlists page.
  • Dark / high-contrast theming — theme-derived --ac-* tokens are re-bound on body, #content[class*="app-audiocheck"], and #app-content.ac-app; css/theme-bind.css loads after Nextcloud theme stylesheets so backgrounds and ink stay paired on every theme (fixes light text on white backgrounds in dark mode). Added --ac-surface and corrected --ac-muted-strong mixing. Guard script scripts/check-theme-tokens.sh enforces token scope in CI.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureEAfydT7TAjAp7u/mC4U4BMg430xVorUQLwN9NJ2t0FOyr4iRNrvTX+twWERHgHflQ5YKRTAelQ/Tv5cqesv10hAeRkwdKbI8Ziz2dgVydD6aXMPzqCqzAXvr89PWutU0/GG46O2QEw45mg5qmETDfG88ecH5LwgUuDgTT2C5306oAKghnWZeGQ0MjiZMDPe4AU8d13pVVR9PxqaAlKgzQBAd1qDrelEeRreRA0VKcCqr2emryvfCZNbsFSeLxKVuIQk8Npd0c/QXVxqo4pk/3dxMcpB5HW5jucKBKSob/+1Am4dH7YK4o194GEOhnMuPD7WGDVZwJtnjXykJBHaaxJWl0Un5R1/mncAOPdur2dD40OvZXWCVQKL8Qm3MAqC2YgaPOwewsEHshvrA0MHew4BoD4iyjGBk36Ckry5IG8dsE7W0gDRS1PXOEJH/VjgKZtg0vNOuONubwuhW5N7+DSkJaCzUXwZJr/sXMgbD6R0dxOKs4d04wfcGm//ft+YTX03jZ8az5NPV1yNvM6YXZ7aDd9FxsMRtQloxq9+/C3Qha9kYJ5lP5Xk+s/XoPtQpY2N6RZEQOUX4ZqZ4sNunrao4c0F3XeUC8q13lWsQBma71iG9wm8GJ/SkJIR5ejaRIUTTqhC0ztJFwTEYXVGg/P6Z9cLr+Estq4QKmOT7r6I=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.7
Release Details
UpdatedJuly 11, 2026, 7:39 p.m.
Changelog

Fixed

  • Scan memory — library scans walk folders depth-first in batches instead of loading every audio file into memory before indexing; cursor now stores a walkStack for resume.
  • Concurrent scans — only one worker can claim RUNNING per user via an atomic DB update; lease heartbeats prevent stale takeover mid-batch.
  • Playlist integrity — reorder and delete run inside DB transactions so partial failures cannot leave inconsistent sort orders or orphan headers.
  • Mini player volume (mobile) — volume icon opens an accessible popover with slider and mute on small screens; desktop keeps inline controls (WCAG 2.1 AA).
  • API error loggingsafe() and service catch blocks now pass the exception object (['exception' => $e]) to the logger instead of a message context key, which the Nextcloud logger's PSR-3 interpolation silently discarded. Internal errors now log the full class, message, and stack trace.
  • Favorites listing 500ITags::getFavorites() may return false on transient DB errors; LibraryService now degrades to "no favorites" instead of throwing a TypeError that broke /api/tracks?favorite=1 and all views built on it.
  • SQL portability — count queries no longer inherit ORDER BY on non-aggregated columns (rejected by PostgreSQL and MySQL 8 with ONLY_FULL_GROUP_BY); MAX() aggregates use selectAlias() so library sync revisions and playlist sort orders are read correctly; internal Doctrine ArrayParameterType replaced with the public IQueryBuilder::PARAM_INT_ARRAY.
  • Upsert races — concurrent progress saves, listened-flag writes, queue creation, and track scanning no longer 500 on unique-constraint violations; the losing writer retries as an update.
  • Playlist integrity — duplicate-name detection only maps genuine unique-constraint violations to a validation error (other DB errors surface as server errors); playlist items get a stable secondary sort key; defaultSpeed is clamped on update.
  • Favorites shuffle truncation — the client paged past the server's 100-per-page clamp instead of silently shuffling only the first 100 favorites; removed a misleading 500-track request limit from facet browsing.
  • User-facing error messages — machine codes like internal_error are translated to human-readable, localized messages in toasts; network failures get a dedicated "could not reach the server" message; fixed "1 items" pluralization on the Playlists page.
  • Dark / high-contrast theming — theme-derived --ac-* tokens are re-bound on body, #content[class*="app-audiocheck"], and #app-content.ac-app; css/theme-bind.css loads after Nextcloud theme stylesheets so backgrounds and ink stay paired on every theme (fixes light text on white backgrounds in dark mode). Added --ac-surface and corrected --ac-muted-strong mixing. Guard script scripts/check-theme-tokens.sh enforces token scope in CI.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureOYSJOAEPFmNzWN3GZeKQnDwpPjDre+YRdIPE6OCmwPAgZillckDvFX20VFmeDaLpxiVh9P6Vg/OerpU/SHxINbKCntGCIV+5I/mJX5rwx5rpdW9bjN3f58J09bqnkUo8s2sCGlKq0y9neu3ZHuRhPKGCuLVbJPP7LBs7RXDJxQjxWNIE35PflwsixAD3E2M/iPkH3jJV56AJKviy9cQa5Wa6pBGFDBb9TxF8XLo0tckNp3SBQ3F6jpcA2prvoglKQl2vIlYXb71iyXhkVYYwteHXmLmeOwiDGrYXr+4TvNgN2mU+ZjfptHEFvVKJ0Ldx8RSU4Q7R4tU9RZtUwxqqmDnRpBVBR5m4jBdBcAagjLMBg6zeqtNdJodSmyzQLQmDs6Jhtu2w+iOYd56cdZMjlV+7y+RtpCc8o36zCasZco8UbMFhHrCZ1LxAoDoqIcZONynmmcgKIUof5xkbPyE8I9xtnool86ye7HiQOMDNjYyRoNFygPtf1vuEu4UXyAZkY6a8XNUZIWUvjEfPn/5JuvcjOsErcbKFUKkuPN9mDhYbKHJUo/ESNyQrjjfhiEeMyl9x8NFNAN6B2qx6pt32NWCqtYK1K00KRpP9nJlVD/IWxvs3zJFh5M/G2k3fDH5CRV/NJiWDYo8CwNschMcaO6oc+7KH4x2UssmC033rTd8=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.6
Release Details
UpdatedJune 24, 2026, 9:03 p.m.
Changelog

Added

  • Global search — shell search filters Home, Browse, Music, Audiobooks, and Playlists with debounced query sync.
  • Sleep timer — duration, end-of-chapter, and end-of-track stops on Now playing.
  • Playback start choice — Play all / collection actions offer start from beginning vs continue when saved progress exists.
  • Accent-insensitive search — normalized shadow columns (*_norm) and migration backfill library search across web and mobile.

Changed

  • App shell — persistent page chrome (breadcrumb, icon header, scope strip, grouped nav hints) aligned with BudgetCheck and MobilityCheck across all routes.
  • Section cards — Settings, App settings, Library, Browse, Music/Audiobooks, Playlists, and collection detail use shared sectionCard / collapsibleSectionCard layout.
  • Track lists (mobile) — library browse rows render as bordered cards at ≤767px; collection detail tracks match the same pattern.
  • Playlist detail actions — secondary header actions collapse into a More actions menu on narrow viewports; Play stays visible.
  • Messaging — polite/assertive live regions and toast stack for status feedback.

Fixed

  • Browse page — removed duplicate inline page header after shell migration.
  • Play all — header action only on Tracks (Music/Audiobooks) and Favorites (Browse) tabs.
  • Integration test runnerrun-docker-tests.sh resolves the Nextcloud root correctly from the app directory.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureJv9Cfgd5KiHuIhWVcnmPvc+tjX9hD+iP5PRAzEryrCAlq0yfNInv9T82hm7Sw0Uug78ddijfkZ2dgD2vRZm5Pik97LCUi8R8Vck1U5LU3aSVhrHNH02l86ntKWjjhiIUj26X589gMc1DcB0nNrEjrUCf50RMtrLcB3qR1WBuzAKPW3GbA5c/zkB56nhPelVSXFY99ksX1wwNFQwvNHQ1hUNziNoaQTI5EtTr3lizvigJvY7UAZjlIdTZe7c2Gfn2YVmto5YQ7EYEfxZfQIhS3NUBDGdhpAZV2wbSFDYpcx/AxLOikAp6rU7mgb08cAsm1G19dWcSBGTFRhVJ+bBucZXzY4H1siljWo7bVp47mXBCL4TxakLtaW4TIvaYJ0KQ+hLU5Rp1JIp4fdeyXIQ4XjoEBsFxpjwme1h1z0/Dp6tGsCBcd1vuZOks3KFD2+758sCVVqz+v+sDk6+fJL7M5YK9DsHRt8j5CxVFqTfsQI4Ew87pONnYruNABlOfsW0v1AnyKI1da/oEti14Ki6ONM0sWznSbGIS00CSbR7T4wiP2ev1HFQSe+hAlTEqwyP0UuNGR1QKvlTXVdL+46M8HBx4sqlW8wfzeEFnXFsH/IQHwuw6bgPDTIoemTg/Kgfi2m3XIqdaBruQ2sXo+yMzZZ1s+q1yKA5WLDBG/D4Y0n4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.5
Release Details
UpdatedJune 20, 2026, 1:59 p.m.
Changelog

Added

  • Paginated library APIs — collection, facet, and playlist track endpoints accept page and limit so large libraries stay responsive in the web app and mobile clients.
  • Load more in the web UI — Browse collections/facets, Music/Audiobooks browse, and Playlists use server-side pagination with Load more instead of loading entire track lists at once.
  • Play now / shuffle on full lists — playlist actions fetch all pages before queuing so Play now and Shuffle play cover the complete list (with the existing 2000-track cap).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureDyugqURQcSAJsnY+5whWW+8l45Ca4rETbg8Ggr2DLSJaoNi1PE3sRa54HAWGBu5emmP6y1qOTo5O4qqTCz7R1s+VLQhB7S2UgbNyx5OyW0Z7wJ1i34W9Ve+xQLiUbrj/opqCKZiQXzqttSOXFpeT5MXOa1eykRYXHk1ogIXyA9WULjFasagxE0bJ5MqJdKLg0e+Iw3jnnBP9UDI+LOEYyGJx/AZqwsiL7wqmLcBQs3EVgF2BeMpD5jqaFyPPVodE86fqKFM6lUcC6dfxBlkrT+mgfg9Md0/gIG7FQlTljcjnpUEd5eeWp4/8K05mOiPcW8II1B1DGM4N4y6+yt0U0x2Vz22rI0wnlpBgOIrCu1b4JOiwkX60/NZwsLlhAy1v2M7+qxyN/FU6JlJM6ICo4jEnkWLXJ820IbliDDmhm/G6ji9O5NDQJFuN9h99ez80kz7g3x/CeflE3OJGmqWWR+1h7MjvYtL7AznGsqlnBs/H8ed9eqjIcFPmRPGTVXYtwRRDYLjCb2d3DGOWEzjeQVWmxQfkpm3D8UguefW7xhZX1L/YonrP914vDK7NXxl3eNPll9rQGxnCDgCfcU1RXLGpSAzYZ9VtO9TEf2y9azdq+7tOLQuI1b0SyUTONjXYOldJGXanC1AMC/QRzT8ELFrl0+D9rKeGJ1dQJyyfQa4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.4
Release Details
UpdatedJune 19, 2026, 7:17 p.m.
Changelog

Added

  • AJAX cron scan ticks — when Nextcloud uses AJAX/webcron instead of system cron, queued library scans advance via /api/scan/ajax-cron while you stay in AudioCheck (library polling and app-wide heartbeat). “Scan now” still runs an initial in-process batch; remaining batches no longer stall until a full server cron run.
  • Stale scan lock recovery — abandoned running scan rows older than 10 minutes are treated as resumable so large libraries cannot deadlock after a crash.

Changed

  • Library cron callout — explains that scans continue while using AudioCheck on AJAX cron hosts (system cron remains recommended for large libraries).
  • AJAX scan tick rate limit — 120 requests per minute per user on /api/scan/ajax-cron.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureeGQI1vbXZcWucftZYcIA0TsZ2vgHuGiAUqXs/l09B/vCADzp2LDJ1qT6X7I8SN0tybnfjYv0KUns/VcMjYZI/liyDB9AJSQIYGO/9hwPKbjyeqLPiXbP391GwHpoAcZtZs3KJQY/Ufyl7+QR44o//+81C4FQkovYK1vhQFJLUCjdTncMiESHh8ewU57NM0jqtsU1zx+aqYZLS4rkg/K1sdQq216A+L20+g7bGjMEa4NwAzrApmnLUNhTW4NjVdwAHjJuhrahVA/HWKhgo/Sakz7TlttO8T9sCzdUl7UOejDn0KnQO5XmYFqkxa5i/M9atHeIsij7L7KKKIbvReYujL6MvReZQchzMTYnVv39kZZ2TlfrsKwrevQRf+CKNczpp0tsqbrL3p6lo1I9D9bb1Xt045qA2c2q8IL3b2fSCY7emGGJWvQLtDsEZ/uAg28s6pK8wuur5PJWBFRV3lRiQtaIIgjtdggPWK//+Mo5+58hYgM1EyzjC/92lmnO510xXgEocC1JRRjlrYCoZGvpCmRFEza9woRsdb2dsPedx/XuIO/dvFpQ10Zw4jRmVTzlr6bguua8stUJ5d7P2ltRtVHNOtJck4it+pxqzKnwq1e//0QdQIef17EuUq7TgtXpONGwvGMioKTzveZ9XprZGfGUqDTLgZgpcaSyJuZDLvw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.2
Release Details
UpdatedJune 18, 2026, 1:10 p.m.
Changelog

Fixed

  • App Store screenshots — screenshot URLs in info.xml are now single-line (whitespace in the URL text prevented the store from loading images).
  • MP4 podcasts missed during scan — recursive library scans only searched *.mp4 when no audio/* files were found; MP4/M4A/M4B files tagged as video/mp4 are now always merged into scan results.

Added

  • MP4 audio container support.mp4, .m4a, and .m4b files tagged as video/mp4 are accepted at the file gate, indexed, and offered in the Files app (extension-filtered for video/mp4).

Changed

  • App Store copy (EN + DE) — accurate format list, clarified server-side resume, removed unverifiable WCAG certification wording; accessibility described as design goals.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
SignatureT3vGGbmLd07nyi0eKXGtXs/jwWf/17iRFXBQQc0fdpJDqvMcU20ZdcyR2LVJoWdX8FimEA1VZmI0tVmFDvUrT5bdPNNn29O09MAVd9ERPhtcTWagy9LJ7roXxaHZ6ZiB+PErl2581x/+Hrf90AHcHNcOcqZ0gE3dOUjCE988aZ8Z7fXQ22LWhkJQFirlO1uq30WP2vqQ2k2Yt5fOvchmB5joPNZHnbwg5Vndmitv3PTaTruytzGoUzTrzPD0n0E1OPO/lDjeslW32UMiK2DRtqUUVvDPnrzLA3L5IBcST1WU+N8COf+agslTqLp5M+m8+LKrxuQaOh1GX1Q824IFgkW/8zizXyt45PWJSyFQYNOtlEspl+IX8hKyT2gWguxhQP6kefYBhb/WJrYcemcwcey8c/StlUKYjU8bIulSTl+Yd95YO/sMaHSneeY7R7pIX3Z2OFRjoPGVaMmuoB/hdQLTw2/V8DHCHzZlfpQHmZblCQ3k2p0o2gKS/qlgUgqtEhHbs2VBsg3ugU4Iji1z6vGTDe++R4YIjCawU5xUi8uRV7KH7A8letsHsa2upRHfR0Poe1r8TWni6qBiPd3ZtoGxh2U3QDhccwHnmUYPxE2Es2cZ4Um9t0SWX0TId4+7DQs2uatnHx7MrJaCIMlGlId9VGGLUQFWQD8xlcUn4lU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0
AudioCheck 1.2.1
Release Details
UpdatedJune 16, 2026, 8:13 p.m.
Changelog

Fixed

  • Queue destroyed on reload / app switch while playing. When restoring a queue that was playing, the browser's autoplay policy rejects audio.play() with NotAllowedError on any fresh document (reload, returning from another Nextcloud app, or a deep-link landing). The player misread that benign rejection as a media failure, marked the track unavailable, skipped through the rest, and then cleared the durable server queue — losing it on every device. loadTrack() now distinguishes autoplay/abort rejections (keep the track loaded and paused, ready to resume with one tap) from genuine media errors. The cross-device queue is preserved and recoverable.
  • Durable queue no longer discarded on a real playback error. A track that cannot be decoded in the current browser is treated as "unplayable here", not "deleted by the user"; the curated queue stays recoverable on reload or on another device. Only explicit user actions (clear queue / remove last item) wipe the persisted queue.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBTCCAu0CAhNtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjE2MTIyNjI4WhcNMzYwOTIxMTIyNjI4WjAVMRMwEQYD
VQQDDAphdWRpb2NoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
lvpfJro/A4Yxltse59eF7eDxkDlK9oF5DgodCdx9mMHFvm0/HVbMiMKqq1N36uyH
i2ngkupkNgmViu2fVTh+eADd+fMUNgWJKYY3BlP6fpEDYPaTEnUX32G6WRqlu8EI
FqkC7TPsnlRQCqkXHJXh6eGNRRUfY3SCQSQu3MetH6dlxxSNDOcQRP9lEVXJjj2K
16O+PBDpttLbfTlvBMB122XhEyuq8jKt1bJcm/NCrzhkI6o86Vsi1zLewu9iloY2
yPW3JqQz9XLe9m7l7uhIoTSz968fU0mgssh65LAgPUS66gq6oV3dwMUVyAiRdstD
0JZ2tzLn8lHC3YIustkb2Wi+KyPoR48IhIbgpJzV7YjCXiYjR3psH5jZEChIdByJ
W15JPky7qShNUANbNs0DQAeQcify1ok+pDNdUEkkIrxKAELBrWC1wWxD0Q7+S8HJ
J0Ry0I1b+1lXtS+SqYuIQc2fCc3u71NFJBjaY7u0K8LCc8Za1LfvAeHtuVaJ9eAE
p3wRFTbWGWbkEiCxZ1cLdkuX9C1W8nMjVokhu7HytHiXuA2LmdyoV/pfUtQnZZ6Z
W7jdG9bECzsCmrgQOSAydsHKPnYEZvwe1s8wl4xZWXsi03NZJL+GpUJKdbBpxXff
Wc2TZwbE7VH7iocyqurZdGWLVt3pghW/11Y3V+OXdk0CAwEAATANBgkqhkiG9w0B
AQsFAAOCAQEAIxrvtOZBFAqumP59vtIPXTqgInvog5BtRI02QKLKh42QZmH5fjRa
7Y9BSwdBeQrfcQpjg0IWF5mpfFGl/NiO+LhOysoGPFzE8LWm+EIz9dcNCygYD3L+
O6TqhnUAhqTDSbIqZ2jc9J2KhITXtHbVWzRotO3YIsIAnerSw46K6UE5jEIy58jW
0fLoOzHMi5AjsVkO/yjLMGXQD5Vc+k0Kif5CvZ6XxjvYhC8Lwa839rJmPXGo5Ecb
fK8I4s6TCpL5WReq10zr7QzlTK84201jBSKAd73DBiH6EU9EmSdRQm9yFiJl7DND
WCkgG+3kuOLExAYBgw/QdVE+nuratALkxw==
-----END CERTIFICATE-----
Signatureai5A4WCVeltI2oihLkhMkkv3ONBNXb4T8FTzRwIjVSo0ns7GY34IwJ4iM5YS17YWC9qJVWEyAnScnNEkLcFMvJGiIvBH+TAzFZcGXzh/v2CKEZU87Dhd7ddczCMoyJ5vRk+tK3oD4idftiC/8HvyxE19O7QQv4XDO8+U+YX8MvNflhqo2on076ICOK3qYlK4G/KsNkXlv9YryLVJ+GjSkXVx7hWFQeUXrbyqmVNDYBtLpfo5yr8dQZfWmVq822TIlpqXKlFJF8AHPfixuTbaq3VE6JvEC+zvy7ngEpnV5s5Sh0hoHaB731PrGzhXR48hEvdfgUVW7MkyqL0pE0bEcyavi9NGw9HuzLshIJg7Xb0tFy0yZENOJhn9oiVuOiwRqTotiBCTIDVlDziRRNDDKfIDlgGagIEKctBoN8AuVSku0IRN/4GKYEORVWGqB/ER5AR0LksqSCFIA9VRYdtvvvkKyFbovZUAyLyW61miWtGztYoMTN5//708ooWc45n64KfL5VfTLUIV5hrJAkz1DtwlPBpGnOYKhUIVG9h9wIbT2ij8cCMeT2jSdrpAIn0hroK1hhb2b4Zo1Hx8BnK7ekeLLC/ay481STM/CC2ljPtEiepgjT1OC7+Q+Fc+Tt3rI901YMWi9eFqumNW2s88EDqdhHzdWA87RT6a+QjledY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.2.0,<8.6.0