Reference
Use the Rayslides controls.
Use this page during editing or a live presentation.
Command-line options
rayslides [options] [deck.sld]
| Option | Action |
|---|---|
--studio | Open the deck in Studio. |
--neovim-clean | Start an enabled embedded Neovim editor without user configuration or plugins. |
--neovim-path=PATH | Try this Neovim executable before normal discovery. |
--neovim-font=PATH | Use this font for the primary Neovim grid face; supported emoji retain the Rayslides fallback. |
--neovim-font-size=PIXELS | Set Neovim grid text to a size from 10 through 48. |
--no-crowd | Disable the Crowdplay server. |
--crowd-host=HOST | Bind Crowdplay to the given host. |
--crowd-port=PORT | Change the Crowdplay port. The default is 7331. |
--presenter-host=HOST | Advertise the given Presenter address. |
--presenter-port=PORT | Change the Presenter port. The default is 7332. |
--showtime-report=JSON | Preflight the exact deck, write stable JSON, and exit nonzero on blockers. |
--portable-show=DIR | Create an ordinary deck-and-assets folder, independently re-open it, preflight it, and write its report. |
--diagnostics-goto-slide | Open with the shared go-to-slide picker visible for deterministic Studio or presentation QA. |
-h, --help | Show the complete option list. |
-v, --version | Show the version. |
A deck path can appear before or after the options. Use -- before a path that starts with a hyphen.
Presentation controls
| Control | Action |
|---|---|
| Right, Page Down, Space, or click | Show the next step or slide. |
| Left, Page Up, or Backspace | Hide the current step or show the previous slide. |
| 1 or G | Show the first slide. |
| 0 or Shift + G | Show the last slide. |
| Cmd/Ctrl + G | Open the numeric go-to-slide picker without leaving the current slide. |
| F | Turn fullscreen on or off. |
| D | Identify and explicitly choose the presentation display. |
| L | Turn the laser pointer on or off. |
| Shift + L | Select the next pointer size. |
| C | Clear the pointer drawing. |
| M | Play or pause the videos on the current slide. |
| Shift + M | Stop the videos on the current slide and rewind them. |
| B | Turn Beast Mode on or off. Beast Mode removes the 60 FPS limit. |
| E | Enter or leave Studio. |
| Cmd/Ctrl-O | Browse for and open another .sld deck. |
| F3 | Show or hide the diagnostics display. |
No keystroke quits Rayslides. Q and Esc are harmless during a presentation. See Quit Rayslides.
Quit Rayslides
A stray keypress in front of an audience must never end the show, so Rayslides has no quit key. Close the app either way:
- Run Quit Rayslides from the command palette. Press E to enter Studio if you are presenting, then press Cmd/Ctrl + K (or click Commands) and choose Quit Rayslides.
- Use your operating system or window manager: the window's close button, Cmd + Q on macOS, or whatever your desktop binds to closing a window.
Both paths run the same protection. Unsaved Studio edits are written to a unique *.edited.sld recovery copy first, and if that copy cannot be written the quit is cancelled and the deck stays open.
Go directly to a slide
Press Cmd/Ctrl + G in either presentation mode or Studio. The centered picker accepts digits only and shows the current slide and the deck's slide count; it does not preview or navigate while you type.
Press Enter to jump when the number is from 1 through the final slide. An empty, zero, or out-of-range value leaves the picker open with a bounds message. Press Esc or Cmd/Ctrl + G again to close it. Opening or cancelling preserves the current slide and playback state.
Save images and PDFs
| Control | Output |
|---|---|
| S | Save the current slide as a PNG file. |
| Shift + S | Save screenshots and export the deck as a PDF. |
The PDF contains one page for each logical slide. Rayslides uses the final reveal and morph state.
Showtime preflight
Open Studio's Commands menu and choose Showtime preflight. Showtime walks every base scene, reveal endpoint, cumulative morph scene, reusable definition, and deterministic poster-frame export graph without navigating, seeking, playing media, editing source, or changing history and selection.
Blockers include malformed source, unavailable presentation pixels, missing glyphs, and unavailable required services. Warnings identify reviewable conditions such as text overflow, off-canvas staging, non-portable paths, display mismatch, or an unmeasured Presenter rehearsal. Findings link to a slide/object or editable Library definition when possible.
| Control | Action |
|---|---|
| Up/Down or wheel | Review findings. |
| Enter | Open the selected slide, object, definition, or source location. |
| R | Rerun against the current exact document and venue state. |
| P | Create a portable show folder. |
| Esc | Close Showtime. |
Create portable show copies literal image, video, and custom-font dependencies beneath assets/, handles equal basenames deterministically, rewrites only the copied references in a readable .sld, then re-opens and preflights the copy. It refuses an existing destination and never edits the original. Presenter latency evidence contains only bounded counts, median/p95 values, and failures—never notes, private URLs, capabilities, sessions, or client identity.
Studio tools
| Tool | Key | Action |
|---|---|---|
| Select | V | Select, move, and resize an object. |
| Text | T | Add a text box. |
| Bullets | B | Add one bullet for each source line. |
| Image | I | Browse for and place an image. |
| Video | M | Browse for and place a video. |
| Rectangle | R | Add a colored shape. |
| Line | L | Add a plain line; A adds one with an end arrow. |
| Library | U | Place a reusable item. |
Image and Video prompts include a Browse… file picker on every platform: the same Rayslides-drawn chooser used by Open deck… (Cmd/Ctrl-O), filtered to images or videos. Manual path entry remains available everywhere. Dropping a supported image or video over the Studio canvas creates that media item at the drop position. Saved decks use a relative path when possible.
SVG files use the Image path, including picker, replacement, fitting, reusable ownership, diagnostics, and export. The embedded vector subset does not render SVG <text>; convert type to paths first.
When an image or video is selected, Properties shows its effective IMAGE or VIDEO kind, its filename/path, and a separate ... replacement button. Click ..., or press Enter while Properties is visible, to choose a new source through the same picker and path policy without changing the object's geometry, ID, ordering, or other properties. On reusable instances, an amber R beside a local source override restores the inherited image or video.
Both media kinds share Stretch, Fit, and Fill controls. Fit preserves the complete picture inside the box; Fill preserves aspect ratio while cropping to cover it. FX and FY choose the normalized focal position from 0 to 1, and the panel shows natural pixels beside the authored box size.
Video Properties also has a Playback page for Auto, Loop, Mute, poster time and scrubbing, volume, and opacity. Poster changes select the still shown before playback; playback itself still begins at the start. Authored volume and mute are restored on slide entry, while presenter adjustments remain temporary for that visit. Amber R markers reset local source, Fit, focus, poster, volume, and playback-toggle overrides independently.
A live camera is a normal transformed video object: @box cam=0 video_size=1920x1080 poster_image=assets/camera-off.png x=520 y=180 w=880 h=560 fit=cover rotation=-12. It supports Fit/Fill, focal position, opacity, rotation, and morph geometry. The poster is used while stopped and in passive/export views. On macOS, run the bundled Rayslides.app so the system can request camera permission; after allowing the first prompt, press Play again if that initial start timed out. On Linux, identify the built-in or USB V4L2 device with v4l2-ctl --list-devices and prefer its stable /dev/v4l/by-id/... path; add cam_format=mjpeg to reach a mode the camera offers in MJPEG alone, commonly every mode above 640×480. See the live camera guide and tested rotated-feed screenshot.
If media cannot load, Studio keeps a selectable fallback box while the filename and ... replacement action remain available. It distinguishes missing or unreadable files, unsupported image data, missing ffmpeg/ffprobe, probe or codec failures, and poster decode failures. Out-of-range or recoverable poster choices receive amber warnings without losing their pixels, and silent videos are identified without being treated as broken. These diagnostics are Studio chrome and do not enter presentation or export pixels.
Properties also exposes text alignment, rectangle radius, line stroke/direction/arrow heads, and exact clockwise rotation=. Drag the connected handle above a selected text, shape, image, video, or line object to rotate it; hold Shift for 15° steps. Painted hit testing, bounds, smart-guide targets, reusable/local ownership, morphing, Showtime, screenshots, and PDF export use the same rotation.
Studio editing controls
| Control | Action |
|---|---|
| Cmd/Ctrl + K | Open the command palette. |
| Cmd/Ctrl + E | Open the complete deck in the optional embedded Neovim editor at the current slide's @slide or @popslide line. |
| Cmd/Ctrl + G | Open the numeric go-to-slide picker shared with presentation mode. |
| Cmd/Ctrl + F | Find a slide, library item, or object. |
| Cmd/Ctrl + O | Open an existing deck through the built-in file chooser; also available as Open existing deck… on the starter chooser. |
| Cmd/Ctrl + S | Name an untitled deck or save the named deck. |
| Shift + Cmd/Ctrl + S | Save a unique *.edited.sld copy. |
| Cmd/Ctrl + Z | Undo the last source edit. After choosing a starter, return to the chooser. |
| Shift + Cmd/Ctrl + Z | Redo the last source edit. |
| Cmd/Ctrl + C / V | Copy or paste supported objects. |
| Cmd/Ctrl + D | Duplicate the selection or the current slide. |
| Backspace | Delete the selected objects. |
| Cmd/Ctrl + L | Lock or unlock the selected objects. |
| Cmd/Ctrl + A | Select every editable object in the scene. |
| Shift + click | Add or remove an object from the selection. |
| Drag empty canvas | Select each object that overlaps the marquee. |
| Arrow keys | Move the selection by one logical pixel. Hold Shift for ten. |
| Cmd/Ctrl + [ / ] | Move the selection one layer down or up. |
| Shift + Cmd/Ctrl + [ / ] | Move the selection to the back or front. |
| Enter | Edit text or use the selected library item. |
| P | Promote the selected object for reuse. |
| F2 | Rename the selected library definition and its uses. |
| Cmd/Ctrl + N | Add a slide after the current slide. |
| Page Up / Page Down | Select the previous or next slide. |
| [ / ] | Select the previous or next morph scene. |
| Tab | Turn Focus Canvas on or off. |
| G | Turn the grid and grid snapping on or off. |
While the Neovim overlay is open, it owns keyboard and mouse input. Studio and presentation shortcuts do not run until Neovim exits.
Move around the canvas
| Control | Action |
|---|---|
| Cmd/Ctrl + mouse wheel | Zoom around the pointer. |
| Cmd/Ctrl + + / - | Zoom around the canvas center. |
| Cmd/Ctrl + 0 | Fit and center the complete slide. |
| Mouse wheel or trackpad | Pan the canvas. |
| Space + drag or middle-button drag | Pan the canvas directly. |
| Hold Cmd/Ctrl while dragging | Bypass the guides and grid snapping. |
| Hold Shift while resizing | Preserve the displayed aspect ratio. |
| Drag the handle above an object | Rotate clockwise around its effective center; hold Shift for 15° steps. |
| Hold Alt while editing a template item | Edit the shared definition. |
Phone and audience controls
| Control | Action |
|---|---|
| P | Show or hide the private Presenter pairing panel. |
| Shift + P | Unpair the phone and stop the Presenter server. |
| N while pairing | Select another active network address and rotate the private capability. |
| L while pairing | Copy the complete private link for an intentional laptop companion. |
| D | List, identify, and choose the projector display without guessing. |
| O | Open or lock the active Crowdplay poll. |
| V | Show or hide the poll results. |
| R | Reset the active poll votes. |
Limits and defaults
| Area | Value |
|---|---|
| Slide coordinate system | 1920 × 1080 |
| Default reveal | fade, by=item, 0.3 seconds |
| Default morph | smooth, 0.6 seconds |
| Default transition | 0.4 seconds |
| Morph easing | linear, smooth, or spring |
| Reveal and transition effects | appear, fade, and four slide directions |
| Poll choices | Up to 8 choices |
| Polls in one deck | Up to 32 polls |
| Active participants | Up to 512 participants |
| Poll ID | 48 bytes; use letters, digits, -, or _ |
| Poll prompt | Up to 192 bytes |
| Poll choice label | Up to 64 bytes |
| Crowdplay panel | x=100 y=80 w=1720 h=920 by default |
Use one Crowdplay item on each slide. Give every poll a unique ID.
Diagnostics
Press F3 or use --diagnostics. The display shows frame, rebuild, cache, deck, and window data.
The CLI also provides deterministic capture options. Run rayslides --help for the current list.