Olli Paloviita 578ff0e536 Let the anonymous trial run screenci edit; require an account for export
The anonymous trial is now preview-only. screenci edit works without a
SCREENCI_SECRET: the anon session token doubles as the dev token, and a
claimed trial self-upgrades in place (the claim-minted org secret and
personal editor token are persisted into .env and the bridge reconnects
without stopping). Expired or claimed-elsewhere sessions get clear
next steps.

screenci export now refuses the anonymous trial up front and points at
edit for the free live preview and at sign-up for exporting; a claimed
trial self-upgrades to the real secret and proceeds.

Docs and the agent skill are updated to match.
2026-08-13 12:18:18 +03:00
2026-08-12 21:43:41 +03:00
2026-08-12 21:01:45 +03:00
2026-07-06 00:54:35 +03:00
2026-07-06 00:54:35 +03:00
2026-05-22 10:33:55 +03:00
2026-08-12 21:43:41 +03:00
2026-08-12 21:43:41 +03:00
2026-03-29 11:38:31 +03:00
2026-03-29 11:38:31 +03:00

screenci

Your UI changed. Your demo videos didn't. screenci fixes that.

Record product walkthroughs as code. When the UI ships, run npx screenci export and your videos regenerate. You keep the Playwright mental model, but the output is a maintainable product video instead of a test report.

Learn more at screenci.com.

Get started

npm init screenci@latest
# or
pnpm create screenci

This scaffolds a self-contained screenci/ directory with its own dependencies and installs Chromium. The directory is isolated from the surrounding workspace, which keeps installation reliable inside monorepos.

Then write a video, run it locally, refine it, and export the final output:

npx screenci test      # author the video
npx screenci edit      # record it and open the web editor
npx screenci export    # render and download the finished video

Full docs:

Write a video

Video scripts are Playwright-style files with a .screenci.ts extension. If you already know Playwright locators, navigation, and waiting, you already know most of the automation layer.

// recordings/onboarding.screenci.ts
import { hide, speed, time, video } from 'screenci'

video('Onboarding flow', async ({ page }) => {
  await hide(async () => {
    await page.goto('https://app.example.com/signup')
  })

  await page.getByLabel('Email').fill('jane@example.com')
  await page.getByRole('button', { name: 'Create account' }).click()
  await speed(0.5, async () => {
    await page.getByRole('button', { name: 'Open dashboard tour' }).click()
  })
  await time(1000, async () => {
    await page.getByRole('button', { name: 'Skip tutorial' }).click()
  })
  await page.getByRole('heading', { name: 'Dashboard' }).waitFor()
})

Each video() call becomes one output video. The title becomes the filename and the remote video identity. Inside video(), page is a ScreenCIPage: a Playwright Page with animated cursor movement and visible typing layered on top of normal Playwright behavior.

hide() removes setup entirely. speed() and time() keep a section visible but remap its rendered duration.

Authoring helpers

Export What it does
defineConfig Wraps Playwright config with ScreenCI defaults
video Declares a video recording test
video.narration Declares narration cues (per language or shared) for a video
hide Cuts setup or cleanup out of the visible recording
autoZoom Smooth camera follow for an interaction block
zoomTo Manual camera framing for a locator or point
resetZoom Returns from manual framing to the full viewport
createOverlays Inserts timed media overlays into the recording timeline
voices Available voice constants such as voices.Ava
modelTypes Narration model constants

See the docs for configuration, narration, camera, and CI setup.

Community

Questions, ideas, or want to show off your videos? Join us on Discord.

S
Description
playwright-cli: Automate browser interactions, test web pages and work with Playwright tests.; screenci: Create, show, and guide with ScreenCI videos in an already-initialized project by editing .screenci.ts files and running the Screenci workflow.
Readme 4.2 MiB
Languages
TypeScript 99.3%
HTML 0.5%
JavaScript 0.1%