diff --git a/README.md b/README.md index b60c507..b03b563 100644 --- a/README.md +++ b/README.md @@ -159,6 +159,30 @@ Open **Settings → Test controller**: it shows live what Windows delivers from Confirm that the focus monitor supports the feature and that HDR is enabled in Windows. For VRR, also enable G-SYNC or FreeSync in the GPU control panel when applicable. +## Roadmap + +Console Mode roadmap: Next, Later and Exploring columns. + +Plans, not promises: the order can change with feedback. Vote with a 👍 on the issue, or [suggest something](https://github.com/lippdev/consolemode/issues/new?template=feedback.yml). + +**Next** +- 1.5.0 stable, wrapping up the betas +- FPS overlay, toggled from the session menu ([#66](https://github.com/lippdev/consolemode/issues/66)) +- Record the last 30 seconds from the session menu +- Save and restore desktop icon positions ([#30](https://github.com/lippdev/consolemode/issues/30)) + +**Later** +- Per-game profiles: resolution, HDR and audio per game ([#69](https://github.com/lippdev/consolemode/issues/69)) +- Controller battery in the session menu ([#70](https://github.com/lippdev/consolemode/issues/70)) +- Publish to winget ([#13](https://github.com/lippdev/consolemode/issues/13)) +- More interface languages ([#14](https://github.com/lippdev/consolemode/issues/14)) + +**Exploring** +- Windows Game Bar widget ([#11](https://github.com/lippdev/consolemode/issues/11)) +- Voice and assistant triggers: Alexa, MCP ([#12](https://github.com/lippdev/consolemode/issues/12)) +- WakeOn integration: wake the PC straight into console mode ([#71](https://github.com/lippdev/consolemode/issues/71)) +- Phone remote over the local control API ([#72](https://github.com/lippdev/consolemode/issues/72)) + ## Feedback Found a bug or have an idea? Feedback is what decides the next improvements, so every report counts. diff --git a/README.pt-BR.md b/README.pt-BR.md index deeb5b7..9829a97 100644 --- a/README.pt-BR.md +++ b/README.pt-BR.md @@ -119,6 +119,30 @@ Limita a taxa de quadros global durante o modo console (útil em TV 60 Hz). Exig **O controle aparece mas não faz nada (DualSense / DualShock):** abra **Ajustes → Testar controle**; ele mostra ao vivo o que o Windows entrega de cada controle. Se a leitura fica vazia enquanto você aperta botões, quase sempre é o Steam capturando o controle (Steam aberto com suporte a PlayStation no Steam Input vira teclado/mouse no desktop). Feche o Steam, ou desligue o suporte a PlayStation no Steam Input, e teste de novo. Se continuar vazio, use **Copiar diagnóstico** e cole no formulário de feedback. +## Roadmap + +Roadmap do Console Mode: colunas Next, Later e Exploring. + +São planos, não promessas: a ordem pode mudar conforme o feedback. Vote com 👍 na issue ou [sugira algo](https://github.com/lippdev/consolemode/issues/new?template=feedback.yml). + +**Próximos** +- 1.5.0 estável, fechando as betas +- Overlay de FPS, ligado pelo menu da sessão ([#66](https://github.com/lippdev/consolemode/issues/66)) +- Gravar os últimos 30 segundos pelo menu da sessão +- Salvar e restaurar a posição dos ícones da área de trabalho ([#30](https://github.com/lippdev/consolemode/issues/30)) + +**Depois** +- Perfis por jogo: resolução, HDR e áudio para cada jogo ([#69](https://github.com/lippdev/consolemode/issues/69)) +- Bateria do controle no menu da sessão ([#70](https://github.com/lippdev/consolemode/issues/70)) +- Publicar no winget ([#13](https://github.com/lippdev/consolemode/issues/13)) +- Mais idiomas na interface ([#14](https://github.com/lippdev/consolemode/issues/14)) + +**Explorando** +- Widget na Xbox Game Bar ([#11](https://github.com/lippdev/consolemode/issues/11)) +- Comandos de voz e assistentes: Alexa, MCP ([#12](https://github.com/lippdev/consolemode/issues/12)) +- Integração com o WakeOn: ligar o PC já no modo console ([#71](https://github.com/lippdev/consolemode/issues/71)) +- Controle pelo celular usando a API de controle local ([#72](https://github.com/lippdev/consolemode/issues/72)) + ## Feedback Encontrou um bug ou tem uma ideia? É o feedback que define as próximas melhorias, então todo relato conta. diff --git a/assets/roadmap.gif b/assets/roadmap.gif new file mode 100644 index 0000000..608bd44 Binary files /dev/null and b/assets/roadmap.gif differ diff --git a/docs/explainer/README.md b/docs/explainer/README.md index 143a9d3..592c242 100644 --- a/docs/explainer/README.md +++ b/docs/explainer/README.md @@ -19,3 +19,13 @@ npm run whats-new ``` Grava `assets/whats-new.gif` (renderiza um MP4 e converte com o ffmpeg, que precisa estar no PATH, para ficar em ~3–4 MB). + +## Roadmap (`Roadmap`) + +Quadro com as colunas Next, Later e Exploring. Os itens ficam em `src/Roadmap.tsx` (`COLUMNS`) e devem acompanhar a seção "Roadmap" do README. + +```console +npm run roadmap +``` + +Grava `assets/roadmap.gif`. diff --git a/docs/explainer/package.json b/docs/explainer/package.json index c2de51f..c36d56b 100644 --- a/docs/explainer/package.json +++ b/docs/explainer/package.json @@ -26,6 +26,7 @@ "mp4": "remotion render src/index.ts ConsoleModeExplainer out/explainer.mp4", "upgrade": "remotion upgrade", "lint": "eslint src && tsc", - "whats-new": "remotion render src/index.ts WhatsNew out/whats-new.mp4 && ffmpeg -y -loglevel error -i out/whats-new.mp4 -vf \"fps=15,scale=960:-1:flags=lanczos,split[a][b];[a]palettegen=max_colors=128:stats_mode=diff[p];[b][p]paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle\" ../../assets/whats-new.gif" + "whats-new": "remotion render src/index.ts WhatsNew out/whats-new.mp4 && ffmpeg -y -loglevel error -i out/whats-new.mp4 -vf \"fps=15,scale=960:-1:flags=lanczos,split[a][b];[a]palettegen=max_colors=128:stats_mode=diff[p];[b][p]paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle\" ../../assets/whats-new.gif", + "roadmap": "remotion render src/index.ts Roadmap out/roadmap.mp4 && ffmpeg -y -loglevel error -i out/roadmap.mp4 -vf \"fps=15,scale=960:-1:flags=lanczos,split[a][b];[a]palettegen=max_colors=128:stats_mode=diff[p];[b][p]paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle\" ../../assets/roadmap.gif" } } diff --git a/docs/explainer/src/Roadmap.tsx b/docs/explainer/src/Roadmap.tsx new file mode 100644 index 0000000..8ac37c0 --- /dev/null +++ b/docs/explainer/src/Roadmap.tsx @@ -0,0 +1,175 @@ +import React from "react"; +import { + AbsoluteFill, + Easing, + interpolate, + spring, + useCurrentFrame, + useVideoConfig, +} from "remotion"; +import { theme } from "./theme"; + +// Roadmap board for the README: three columns (Next, Later, Exploring) whose cards pop in, +// then each column is spotlighted in turn. Items mirror the "Roadmap" section of README.md. + +const font = "Segoe UI, system-ui, sans-serif"; +const ease = { + extrapolateLeft: "clamp" as const, + extrapolateRight: "clamp" as const, + easing: Easing.bezier(0.22, 1, 0.36, 1), +}; +const linear = { extrapolateLeft: "clamp" as const, extrapolateRight: "clamp" as const }; + +type Item = { icon: string; title: string; note: string; issue?: number }; +type Column = { name: string; color: string; items: Item[] }; + +const COLUMNS: Column[] = [ + { + name: "Next", + color: theme.accent, + items: [ + { icon: "✅", title: "1.5.0 stable", note: "Wrap up the betas" }, + { icon: "📈", title: "FPS overlay", note: "Toggle it from Select + Y", issue: 66 }, + { icon: "⏺", title: "Record last 30 s", note: "From the session menu" }, + { icon: "🗂", title: "Desktop icons", note: "Saved and put back", issue: 30 }, + ], + }, + { + name: "Later", + color: "#66c0f4", + items: [ + { icon: "🎯", title: "Per-game profiles", note: "Resolution, HDR, audio per game", issue: 69 }, + { icon: "🔋", title: "Controller battery", note: "Shown in the session menu", issue: 70 }, + { icon: "📦", title: "winget", note: "winget install ConsoleMode", issue: 13 }, + { icon: "🌍", title: "More languages", note: "Community translations", issue: 14 }, + ], + }, + { + name: "Exploring", + color: "#c792ea", + items: [ + { icon: "🧩", title: "Game Bar widget", note: "Start and restore from Win + G", issue: 11 }, + { icon: "🗣", title: "Voice triggers", note: "Alexa, assistants, MCP", issue: 12 }, + { icon: "⚡", title: "WakeOn integration", note: "Wake the PC straight into console mode", issue: 71 }, + { icon: "📱", title: "Phone remote", note: "Over the local control API", issue: 72 }, + ], + }, +]; + +const INTRO = 50; +const BOARD = 60; // cards finish popping in by INTRO + BOARD +const SPOT = 75; // frames per column spotlight +const OUTRO = 70; +export const ROADMAP_DURATION = INTRO + BOARD + SPOT * COLUMNS.length + OUTRO; + +const Card: React.FC<{ item: Item; appear: number; lit: number; color: string }> = ({ item, appear, lit, color }) => ( +
0.5 ? color : "rgba(255,255,255,0.08)"}`, + borderRadius: 14, + padding: "14px 16px", + display: "flex", + gap: 14, + alignItems: "center", + opacity: appear, + translate: `0 ${(1 - appear) * 24}px`, + boxShadow: lit > 0.5 ? `0 0 24px ${color}55` : "none", + }} + > +
{item.icon}
+
+
+ {item.title} + {item.issue && #{item.issue}} +
+
{item.note}
+
+
+); + +export const Roadmap: React.FC = () => { + const f = useCurrentFrame(); + const { fps, durationInFrames } = useVideoConfig(); + const fade = interpolate(f, [0, 12, durationInFrames - 14, durationInFrames], [0, 1, 1, 0], linear); + + const titleIn = spring({ frame: f, fps, config: { damping: 14 } }); + // Title starts centered, then moves up to make room for the board. + const titleY = interpolate(f, [INTRO - 14, INTRO + 6], [300, 44], ease); + const titleScale = interpolate(f, [INTRO - 14, INTRO + 6], [1.25, 0.8], ease); + + const spotStart = INTRO + BOARD; + const spotIndex = f < spotStart ? -1 : Math.floor((f - spotStart) / SPOT); + const outroStart = spotStart + SPOT * COLUMNS.length; + const outro = interpolate(f, [outroStart, outroStart + 16], [0, 1], ease); + + return ( + +
+
CONSOLE MODE
+
Roadmap
+
+ +
+ {COLUMNS.map((col, c) => { + const colIn = interpolate(f, [INTRO + c * 8, INTRO + c * 8 + 14], [0, 1], ease); + const lit = spotIndex === c ? 1 : 0; + const dim = spotIndex >= 0 && spotIndex < COLUMNS.length && spotIndex !== c ? 0.4 : 1; + const lift = spotIndex === c ? interpolate(f - (spotStart + c * SPOT), [0, 14], [0, 1], ease) : 0; + return ( +
+
+
+
{col.name.toUpperCase()}
+
+ {col.items.map((item, i) => { + const start = INTRO + 10 + c * 8 + i * 7; + const appear = interpolate(f, [start, start + 14], [0, 1], ease); + return ; + })} +
+ ); + })} +
+ + {/* Outro */} +
+
Have an idea?
+
+ Vote or suggest on github.com/lippdev/consolemode/issues +
+
+ + ); +}; diff --git a/docs/explainer/src/Root.tsx b/docs/explainer/src/Root.tsx index b6029d8..c417ba3 100644 --- a/docs/explainer/src/Root.tsx +++ b/docs/explainer/src/Root.tsx @@ -3,6 +3,7 @@ import type { FC } from "react"; import { Composition } from "remotion"; import { Explainer } from "./Explainer"; import { WHATS_NEW_DURATION, WhatsNew } from "./WhatsNew"; +import { ROADMAP_DURATION, Roadmap } from "./Roadmap"; export const RemotionRoot: FC = () => { return ( @@ -23,6 +24,14 @@ export const RemotionRoot: FC = () => { width={1280} height={720} /> + ); };