Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/agents/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ Run these in order. On any non-zero exit, stop and report the failing command an
```bash
ff-cli setup
```
Interactive. An LLM API key is only required for `ff-cli chat` — skip it if the user just wants to play URLs or wallets.
Interactive, and quick — ff-cli needs no LLM API key. Setup just configures the signing key and the user's Art Computer.

4. **Add the user's Art Computer:**
```bash
Expand Down
26 changes: 26 additions & 0 deletions docs/changelog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,31 @@
# Change logs

## June 18 2026

### ff-cli 2.0.0 — Deterministic CLI, no API key

**Chat is gone — your coding agent is the chat now**

ff-cli no longer ships a built-in `chat` command or any LLM integration. Natural language belongs in a coding agent — Claude Code, Codex, Cursor — which drives ff-cli's commands directly through the `ff-control` skill. `ff-cli setup` no longer asks for an Anthropic / OpenAI / Grok / Gemini API key, and none is required to find, build, sign, play, or publish.

This is a breaking change: the `chat` command and the `defaultModel` / `models` config block are removed. Existing `config.json` files keep working — the now-unused keys are simply ignored.

**Interactive web art plays open-ended**

`ff-cli play <url>` for an interactive or generative web page now renders the live page and leaves it running, instead of cutting and restarting it every few seconds. ff-cli previously misclassified unknown URLs as static images and stamped a fixed display duration; HTML and other web pages now play with no forced duration, so a conformant player parks on them indefinitely.

**`play` points you to `find` for marketplace links**

Hand `ff-cli play` a marketplace URL, on-chain coordinates, or a wallet address and it now points you to `ff-cli find <input> --play`, which resolves the artwork through the indexer — rather than trying to cast the web page itself. `play` stays the exact-source command (playlist files, hosted playlists, direct media/web URLs); `find` stays the discovery command.

**Install**

```bash
npm install -g @feralfile/cli
```

---

## Jun 9 2026

### Feral File Mobile App 1.2.0 — Discover tab, easier Art Computer setup, and richer work details
Expand Down
75 changes: 37 additions & 38 deletions docs/ff-cli/index.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# ff-cli: Start Here

ff-cli is a command-line tool that builds DP-1 playlists from NFT and feed data.
ff-cli is a command-line tool that builds DP-1 playlists from NFT and feed data and plays them on an Art Computer.

Use it when you want the shortest path from a prompt to visible playback on an Art Computer.
Use it when you want the shortest path from a URL, wallet, or set of tokens to visible playback on an Art Computer.

- What this is: the primary command workflow for building and sending playlists.
- Why use it: fastest route from prompt to play on the Art Computer.
- What this is: the primary command workflow for building, signing, and playing playlists.
- Why use it: fastest route from a link to play on the Art Computer. No LLM API key required.
- What to do next: run the first success flow below.

## Version note
Expand All @@ -25,25 +25,22 @@ npm i -g @feralfile/cli
# 2) Run guided setup
ff-cli setup

# 3) Build one playlist
ff-cli chat "Get 3 works from reas.eth" -o playlist.json
# 3) Build one playlist from a URL (or wallet, or on-chain coords)
ff-cli find https://www.artblocks.io/collection/ringers-by-dmitri-cherniak -o playlist.json

# 4) Play on your Art Computer
ff-cli play playlist.json
```

You are successful when the playlist builds and plays on your configured Art Computer.

`ff-cli chat` already performs playlist validation during the build flow, so a separate `validate` command is optional for this first run.

**Already have a URL or address?** Skip the LLM setup and use `ff-cli find` instead:
`ff-cli find` validates the playlist as part of the build, so a separate `validate` command is optional for this first run. To build and play in one step, add `--play`:

```bash
ff-cli find https://www.artblocks.io/collection/ringers-by-dmitri-cherniak -o playlist.json
ff-cli play playlist.json
ff-cli find https://objkt.com/tokens/hicetnunc/111068 --play
```

See [Find from a URL or address](#find-from-a-url-or-address) below for the full input list.
**Want natural language?** ff-cli has no built-in chat. Drive it conversationally from a coding agent — Claude Code, Codex, or Cursor — using the `ff-control` skill; the agent translates your request into `ff-cli` commands. See [Agents](../agents/index.md).

## Install options

Expand All @@ -63,7 +60,7 @@ curl -fsSL https://feralfile.com/ff-cli-install | bash

```bash
npx @feralfile/cli setup
npx @feralfile/cli chat
npx @feralfile/cli find https://www.artblocks.io/collection/ringers-by-dmitri-cherniak --play
```

### Manual configuration path (advanced)
Expand All @@ -77,7 +74,6 @@ ff-cli config validate

## Commands by job

- Build playlist from natural language: `ff-cli chat [content]`
- Build playlist from a URL, on-chain coords, or wallet address: `ff-cli find <input>`
- Build playlist from deterministic params: `ff-cli build [params.json]`
- Validate a playlist file or URL: `ff-cli validate <file-or-url>`
Expand All @@ -92,14 +88,6 @@ ff-cli config validate

## Copy-paste examples

### Build from natural language

```bash
ff-cli chat "Get 3 works from reas.eth" -o playlist.json
ff-cli chat "Get 3 works from einstein-rosen.tez" -o playlist.json
ff-cli chat "Get tokens 52932,52457 from Ethereum contract 0xb932a70A57673d89f4acfFBE830E8ed7f75Fb9e0" -o playlist.json
```

### Find from a URL or address

`ff-cli find` takes a marketplace URL, raw on-chain coordinates, or a wallet address and builds a playlist directly. No LLM API key required.
Expand All @@ -119,30 +107,44 @@ ff-cli find 0xf3860788d1597cecf938424baabe976fac87dc26 -o playlist.json
ff-cli find tz1fQTvvcCy5PTt8HcUSQTu64dH9mJjjDudi -o playlist.json
```

Supported sources: Objkt, fxhash (`/gentk/...`, `/iteration/{slug}`, `/project/{slug}`, `/generative/{slug}`), Art Blocks, OpenSea, SuperRare, Feral File, Neort, plus raw `ethereum:` / `tezos:` coords and `0x…` / `tz1.../tz2.../tz3...` addresses.
Supported sources: Objkt, fxhash (`/gentk/...`, `/iteration/{slug}`, `/project/{slug}`, `/generative/{slug}`), Art Blocks, OpenSea, SuperRare, Feral File, Neort, Verse, Raster, plus raw `ethereum:` / `tezos:` coords and `0x…` / `tz1.../tz2.../tz3...` addresses.

Combine with `--play`, `--publish`, or `--output` to skip straight to delivery; see `ff-cli find --help` for the full flag set.

### Build from Feral File feed playlists
### Build from structured params

Legacy reference (archived `feral-file/dp1-feed`): use exhibition titles from:
<https://github.com/feral-file/dp1-feed/tree/main/playlists>

The current open-source feed implementation is [`display-protocol/dp1-feed-v2`](https://github.com/display-protocol/dp1-feed-v2); see its [Quick Start](https://github.com/display-protocol/dp1-feed-v2#quick-start) to run your own.
`ff-cli build` takes a JSON parameters file (or stdin) and builds a playlist deterministically — no network guessing, no LLM.

```bash
ff-cli chat "Get 3 from Unsupervised" -o playlist.json
ff-cli chat "Get 3 from Unsupervised and 2 from reas.eth" -o playlist.json
ff-cli build ./params.json -o playlist.json
```

A minimal `params.json` for specific tokens from a contract:

```json
{
"requirements": [
{
"type": "build_playlist",
"blockchain": "ethereum",
"contractAddress": "0xb932a70A57673d89f4acfFBE830E8ed7f75Fb9e0",
"tokenIds": ["52932", "52457"]
}
]
}
```

Feed playlist requests depend on configured feed servers and network reachability.
### Build from Feral File feed playlists

### Build without AI
Feed playlists are fetched by name via a `fetch_feed` requirement. Pipe params straight to `ff-cli build`:

```bash
ff-cli build ./params.json -o playlist.json
echo '{"requirements":[{"type":"fetch_feed","playlistName":"Unsupervised","quantity":3}]}' \
| ff-cli build -o playlist.json
```

Feed playlist requests depend on configured feed servers and network reachability. The current open-source feed implementation is [`display-protocol/dp1-feed-v2`](https://github.com/display-protocol/dp1-feed-v2); see its [Quick Start](https://github.com/display-protocol/dp1-feed-v2#quick-start) to run your own.

### Play on your configured Art Computer

```bash
Expand All @@ -158,8 +160,7 @@ ff-cli play "https://example.com/video.mp4" --skip-verify

## Common failure points

- `config validate` fails: run `ff-cli config show`, fix model settings, then re-run validation. An LLM API key is optional and only required for `ff-cli chat`.
- `chat` fails with provider/auth errors: confirm provider API key env vars or `config.json` values.
- `config validate` fails: run `ff-cli config show`, fix the reported values, then re-run validation.
- `play` cannot find device: check device host/name in config and make sure the Art Computer is reachable on your network.
- `play` version error: FF1 OS is below minimum supported version for that command; update FF1 OS and retry.
- Signature shape across the ecosystem: ff-cli emits the spec-current `signatures[]`, but some other tools still emit the legacy top-level `signature`. If you integrate with multiple tools, verify both forms validate as expected.
Expand All @@ -168,9 +169,7 @@ ff-cli play "https://example.com/video.mp4" --skip-verify

- Full usage and workflow docs: <https://github.com/feral-file/ff-cli/blob/main/docs/README.md>
- Configuration reference: <https://github.com/feral-file/ff-cli/blob/main/docs/CONFIGURATION.md>
- Function-calling details: <https://github.com/feral-file/ff-cli/blob/main/docs/FUNCTION_CALLING.md>
- More examples: <https://github.com/feral-file/ff-cli/blob/main/docs/EXAMPLES.md>
- OpenClaw skill prompt: <https://github.com/feral-file/ff-cli/blob/main/skills/ff-control/SKILL.md>
- Agent skill prompt (`ff-control`): <https://github.com/feral-file/ff-cli/blob/main/skills/ff-control/SKILL.md>
- DP-1 protocol spec: <https://github.com/display-protocol/dp1/blob/main/core/v1.1.0/spec.md>
- DP-1 CLI (**public beta**; validate, sign, verify, publish): <https://github.com/display-protocol/dp1-cli> — **dp1-cli** is the **actively maintained** successor to the legacy **dp1-validator** tag line in that **same repository** (legacy tags are frozen).

Loading