@spark-apps/quickpeek 1.2.3 → 1.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -13
- package/dist/assets/music/calm-drifting-piano.mp3 +0 -0
- package/dist/assets/music/lofi-roof-tops.mp3 +0 -0
- package/dist/assets/music/manifest.json +32 -0
- package/dist/assets/music/upbeat-spring-on-the-horizon.mp3 +0 -0
- package/dist/highlight.css +8 -7
- package/dist/index.d.mts +607 -43
- package/dist/index.mjs +2333 -397
- package/dist/mcp-tools.mjs +7439 -1839
- package/dist/qp.js +6929 -1709
- package/dist/voices-ufga0oOn.d.mts +647 -0
- package/dist/web.d.mts +5 -3
- package/dist/web.mjs +405 -164
- package/mcp.mjs +94 -21
- package/package.json +16 -3
- package/dist/scraping-C334VxX5.d.mts +0 -335
package/README.md
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
[license-link]: ./LICENSE
|
|
2
2
|
[privacy-link]: ./PRIVACY.md
|
|
3
3
|
[discord-link]: https://discord.gg/mAjHWE3mSp
|
|
4
|
-
[
|
|
5
|
-
[issues-link]: ../../issues
|
|
4
|
+
[coffee-link]: https://buymeacoffee.com/spark88
|
|
6
5
|
|
|
7
6
|
<div align="center">
|
|
8
7
|
|
|
@@ -15,7 +14,8 @@
|
|
|
15
14
|
[](https://www.npmjs.com/package/@spark-apps/quickpeek)
|
|
16
15
|
[][license-link]
|
|
17
16
|
[][discord-link]
|
|
18
|
-
|
|
17
|
+
|
|
18
|
+
[](https://sellular.online/badge/quickpeek/go)
|
|
19
19
|
|
|
20
20
|
</div>
|
|
21
21
|
|
|
@@ -23,18 +23,37 @@
|
|
|
23
23
|
|
|
24
24
|
## Quick Start
|
|
25
25
|
|
|
26
|
+
Nothing to install:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npx @spark-apps/quickpeek https://your-app.com
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Or install it for repeat use:
|
|
33
|
+
|
|
26
34
|
```bash
|
|
27
35
|
npm install -g @spark-apps/quickpeek
|
|
28
36
|
qp localhost:3000
|
|
29
37
|
```
|
|
30
38
|
|
|
31
|
-
**Requirements:** [ffmpeg](https://ffmpeg.org/download.html)
|
|
39
|
+
**Requirements:** [ffmpeg](https://ffmpeg.org/download.html). Nothing else. The AI
|
|
40
|
+
runs through QuickPeek's hosted relay, so there is no API key to get.
|
|
41
|
+
|
|
42
|
+
**Free tier:** 5 videos on an unconfirmed email, then 10 a day once you confirm
|
|
43
|
+
it. No card either way. The CLI asks for an address on the first run because the
|
|
44
|
+
AI planner runs on our servers and is metered per account; over
|
|
45
|
+
[MCP](#mcp-server) no account is needed at all, because your own model does the
|
|
46
|
+
writing. A free video of 20 seconds or under comes out clean; a longer free video
|
|
47
|
+
carries a QuickPeek watermark. The hosted web recorder at quickpeek.co is
|
|
48
|
+
deliberately different: there, free videos are capped at 20 seconds and are
|
|
49
|
+
always watermarked. [docs/plans-and-pricing.md](docs/plans-and-pricing.md) sets
|
|
50
|
+
the two side by side.
|
|
32
51
|
|
|
33
52
|
## Features
|
|
34
53
|
|
|
35
54
|
| Feature | Description |
|
|
36
55
|
|---------|-------------|
|
|
37
|
-
| **AI Planning** |
|
|
56
|
+
| **AI Planning** | AI analyzes your app and generates demo steps |
|
|
38
57
|
| **Script Mode** | Provide your own narration script, AI maps it to UI actions |
|
|
39
58
|
| **Capture Mode** | Record your own interactions → replayable plan.json |
|
|
40
59
|
| **Voice Over** | Free Edge TTS narration in 60+ languages |
|
|
@@ -45,13 +64,13 @@ qp localhost:3000
|
|
|
45
64
|
|
|
46
65
|
## Examples
|
|
47
66
|
|
|
48
|
-
### Basic
|
|
67
|
+
### Basic: AI generates the plan
|
|
49
68
|
|
|
50
69
|
```bash
|
|
51
70
|
qp localhost:3000
|
|
52
71
|
```
|
|
53
72
|
|
|
54
|
-
### Script mode
|
|
73
|
+
### Script mode: you write the narration
|
|
55
74
|
|
|
56
75
|
```bash
|
|
57
76
|
qp localhost:3000 --script narration.txt
|
|
@@ -61,12 +80,12 @@ Script file format (one caption per line, `#` for comments):
|
|
|
61
80
|
|
|
62
81
|
```
|
|
63
82
|
# My app demo
|
|
64
|
-
We start on the dashboard
|
|
83
|
+
We start on the dashboard, your main workspace.
|
|
65
84
|
Let's search for a customer by typing their name.
|
|
66
85
|
Click the result to open their profile.
|
|
67
86
|
```
|
|
68
87
|
|
|
69
|
-
### Capture mode
|
|
88
|
+
### Capture mode: record your own interactions
|
|
70
89
|
|
|
71
90
|
```bash
|
|
72
91
|
qp capture localhost:3000
|
|
@@ -175,6 +194,40 @@ Edit `demo/plan.json` to customize your demo. Each step uses one of these action
|
|
|
175
194
|
|
|
176
195
|
**Target shortcuts:** For buttons and links, use simplified text like `"download"` or `"extract frame"` instead of CSS selectors.
|
|
177
196
|
|
|
197
|
+
## MCP Server
|
|
198
|
+
|
|
199
|
+
QuickPeek ships an MCP server (`quickpeek-mcp`) so an AI agent can record a demo
|
|
200
|
+
directly, with no shelling out to the CLI.
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
claude mcp add quickpeek -- npx -y --package=@spark-apps/quickpeek quickpeek-mcp
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Or add it by hand, for any MCP client:
|
|
207
|
+
|
|
208
|
+
```json
|
|
209
|
+
{
|
|
210
|
+
"mcpServers": {
|
|
211
|
+
"quickpeek": {
|
|
212
|
+
"command": "npx",
|
|
213
|
+
"args": ["-y", "--package=@spark-apps/quickpeek", "quickpeek-mcp"]
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Published on the [official MCP registry](https://registry.modelcontextprotocol.io)
|
|
220
|
+
as `co.quickpeek/quickpeek`.
|
|
221
|
+
|
|
222
|
+
**9 tools:** `generate_demo`, `generate_demo_from_script`, `list_demos`,
|
|
223
|
+
`get_demo_config`, `list_voices`, `open_in_editor`, `check_account`, and the
|
|
224
|
+
`start_auth` / `finish_auth` pair for recording an app you have to log into.
|
|
225
|
+
|
|
226
|
+
The server never calls an AI itself. It hands the planning and narration prompts
|
|
227
|
+
back to you, the calling model, and takes your answer as a parameter, so a demo
|
|
228
|
+
costs you no QuickPeek quota and no second-rate model. That is also why this path
|
|
229
|
+
needs no account at all for the first 5 videos, where the CLI asks for an email.
|
|
230
|
+
|
|
178
231
|
## Output
|
|
179
232
|
|
|
180
233
|
| File | Description |
|
|
@@ -188,12 +241,10 @@ Edit `demo/plan.json` to customize your demo. Each step uses one of these action
|
|
|
188
241
|
|
|
189
242
|
## 🌱 Support & Contributions
|
|
190
243
|
|
|
191
|
-
⭐ **Star the repo** & I power up like Mario 🍄
|
|
192
244
|
☕ **Devs run on coffee** - [Buy me one?][coffee-link]
|
|
193
|
-
💖 **Sponsor** [Your support][stars-link] helps maintain and improve the tool<br>
|
|
194
245
|
💰 **Crypto tips welcome** - [Tip in crypto](https://tip.md/muammar-yacoob)
|
|
195
|
-
|
|
196
|
-
|
|
246
|
+
🎬 **See it work** - [Watch a demo](https://www.youtube.com/shorts/HaibrNvJknY)
|
|
247
|
+
🐛 **Found a bug or want a feature?** <img src="https://img.icons8.com/color/20/discord--v2.png" alt="Discord" width="20" height="20" style="vertical-align: middle;"> [Join Discord][discord-link] - the repo is private, so Discord is the way in.
|
|
197
248
|
|
|
198
249
|
<div align="center">
|
|
199
250
|
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Every track here must be CC0 / public domain: QuickPeek redistributes these inside the published package, so any attribution or share-alike condition would propagate to every user of the tool. Record provenance for anything added. Sourced from VidLet's vetted set (assets/music), same artist, same licence.",
|
|
3
|
+
"tracks": [
|
|
4
|
+
{
|
|
5
|
+
"file": "calm-drifting-piano.mp3",
|
|
6
|
+
"title": "Drifting Piano",
|
|
7
|
+
"artist": "HoliznaCC0",
|
|
8
|
+
"license": "CC0 1.0 Universal",
|
|
9
|
+
"source": "https://freemusicarchive.org/music/holiznacc0/background-music",
|
|
10
|
+
"mood": "calm",
|
|
11
|
+
"duration": 110.473
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"file": "upbeat-spring-on-the-horizon.mp3",
|
|
15
|
+
"title": "Spring On The Horizon",
|
|
16
|
+
"artist": "HoliznaCC0",
|
|
17
|
+
"license": "CC0 1.0 Universal",
|
|
18
|
+
"source": "https://freemusicarchive.org/music/holiznacc0/background-music",
|
|
19
|
+
"mood": "corporate",
|
|
20
|
+
"duration": 91.777
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"file": "lofi-roof-tops.mp3",
|
|
24
|
+
"title": "Roof Tops",
|
|
25
|
+
"artist": "HoliznaCC0",
|
|
26
|
+
"license": "CC0 1.0 Universal",
|
|
27
|
+
"source": "https://freemusicarchive.org/music/holiznacc0/summer-air-lo-fi",
|
|
28
|
+
"mood": "lofi",
|
|
29
|
+
"duration": 214.441
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
Binary file
|
package/dist/highlight.css
CHANGED
|
@@ -6,10 +6,11 @@
|
|
|
6
6
|
pointer-events: none;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
/*
|
|
10
|
+
* The ring itself is drawn as a body-level element by applyHighlight, sized
|
|
11
|
+
* to the target's card rather than to the words inside it. Styling the target
|
|
12
|
+
* element directly is deliberately NOT done any more: an ancestor with
|
|
13
|
+
* overflow:hidden clipped it away on exactly the card lists it was meant for,
|
|
14
|
+
* and where it did survive it drew a second ring on top of the floating one,
|
|
15
|
+
* which is what made the highlight look thick and cramped.
|
|
16
|
+
*/
|