onChange("name", v)} />
+ {form.type === "image_rotator" && (
+
+ Paused
+ onBoolChange("disabled", v)}
+ trackColor={{ true: colors.accent, false: colors.border }}
+ thumbColor="#fff"
+ />
+
+ )}
{form.type === "custom_json" && }
@@ -1030,7 +1046,10 @@ function cardSubtitle(card: DataCard): string {
function cardMeta(card: DataCard): string {
if (card.type === "custom_json") return `Refresh: ${(card as CustomJsonCard).config.refresh_interval}s`;
- if (card.type === "image_rotator") return `Fit: ${card.config.fit}`;
+ if (card.type === "image_rotator") {
+ const paused = (card as ImageRotatorCard).disabled ? "Paused · " : "";
+ return `${paused}Fit: ${card.config.fit}`;
+ }
if (card.type === "clock") return card.config.mode === "time" ? "Mode: live time" : "Mode: countdown";
if (card.type === "spotify") return `Refresh: ${(card as SpotifyCard).config.refresh_interval}s`;
return "";
diff --git a/tv/src/components/DataCardWidget.tsx b/tv/src/components/DataCardWidget.tsx
index 350da50..82c2ac1 100644
--- a/tv/src/components/DataCardWidget.tsx
+++ b/tv/src/components/DataCardWidget.tsx
@@ -242,6 +242,7 @@ function ImageRotatorWidget({ card, isNightMode, nightMessage }: { card: ImageRo
useEffect(() => {
if (isNightMode) return;
+ if (card.disabled) return;
if (images.length <= 1) return;
const ms = Math.max(2000, (card.config.interval ?? 10) * 1000);
const timer = setInterval(() => {
@@ -252,7 +253,7 @@ function ImageRotatorWidget({ card, isNightMode, nightMessage }: { card: ImageRo
}, 400);
}, ms);
return () => clearInterval(timer);
- }, [images.length, card.config.interval, isNightMode]);
+ }, [images.length, card.config.interval, isNightMode, card.disabled]);
// ── Night mode overlay ────────────────────────────────────────────────────
if (isNightMode) {
@@ -292,6 +293,13 @@ function ImageRotatorWidget({ card, isNightMode, nightMessage }: { card: ImageRo
display: "block",
}}
/>
+ {/* Paused overlay when disabled */}
+ {card.disabled && (
+
+ ⏸
+ Paused
+
+ )}
{/* Name overlay */}
{card.name}
diff --git a/tv/src/types.ts b/tv/src/types.ts
index 56355ea..2d14dae 100644
--- a/tv/src/types.ts
+++ b/tv/src/types.ts
@@ -115,6 +115,8 @@ export interface ImageRotatorCard {
name: string;
config: ImageRotatorConfig;
layout?: CardLayout;
+ /** When true the rotator is temporarily paused on the TV */
+ disabled?: boolean;
}
// ─── spotify ──────────────────────────────────────────────────────────────────