diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1e3e2a8..49a47eb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
# Changelog
+## 0.51.4 - 2026-08-09
+
+- Moved Search controls from the sidebar to a top-of-page search panel.
+- Removed the Search page quality selector; queued downloads now use the saved Config quality default.
+- Added a Search page provider dropdown for choosing Anikoto, AniNeko, or AnimePahe per search.
+- Moved result actions into a floating window that opens after selecting a search result.
+
## 0.51.3 - 2026-08-09
- Removed the Episode mode selector from the Search page and now choose the selected result's episode language automatically from the saved Config default and available `SUB`/`DUB` flags.
diff --git a/README.md b/README.md
index bac99ca..dfcc8d7 100644
--- a/README.md
+++ b/README.md
@@ -5,8 +5,10 @@ Kaizoku is a local web app for searching, tracking, and downloading anime from A
## Features
- Search anime through the configured provider and tag results with available `SUB` and `DUB` episode languages.
+- Choose the active search provider directly from the Search page.
- Prefer provider-supplied search artwork, with a local title-based thumbnail fallback when provider artwork is missing or broken.
- Queue single episodes or batches in subbed or dubbed mode.
+- Open result actions in a floating window for watchlist, media type, library name, season, episode range, and download folder choices.
- Fall back across the other configured providers when an episode or stream cannot be resolved on the primary provider.
- Save files with Jellyfin-friendly layout: `TV/Series Name/Season 01/Series Name - S01E01.mp4`.
- Save English external subtitles when the provider exposes usable subtitle tracks.
diff --git a/VERSION b/VERSION
index cf2529d..0c2d2af 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.51.3
+0.51.4
diff --git a/app.py b/app.py
index 4e47fbf..631bae2 100644
--- a/app.py
+++ b/app.py
@@ -916,9 +916,12 @@ def episode_language_summary(show_id, provider):
return summary
-def search_anime(query, mode):
+def search_anime(query, mode, provider=None):
runtime = ensure_runtime()
- provider = str((runtime.get("config") or {}).get("provider") or "anikoto").strip().lower()
+ configured_provider = str((runtime.get("config") or {}).get("provider") or "anikoto").strip().lower()
+ provider = str(provider or configured_provider).strip().lower()
+ if provider not in provider_bridge.PROVIDERS:
+ provider = configured_provider if configured_provider in provider_bridge.PROVIDERS else "anikoto"
data = provider_bridge.search(query, provider=provider, page=1)
shows = data.get("results") or []
results = []
diff --git a/config_page.py b/config_page.py
index 8f4a06f..a4cf46b 100644
--- a/config_page.py
+++ b/config_page.py
@@ -454,7 +454,7 @@ CONFIG_HTML = r"""
Saved defaults
These values preload the Search page and act as the fallback folder for new queue jobs.
-
Mode and quality can still be changed on the Search page before queueing a download.
+
Search uses these saved mode and quality defaults when opening result actions and queueing downloads.
@@ -476,7 +476,7 @@ CONFIG_HTML = r"""
Defaults
-
Manage the folder, mode, and quality that the Search page starts with.
+
Manage the folder, mode, quality, and provider defaults used by Search and new queue jobs.