diff --git a/CHANGELOG.md b/CHANGELOG.md
index b35a1d2..e2f89a0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog
+## 0.7.12 - 2026-06-16
+- Aktor-Auswahlliste zeigt maximal 50 Treffer gleichzeitig und fordert bei
+ größeren Mengen zum Eingrenzen per Suche oder Typfilter auf.
+
## 0.7.11 - 2026-06-16
- Aktor-Discovery erkennt weitere steuerbare HA-Domains wie Buttons, Helper,
Heizungen, Schlösser, Ventile und numerische Helper.
diff --git a/addon/config.yaml b/addon/config.yaml
index bfecb34..992ba10 100644
--- a/addon/config.yaml
+++ b/addon/config.yaml
@@ -1,5 +1,5 @@
name: SillyHome Next
-version: "0.7.11"
+version: "0.7.12"
slug: sillyhome_next
description: Lernt automatisch aus deinem Verhalten und steuert freigegebene Aktoren
url: http://192.168.6.31:3000/pino/sillyhome-next
diff --git a/app/main.py b/app/main.py
index 49158cc..c05f747 100644
--- a/app/main.py
+++ b/app/main.py
@@ -102,7 +102,7 @@ async def lifespan(app: FastAPI) -> AsyncIterator[None]:
app = FastAPI(
title="SillyHome Next API",
description="Lokales Smart-Home-Intelligenzsystem für Home Assistant.",
- version="0.7.11",
+ version="0.7.12",
lifespan=lifespan,
)
app.state.settings = load_settings()
diff --git a/app/static/index.html b/app/static/index.html
index fdb1128..7777e4a 100644
--- a/app/static/index.html
+++ b/app/static/index.html
@@ -182,6 +182,7 @@ let currentActuatorId = null;
let actuatorChoices = [];
let contextOptions = [];
let manualContextState = {options: [], selected: new Set()};
+const ACTUATOR_RESULT_LIMIT = 50;
async function api(path, options = {}) {
const response = await fetch(path, {headers: {"Content-Type": "application/json"}, ...options});
@@ -349,14 +350,17 @@ function renderActuatorSelect() {
const query = normalizedSearch(document.getElementById("actuator-search")?.value || "");
const filtered = actuatorChoices
.filter(entity => !domain || entity.domain === domain)
- .filter(entity => matchesSearch(entity, query))
- .slice(0, 120);
- const domains = [...new Set(filtered.map(entity => entity.domain))].sort();
+ .filter(entity => matchesSearch(entity, query));
+ const visible = filtered.slice(0, ACTUATOR_RESULT_LIMIT);
+ const domains = [...new Set(visible.map(entity => entity.domain))].sort();
+ const limitLabel = filtered.length > visible.length
+ ? ` - ${visible.length} von ${filtered.length}; Suche oder Typ weiter eingrenzen`
+ : "";
select.innerHTML = [
- ``,
+ ``,
...domains.map(group => `