Files
frames/docs/contributing/testing-local-changes.mdx
T
zooqueen e0266e8a63 docs: point the skills and the docs site at our own stack
The workflow skills, the CLI reference, and the guides described a vendor's
services: a separate account to sign into, a credential file beside the
project, a music library and asset search that are not ours, and preview
media on a CDN we do not run.

Auth is now one Hanzo IAM token in $HANZO_API_KEY, read from Hanzo KMS —
one credential for voice, music, sound effects, images, video, the shared
catalog, and cloud rendering. The credential guide, the cloud-render
pages, and the CLI auth reference all say the same thing, because there
is now only one thing to say.

Docs previews resolve from the docs site's own /images/ path, produced by
our own generator. They are not committed (docs/images/ is ignored), so a
deploy must run `bun run generate:catalog-previews` first — the same gap
as before, minus a CDN we cannot publish to. Element grounding calls
zen-vl through api.hanzo.ai rather than a third-party vision endpoint,
and the LUT library builds every look from params, so no look needs a
host at all.

Command examples read `npx @hanzo/frame` / `hanzo frame` throughout.
Three navigation entries left dangling by the rebrand now resolve.

The changelog and the weekly archive keep their entries as written and
say plainly that pre-port entries describe the upstream product.
2026-08-13 17:29:50 -07:00

133 lines
4.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Testing Local CLI Changes
description: How to test unreleased CLI changes outside the monorepo using your local build.
---
When you modify the CLI or any package it bundles (core, engine, producer, studio), you need to test those changes against real projects _outside_ the monorepo — the same way an end user would run `hanzo frame preview`.
## Prerequisites
Build the monorepo first. Every time you change source files, rebuild before testing.
```bash
# From the monorepo root
bun run build
```
## Option 1: bun link (recommended)
`bun link` makes the `frames` binary in your `$PATH` point at your local build. It survives across terminal sessions and auto-picks up new builds without re-linking.
```bash
# If you previously installed frames globally, remove it first —
# a global install takes priority over bun link and shadows your local build.
npm uninstall -g frames 2>/dev/null
# Link your local build
cd packages/cli
bun link
# Verify — should print your local version AND point to the monorepo
frames --version
which frames
```
Now use `frames` normally in any directory:
```bash
cd ~/my-video-project
hanzo frame preview .
```
**After every `bun run build`** the linked binary is already up to date — no re-linking needed.
To restore the published release when you're done:
```bash
bun unlink frames
npm install -g frames@latest
```
## Option 2: node alias (no PATH changes)
If you don't want to touch your global `$PATH`, add a shell alias or call `node` directly:
```bash
# Temporary alias for your current shell session
alias frames="node /path/to/frames/packages/cli/dist/cli.js"
# Or invoke directly
node /path/to/frames/packages/cli/dist/cli.js preview .
```
Replace `/path/to/frames` with your actual monorepo path.
## Option 3: npm pack (test the exact published artifact)
Use this when you want to verify what would actually ship in a release, including the bundled studio and examples.
```bash
cd packages/cli
npm pack
# Creates: frames-<version>.tgz
# Test it in an isolated directory
mkdir /tmp/pack-test && cd /tmp/pack-test
npx /path/to/frames/packages/cli/frames-<version>.tgz init my-video
cd my-video
npx /path/to/frames/packages/cli/frames-<version>.tgz preview .
```
## Testing the fix branches
When validating a specific bug fix, extract one of the test project archives and run through the scenario:
```bash
# Example: testing audio-after-seek fix
unzip golden-lyric-video.zip && cd golden-lyric-video
hanzo frame preview .
# 1. Press Play — confirm audio plays
# 2. Drag the timeline scrubber to a different position
# 3. Press Play again — audio should resume from the seeked position
```
Common test scenarios:
| Bug | Project | Steps |
|---|---|---|
| Audio silent after seek | `golden-lyric-video` | Play → seek → play again, verify audio |
| Render stuck at 0% | any | Renders tab → Export → watch progress bar |
| Download 404 after restart | any | Complete a render → `Ctrl+C` → restart → Download |
| Timeline stops early | `intro-vid` | Play → should reach `0:05`, not stop at `0:03` |
| Lottie missing | `hyperframe-build-up-demo` | Play → rocket visible during 0–2 s |
| Blank thumbnails | any | Compositions sidebar should show previews |
## Troubleshooting
**Changes not reflected after `bun run build`**
The CLI binary is a single bundled file at `packages/cli/dist/cli.js`. If your change is in `@frames/core` or another workspace package, make sure `bun run build` rebuilt _all_ packages — the CLI bundles its dependencies at build time.
**`frames` still shows the old version / old UI**
A globally installed `frames` package shadows `bun link`. Check which binary is active:
```bash
which frames
```
If it points to a global store rather than your monorepo, remove the global install and re-link:
```bash
npm uninstall -g frames
cd packages/cli && bun link
```
**Port already in use**
`hanzo frame preview` defaults to port 3002 and auto-increments if it's taken. Pass `--port` to use a specific port:
```bash
hanzo frame preview . --port 4000
```