diff --git a/src/routes/coder/ribbon/Demos.svelte b/src/routes/coder/ribbon/Demos.svelte
index de19d37..1438f05 100644
--- a/src/routes/coder/ribbon/Demos.svelte
+++ b/src/routes/coder/ribbon/Demos.svelte
@@ -1,18 +1,20 @@
@@ -56,4 +62,17 @@
{#each Object.entries(demos) as [label, value]}
{@render item(label, value)}
{/each}
-{/await}
\ No newline at end of file
+{/await}
+
+
+ {}
+ }}
+ bind:shown={reminder}
+>
+ {translate(
+ "Click 'Save as...' to save this demo before running"
+ )}
+
\ No newline at end of file
diff --git a/src/routes/coder/ribbon/Ribbon.svelte b/src/routes/coder/ribbon/Ribbon.svelte
index 5c1a49b..c6acab6 100644
--- a/src/routes/coder/ribbon/Ribbon.svelte
+++ b/src/routes/coder/ribbon/Ribbon.svelte
@@ -124,7 +124,11 @@
icon="/icons/btn-{current.pages[current.tab]?.pilotMode ? "pilot" : "run"}py.svg"
label={current.pages[current.tab]?.pilotMode ? translate("Pilot locally") : translate("Run locally")}
onclick={evt => runPython()}
- disabled={!current.pages[current.tab]?.file?.file || current.pages[current.tab]?.file?.ext !== ".py"}
+ disabled={
+ !current.pages[current.tab]?.file?.file ||
+ !current.pages[current.tab]?.file?.parent ||
+ current.pages[current.tab]?.file?.ext !== ".py"
+ }
bind:awaiting={awaiting.runpy}
cancel={evt => stopPython()}
borderless