From 5c48fed1abcaa7533bf93c129a4de5064c5a3d69 Mon Sep 17 00:00:00 2001 From: digital-garbage <133010426+digital-garbage@users.noreply.github.com> Date: Mon, 6 Jul 2026 03:45:48 +0300 Subject: [PATCH 01/11] =?UTF-8?q?Editor:=20shortcut=20Ideas=20bulb=20?= =?UTF-8?q?=E2=80=94=20quiet=20nudge=20for=20unused=20shortcut=20categorie?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A πŸ’‘ next to the scene prompt and Composer global prompt lights up when whole shortcut categories (camera moves, sub-actions, …) exist in the library but are absent from the prompt. Click-only (never auto-opens): a category-grouped popover lists every missing category with count, random insertable samples, +N-more browse per category, and a shuffle. Chips insert at the caret through the field's normal input path. Toggleable via Settings > Editor > Shortcut ideas. Guards: no popover off a hidden/detached bulb (stranded top-left window), dismiss listeners detach on every close path, popover closes when a re-render removes the bulb. Co-Authored-By: Claude Fable 5 --- movie_editor/frontend/composer.js | 1 + movie_editor/frontend/editor_settings.js | 6 +- movie_editor/frontend/index.html | 1 + movie_editor/frontend/inspector.js | 7 +- movie_editor/frontend/store.js | 2 +- movie_editor/frontend/styles.css | 19 ++ movie_editor/frontend/suggestions.js | 223 +++++++++++++++++++++++ 7 files changed, 256 insertions(+), 3 deletions(-) create mode 100644 movie_editor/frontend/suggestions.js diff --git a/movie_editor/frontend/composer.js b/movie_editor/frontend/composer.js index d6d52d85..189f8ef0 100644 --- a/movie_editor/frontend/composer.js +++ b/movie_editor/frontend/composer.js @@ -213,6 +213,7 @@ "Edits apply automatically and stay in sync with the timeline's per-scene prompts. Shortcuts expand at generation time.")); composeTextarea = ta; if (window.ShortcutAutocomplete) window.ShortcutAutocomplete.attach(ta); + if (st.project && window.ShortcutSuggest) titleRow.append(window.ShortcutSuggest.bulb(ta)); // Variables ($name) β€” collapsible, same toggle pattern as Settings β–Έ Built-in pipeline. wrap.append(composeVariables()); diff --git a/movie_editor/frontend/editor_settings.js b/movie_editor/frontend/editor_settings.js index 3074aef7..b77102a8 100644 --- a/movie_editor/frontend/editor_settings.js +++ b/movie_editor/frontend/editor_settings.js @@ -158,6 +158,10 @@ "Prompt autocomplete", "Suggest matching shortcuts while you type in the global prompt and scene prompts. Shows the trigger, its prompt, and category.", "autocomplete")); + content.append(toggleRow( + "Shortcut ideas", + "A πŸ’‘ next to prompt fields lights up when shortcut categories in your library (camera moves, sub-actions…) aren't used in the prompt. Click it for insertable ideas β€” it never pops up on its own.", + "suggestions")); content.append(toggleRow( "Use anchor", "Text before the first split trigger is a shared anchor prepended to every scene. Turn off to make that leading text Scene 1 instead.", @@ -169,7 +173,7 @@ window.SettingsWindow.register({ id: "editor", group: "", title: "Editor", subtitle: "Per-browser preferences β€” they apply to this browser, not the project.", - keywords: "autocomplete anchor prompt shortcuts i2v bypass guide preferences", + keywords: "autocomplete anchor prompt shortcuts ideas suggestions i2v bypass guide preferences", iconBg: "linear-gradient(180deg,#6aa9ff,#3b6fd9)", icon: '', mount, diff --git a/movie_editor/frontend/index.html b/movie_editor/frontend/index.html index 47061c3b..5e6f27cc 100644 --- a/movie_editor/frontend/index.html +++ b/movie_editor/frontend/index.html @@ -130,6 +130,7 @@ + diff --git a/movie_editor/frontend/inspector.js b/movie_editor/frontend/inspector.js index aab48a90..f0711a0f 100644 --- a/movie_editor/frontend/inspector.js +++ b/movie_editor/frontend/inspector.js @@ -288,7 +288,12 @@ const ta = el("textarea"); ta.rows = 4; ta.value = root.text || ""; ta.placeholder = "Describe this scene…"; ta.dataset.k = "sc-text"; ta.oninput = () => S.patchSceneQuiet(scene.id, { text: ta.value }); - body.append(field("Prompt", ta)); + // Ideas bulb floats OUTSIDE the label β€” a button inside a