npx vfrey --version prints the installed version. Run every command as npx vfrey ... from your project folder (or any folder inside it). Start a project with npm create vfrey@latest my-channel (beta: @beta). Outside a project, use npx @vfrey/vfrey ... instead of npx vfrey ..., or install it once with npm i -g @vfrey/vfrey and run vfrey ... anywhere. See Projects. Words in capitals, like JOB_ID, are placeholders. npx vfrey --help lists the same commands, and npx vfrey COMMAND --help lists one command’s flags.
Start a project
--from DIR imports a data folder, such as the machine desk ~/.vfrey: its database, its videos as readable files with transcripts, and its scene copies. The source is not changed. See Projects.
Make a video
script.json is { "title", "hook", "lines", "hashtags" }: a title up to 100 characters, a required hook, 4 to 12 lines of up to 220 characters each, and 1 to 8 hashtags that start with #. The lines must use at least 2 of the subject’s key words, or the script is rejected for subject-binding. More than 8 lines are folded into 8 visual beats, and the voice still reads every line. Without --about, the subject is the script’s subject field, else its title. Without --script, vfrey writes a basic script itself, which is a placeholder unless a model is configured. A run with --about or --script is a one-off video, and a series job in progress does not block it.
tick also takes --json for a machine summary (it has project as {name, root} or null, and each job has engage as {status, code} and checks, the quality checks), --dry-run to skip the real render and upload, and --skip-render to skip the render (no real MP4). --series ID runs only that series. --scene DIR renders a scene you wrote. --engine ENGINE_ID picks the render engine for this run. After a run it prints the MP4 path, the transcript path, and the upload result. In a project the MP4 is videos/YYYY-MM-DD TITLE.mp4. Each job ends with a See it: line, a live link to its run page. The tick starts this project’s dashboard in the background when it is not running, so the link works. VFREY_NO_DASHBOARD=1 turns that off (it still uses a dashboard that is already running). If the dashboard cannot start, the line is See it: npx vfrey open RUN_ID instead. When nothing runs, it prints why.
Scenes
|
npx vfrey scene inspect DIR [--at SECONDS] [--selector CSS \| --text "words"] [--script FILE] [--json] | Before a “change just this” edit: which element, CSS rule, and GSAP tween (with file and line) make the thing you name. Every visible element by default. HTML scenes only. |
| npx vfrey scene studio DIR [--port N] [--no-browser] | Opens an HTML scene in the visual editor (timeline, code, live preview) and saves edits back into DIR. Runs on 127.0.0.1 until Ctrl+C. See Scenes. |
An HTML scene needs vfrey-framey or hyperframes. A React scene (index.tsx) needs remotion. A mismatch stops with a Fix: line. Blocks are for HTML scenes only. See Scenes and Scene blocks. npx vfrey scene --help lists init, blocks, add, transitions, inspect, and studio.
After a video
Look
Change the desk
A source kind is
rss, subreddit, youtubeChannel, youtubeTrending, or vfrey-topics (paid). See Local desk and Autopilot.
Background service
See Background worker.
Account
Accounts are not live yet, so
login and whoami say so and change nothing. See Account.
Teams and cloud
These commands need an account and the hosted vfrey service, which is not live yet. See Teams and cloud. Every one takes--api URL (the default is VFREY_API_URL).
See Cloud projects and sync.
Paid features
These commands need an account, a plan, and credits. The hosted vfrey service is not live yet, so they stop with “vfrey accounts are not live yet”. Every one takes--api URL (the default is VFREY_API_URL). See Plans and credits.
Set up and update
Engines
The engine IDs are
remotion (the default), vfrey-framey, hyperframes, and comfyui (not wired yet). The order is --engine, then the series, then the project’s vfrey.json, then the machine default. If the chosen engine cannot run, the job ends blocked with a Fix: line. There is no fallback. The Engine: line of the summary and --json say which engine rendered. See Engines.
tick stops a video on a failed quality check and prints its Fix: line.