diff --git a/docs/custom.css b/docs/custom.css index 74049c59b66..baa38450b8c 100644 --- a/docs/custom.css +++ b/docs/custom.css @@ -1334,3 +1334,35 @@ header.is-frame ~ #body-content #content-area { padding-right: 2.5rem; } } + +/* An image set beside the text it explains (magazine style); full width on narrow screens. */ +.hf-aside { + float: right; + width: 46%; + margin: 0.25rem 0 1rem 1.5rem; + border-radius: 0.5rem; + border: 1px solid rgb(0 0 0 / 0.08); +} +.dark .hf-aside { + border-color: rgb(255 255 255 / 0.1); +} +@media (max-width: 640px) { + .hf-aside { + float: none; + width: 100%; + margin: 0.5rem 0 1rem; + } +} + +/* A row of portrait films with a caption under each (explainer styles and similar) */ +.hf-shelf { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1rem; margin: 1.25rem 0 2rem; } +.hf-shelf p { margin: 0.5rem 0 0; font-size: 0.875rem; line-height: 1.45; } +@media (max-width: 640px) { .hf-shelf { grid-template-columns: minmax(0, 1fr); } } + +/* Short looping clips that show where a control is, floated beside the text that names it */ +.hf-spot { aspect-ratio: 16 / 10; object-fit: cover; border-radius: 0.6rem; background: rgb(0 0 0 / 0.06); + box-shadow: 0 0 0 1px rgb(0 0 0 / 0.08); margin: 0.25rem 0 1rem 1.25rem; } +.dark .hf-spot { box-shadow: 0 0 0 1px rgb(255 255 255 / 0.1); } +h2 { clear: both; } + +.hf-spot.hf-spot-inline { width: 100%; margin: 0; } diff --git a/docs/docs.json b/docs/docs.json index 90b5c44470f..bc9bd9b6829 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -253,23 +253,19 @@ "icon": "laptop", "groups": [ { - "group": "Get started", + "group": "Studio app", "pages": [ "studio-app/index", - "studio-app/connect-your-agent" - ] - }, - { - "group": "Make videos", - "pages": [ "studio-app/first-video", + "studio-app/existing-project", + "studio-app/reference-video", + "studio-app/brand-kits", + "studio-app/video-clips", "studio-app/edit-with-the-agent", - "studio-app/export" - ] - }, - { - "group": "Help", - "pages": [ + "studio-app/workspace", + "studio-app/connect-your-agent", + "studio-app/export", + "studio-app/share", "studio-app/troubleshooting" ] } diff --git a/docs/public/images/studio-app/export.jpg b/docs/public/images/studio-app/export.jpg deleted file mode 100644 index a61189aa333..00000000000 Binary files a/docs/public/images/studio-app/export.jpg and /dev/null differ diff --git a/docs/public/images/studio-app/first-video-demo-v2.jpg b/docs/public/images/studio-app/first-video-demo-v2.jpg new file mode 100644 index 00000000000..cf0418c7ad0 Binary files /dev/null and b/docs/public/images/studio-app/first-video-demo-v2.jpg differ diff --git a/docs/public/images/studio-app/home.jpg b/docs/public/images/studio-app/home.jpg index 66e5fa8d7a4..ebcb4eb84b6 100644 Binary files a/docs/public/images/studio-app/home.jpg and b/docs/public/images/studio-app/home.jpg differ diff --git a/docs/public/images/studio-app/project.jpg b/docs/public/images/studio-app/project.jpg deleted file mode 100644 index b7f0ae9e2e8..00000000000 Binary files a/docs/public/images/studio-app/project.jpg and /dev/null differ diff --git a/docs/public/images/studio-app/reference-demo-v2.jpg b/docs/public/images/studio-app/reference-demo-v2.jpg new file mode 100644 index 00000000000..114fdb5953b Binary files /dev/null and b/docs/public/images/studio-app/reference-demo-v2.jpg differ diff --git a/docs/public/images/studio-app/script-demo-v2.jpg b/docs/public/images/studio-app/script-demo-v2.jpg new file mode 100644 index 00000000000..0d8b64b5ca6 Binary files /dev/null and b/docs/public/images/studio-app/script-demo-v2.jpg differ diff --git a/docs/public/images/studio-app/share-demo-v2.jpg b/docs/public/images/studio-app/share-demo-v2.jpg new file mode 100644 index 00000000000..f90c4ba0d36 Binary files /dev/null and b/docs/public/images/studio-app/share-demo-v2.jpg differ diff --git a/docs/public/images/studio-app/snow-demo-v2.jpg b/docs/public/images/studio-app/snow-demo-v2.jpg new file mode 100644 index 00000000000..68a7acf2c0a Binary files /dev/null and b/docs/public/images/studio-app/snow-demo-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/agent-picker-v2.jpg b/docs/public/images/studio-app/spots/agent-picker-v2.jpg new file mode 100644 index 00000000000..65ef873e768 Binary files /dev/null and b/docs/public/images/studio-app/spots/agent-picker-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/at-menu-v2.jpg b/docs/public/images/studio-app/spots/at-menu-v2.jpg new file mode 100644 index 00000000000..d0c13921d54 Binary files /dev/null and b/docs/public/images/studio-app/spots/at-menu-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/brand-kits-nav-v2.jpg b/docs/public/images/studio-app/spots/brand-kits-nav-v2.jpg new file mode 100644 index 00000000000..8096723e510 Binary files /dev/null and b/docs/public/images/studio-app/spots/brand-kits-nav-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/brandkit-chip-v2.jpg b/docs/public/images/studio-app/spots/brandkit-chip-v2.jpg new file mode 100644 index 00000000000..41a39f26a85 Binary files /dev/null and b/docs/public/images/studio-app/spots/brandkit-chip-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/captions-panel-tight-v2.jpg b/docs/public/images/studio-app/spots/captions-panel-tight-v2.jpg new file mode 100644 index 00000000000..112bc89c5cb Binary files /dev/null and b/docs/public/images/studio-app/spots/captions-panel-tight-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/comment-tool-v2.jpg b/docs/public/images/studio-app/spots/comment-tool-v2.jpg new file mode 100644 index 00000000000..c093b3b7291 Binary files /dev/null and b/docs/public/images/studio-app/spots/comment-tool-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/go-back-v2.jpg b/docs/public/images/studio-app/spots/go-back-v2.jpg new file mode 100644 index 00000000000..8ebffa448c1 Binary files /dev/null and b/docs/public/images/studio-app/spots/go-back-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/hash-tools-v2.jpg b/docs/public/images/studio-app/spots/hash-tools-v2.jpg new file mode 100644 index 00000000000..092e40f3a55 Binary files /dev/null and b/docs/public/images/studio-app/spots/hash-tools-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/import-projects-v2.jpg b/docs/public/images/studio-app/spots/import-projects-v2.jpg new file mode 100644 index 00000000000..b7f44a6f92c Binary files /dev/null and b/docs/public/images/studio-app/spots/import-projects-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/inspirations-panel-tight-v2.jpg b/docs/public/images/studio-app/spots/inspirations-panel-tight-v2.jpg new file mode 100644 index 00000000000..746c2917e89 Binary files /dev/null and b/docs/public/images/studio-app/spots/inspirations-panel-tight-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/inspirations-panel-v2.jpg b/docs/public/images/studio-app/spots/inspirations-panel-v2.jpg new file mode 100644 index 00000000000..0a53700fe44 Binary files /dev/null and b/docs/public/images/studio-app/spots/inspirations-panel-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/layers-panel-tight-v2.jpg b/docs/public/images/studio-app/spots/layers-panel-tight-v2.jpg new file mode 100644 index 00000000000..bfa317d7ad4 Binary files /dev/null and b/docs/public/images/studio-app/spots/layers-panel-tight-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/settings-agent-v2.jpg b/docs/public/images/studio-app/spots/settings-agent-v2.jpg new file mode 100644 index 00000000000..4a557a68c16 Binary files /dev/null and b/docs/public/images/studio-app/spots/settings-agent-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/settings-permissions-v2.jpg b/docs/public/images/studio-app/spots/settings-permissions-v2.jpg new file mode 100644 index 00000000000..cc939b92485 Binary files /dev/null and b/docs/public/images/studio-app/spots/settings-permissions-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/settings-updates-v2.jpg b/docs/public/images/studio-app/spots/settings-updates-v2.jpg new file mode 100644 index 00000000000..a154209adee Binary files /dev/null and b/docs/public/images/studio-app/spots/settings-updates-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/share-button-v2.jpg b/docs/public/images/studio-app/spots/share-button-v2.jpg new file mode 100644 index 00000000000..4f74795a62a Binary files /dev/null and b/docs/public/images/studio-app/spots/share-button-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/show-timeline-v2.jpg b/docs/public/images/studio-app/spots/show-timeline-v2.jpg new file mode 100644 index 00000000000..0bea652568c Binary files /dev/null and b/docs/public/images/studio-app/spots/show-timeline-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/skills-menu-v2.jpg b/docs/public/images/studio-app/spots/skills-menu-v2.jpg new file mode 100644 index 00000000000..c474e820883 Binary files /dev/null and b/docs/public/images/studio-app/spots/skills-menu-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/slash-menu-v2.jpg b/docs/public/images/studio-app/spots/slash-menu-v2.jpg new file mode 100644 index 00000000000..5bc6ce9c80c Binary files /dev/null and b/docs/public/images/studio-app/spots/slash-menu-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/storyboard-tab-v2.jpg b/docs/public/images/studio-app/spots/storyboard-tab-v2.jpg new file mode 100644 index 00000000000..8cd40487d24 Binary files /dev/null and b/docs/public/images/studio-app/spots/storyboard-tab-v2.jpg differ diff --git a/docs/public/images/studio-app/spots/video1-tool-v2.jpg b/docs/public/images/studio-app/spots/video1-tool-v2.jpg new file mode 100644 index 00000000000..c773aadc096 Binary files /dev/null and b/docs/public/images/studio-app/spots/video1-tool-v2.jpg differ diff --git a/docs/public/images/studio-app/studio-draw-demo-v2.jpg b/docs/public/images/studio-app/studio-draw-demo-v2.jpg new file mode 100644 index 00000000000..50fea7cecc6 Binary files /dev/null and b/docs/public/images/studio-app/studio-draw-demo-v2.jpg differ diff --git a/docs/public/images/studio-app/studio-export-demo-v2.jpg b/docs/public/images/studio-app/studio-export-demo-v2.jpg new file mode 100644 index 00000000000..09826607f08 Binary files /dev/null and b/docs/public/images/studio-app/studio-export-demo-v2.jpg differ diff --git a/docs/snippets/docs-video.jsx b/docs/snippets/docs-video.jsx index 7dacfc3a12f..32a4da0a402 100644 --- a/docs/snippets/docs-video.jsx +++ b/docs/snippets/docs-video.jsx @@ -5,6 +5,7 @@ export const DocsVideo = ({ autoPlay = false, loop = false, portrait = false, + aspect, // e.g. "16 / 10" for app recordings; the frame is 16 / 9 otherwise }) => { const videoRef = useRef(null); const playerRef = useRef(null); @@ -13,10 +14,30 @@ export const DocsVideo = ({ const [enhanced, setEnhanced] = useState(false); const [playing, setPlaying] = useState(false); const [waiting, setWaiting] = useState(false); - const [muted, setMuted] = useState(false); + // Browsers only autoplay muted video, so an autoplaying player starts muted; the sound button unmutes it. + const [muted, setMuted] = useState(autoPlay); const [currentTime, setCurrentTime] = useState(0); const [duration, setDuration] = useState(0); const [playbackRate, setPlaybackRate] = useState(1); + // Lazy, like ShowcaseWall's: a reduce-motion visitor's first render must not autoplay. The controls still play it. + const [reduced, setReduced] = useState( + () => typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches, + ); + useEffect(() => { + const query = window.matchMedia("(prefers-reduced-motion: reduce)"); + const onChange = (event) => setReduced(event.matches); + query.addEventListener("change", onChange); + return () => query.removeEventListener("change", onChange); + }, []); + // Turning Reduce Motion on mid-visit must stop an autoplaying loop for real: React props can't pause it or drop + // its file. The play button loads it again (togglePlayback). + useEffect(() => { + const video = videoRef.current; + if (!reduced || !autoPlay || !video) return; + video.pause(); + video.removeAttribute("src"); + video.load(); + }, [reduced, autoPlay]); const [controlsVisible, setControlsVisible] = useState(false); const [fullscreen, setFullscreen] = useState(false); const [fullscreenSupported, setFullscreenSupported] = useState(false); @@ -49,6 +70,7 @@ export const DocsVideo = ({ const video = videoRef.current; if (!video) return; if (video.paused || video.ended) { + if (!video.getAttribute("src")) video.src = src; // dropped when Reduce Motion stopped the loop if (video.ended) video.currentTime = 0; setWaiting(true); try { @@ -191,6 +213,7 @@ export const DocsVideo = ({
{ +export const HoverVideo = ({ src, poster, className, label, hasAudio = true }) => { const videoRef = useRef(null); const wrapRef = useRef(null); const [muted, setMuted] = useState(true); @@ -86,6 +86,7 @@ export const HoverVideo = ({ src, poster, className, hasAudio = true }) => {