markupr 2.5.0 → 2.6.1
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 +136 -652
- package/dist/cli/index.mjs +402 -31
- package/dist/main/index.mjs +24 -13
- package/dist/mcp/index.mjs +211 -2
- package/package.json +28 -18
- package/scripts/postinstall.mjs +50 -0
package/README.md
CHANGED
|
@@ -1,439 +1,110 @@
|
|
|
1
|
-
> **This project has moved.** FeedbackFlow has been rebranded and evolved into **[markupr](https://github.com/eddiesanjuan/markupr)** -- with cross-platform support, a CLI, an MCP server for AI coding agents, and an intelligent post-processing pipeline. All future development happens at [github.com/eddiesanjuan/markupr](https://github.com/eddiesanjuan/markupr).
|
|
2
|
-
>
|
|
3
|
-
> **Install:** `npm install -g markupr` | **Download:** [markupr.com](https://markupr.com) | **Releases:** [github.com/eddiesanjuan/markupr/releases](https://github.com/eddiesanjuan/markupr/releases)
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
1
|
<p align="center">
|
|
8
|
-
<img src="src/renderer/assets/logo.svg" alt="markupr
|
|
2
|
+
<img src="src/renderer/assets/logo.svg" alt="markupr" width="80" height="80">
|
|
9
3
|
</p>
|
|
10
4
|
|
|
11
5
|
<h1 align="center">markupr</h1>
|
|
12
6
|
|
|
13
7
|
<p align="center">
|
|
14
|
-
<strong>
|
|
8
|
+
<strong>Record your screen. Say what's wrong. Your AI agent fixes it.</strong>
|
|
15
9
|
</p>
|
|
16
10
|
|
|
17
11
|
<p align="center">
|
|
18
|
-
<a href="https://github.com/eddiesanjuan/markupr/actions/workflows/ci.yml"><img src="https://github.com/eddiesanjuan/markupr/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
19
|
-
<a href="https://github.com/eddiesanjuan/markupr/actions/workflows/release.yml"><img src="https://github.com/eddiesanjuan/markupr/actions/workflows/release.yml/badge.svg" alt="Release"></a>
|
|
20
|
-
<a href="https://github.com/eddiesanjuan/markupr/releases"><img src="https://img.shields.io/github/v/release/eddiesanjuan/markupr?style=flat-square" alt="Latest Release"></a>
|
|
21
|
-
<a href="https://github.com/eddiesanjuan/markupr/releases"><img src="https://img.shields.io/github/downloads/eddiesanjuan/markupr/total?style=flat-square" alt="Downloads"></a>
|
|
22
12
|
<a href="https://www.npmjs.com/package/markupr"><img src="https://img.shields.io/npm/v/markupr?style=flat-square" alt="npm version"></a>
|
|
13
|
+
<a href="https://www.npmjs.com/package/markupr"><img src="https://img.shields.io/npm/dm/markupr?style=flat-square" alt="npm downloads"></a>
|
|
14
|
+
<a href="https://github.com/eddiesanjuan/markupr/actions/workflows/ci.yml"><img src="https://github.com/eddiesanjuan/markupr/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
23
15
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square" alt="License"></a>
|
|
24
|
-
<a href="https://
|
|
16
|
+
<a href="https://github.com/eddiesanjuan/markupr/stargazers"><img src="https://img.shields.io/github/stars/eddiesanjuan/markupr?style=flat-square" alt="GitHub stars"></a>
|
|
25
17
|
</p>
|
|
26
18
|
|
|
27
19
|
<p align="center">
|
|
28
|
-
<a href="#quick-start">Quick Start</a>
|
|
29
|
-
<a href="#why-markupr">Why markupr
|
|
30
|
-
<a href="#
|
|
31
|
-
<a href="#
|
|
32
|
-
<a href="#
|
|
33
|
-
<a href="#
|
|
34
|
-
<a href="#cli-usage">CLI Usage</a> |
|
|
35
|
-
<a href="#mcp-server-for-ai-coding-agents">MCP Server</a> |
|
|
36
|
-
<a href="#usage">Usage</a> |
|
|
37
|
-
<a href="#keyboard-shortcuts">Shortcuts</a> |
|
|
38
|
-
<a href="#export-formats">Export</a> |
|
|
39
|
-
<a href="#development">Development</a> |
|
|
40
|
-
<a href="#contributing">Contributing</a> |
|
|
41
|
-
<a href="CHANGELOG.md">Changelog</a>
|
|
20
|
+
<a href="#quick-start">Quick Start</a> ·
|
|
21
|
+
<a href="#why-markupr">Why markupr</a> ·
|
|
22
|
+
<a href="#mcp-server">MCP Server</a> ·
|
|
23
|
+
<a href="#cli">CLI</a> ·
|
|
24
|
+
<a href="#integrations">Integrations</a> ·
|
|
25
|
+
<a href="#contributing">Contributing</a>
|
|
42
26
|
</p>
|
|
43
27
|
|
|
44
28
|
---
|
|
45
29
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
One hotkey to start. One hotkey to stop. A Markdown file with your words, contextually-placed screenshots, and intelligent structure -- ready to hand to your AI coding agent, paste into a GitHub issue, or drop in a Slack thread.
|
|
49
|
-
|
|
50
|
-
## Quick Start
|
|
30
|
+
<!-- hero-screenshot: Replace with an actual screenshot or GIF of markupr in action -->
|
|
51
31
|
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
npx markupr analyze ./recording.mov
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
Or install globally:
|
|
58
|
-
```bash
|
|
59
|
-
npm install -g markupr
|
|
60
|
-
# or
|
|
61
|
-
bun install -g markupr
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### Desktop App
|
|
65
|
-
Download from [markupr.com](https://markupr.com) or the [releases page](https://github.com/eddiesanjuan/markupr/releases) -- available for macOS, Windows, and Linux.
|
|
66
|
-
|
|
67
|
-
**First-time setup:**
|
|
68
|
-
1. Install the application (DMG for macOS, installer for Windows)
|
|
69
|
-
2. Grant required permissions (Microphone, Screen Recording)
|
|
70
|
-
3. Press `Cmd+Shift+F` (macOS) or `Ctrl+Shift+F` (Windows) to start recording
|
|
71
|
-
4. Narrate your feedback while markupr captures screenshots at pause points
|
|
72
|
-
5. Press the hotkey again to stop -- post-processing runs automatically
|
|
73
|
-
6. Paste the file path from your clipboard into your AI coding agent
|
|
74
|
-
|
|
75
|
-
**No API key required!** markupr uses local Whisper transcription by default.
|
|
76
|
-
|
|
77
|
-
If markupr saves you hours, consider [supporting development on Ko-fi](https://ko-fi.com/eddiesanjuan).
|
|
78
|
-
|
|
79
|
-
## See It In Action
|
|
80
|
-
|
|
81
|
-
<!-- TODO: Replace with actual demo recording -->
|
|
82
|
-
> **Demo video coming soon** -- Record your screen, talk through what you see, get structured Markdown with screenshots your AI coding agent can act on. One hotkey in, one hotkey out.
|
|
83
|
-
|
|
84
|
-
## Why markupr?
|
|
85
|
-
|
|
86
|
-
AI coding agents are transforming development, but they're only as good as the context you give them. Typing out bug reports with manual screenshots is slow and lossy -- you lose the flow of what you saw and the nuance of what you meant.
|
|
87
|
-
|
|
88
|
-
markupr bridges this gap. Record your screen, narrate what you see, and markupr produces a structured Markdown document that AI agents can consume directly. The output isn't a raw transcript with random screenshots -- it's an intelligently structured document where every screenshot is placed at the exact moment you were describing it, every issue is categorized, and the format is optimized for LLM consumption.
|
|
89
|
-
|
|
90
|
-
**The workflow:**
|
|
91
|
-
1. You see a bug. Press `Cmd+Shift+F`.
|
|
92
|
-
2. Talk through what you see: "This button is hidden on mobile, and the spacing is off here..."
|
|
93
|
-
3. Press the hotkey again to stop.
|
|
94
|
-
4. Paste the file path into Claude Code, Cursor, or any AI agent.
|
|
95
|
-
5. The agent reads your structured feedback -- with screenshots -- and fixes the issues.
|
|
96
|
-
|
|
97
|
-
**What makes it different:**
|
|
98
|
-
- **Timestamp-correlated frames** -- screenshots are extracted from the exact video frame matching your narration, not taken at arbitrary intervals
|
|
99
|
-
- **Local-first** -- Whisper runs on your machine, your data stays on your machine
|
|
100
|
-
- **AI-native output** -- Markdown structured for LLM consumption, not human-only reading
|
|
101
|
-
- **Zero-friction capture** -- one global hotkey from any app, no context switching
|
|
102
|
-
|
|
103
|
-
## Features
|
|
104
|
-
|
|
105
|
-
### Voice-Driven Capture
|
|
106
|
-
- **Local Whisper transcription** runs entirely on your machine -- no API key, no internet required
|
|
107
|
-
- **Optional OpenAI cloud transcription** for higher accuracy (BYOK)
|
|
108
|
-
- **Intelligent screenshot timing** captures automatically during voice pauses
|
|
109
|
-
- **Audio waveform visualization** for real-time feedback
|
|
110
|
-
|
|
111
|
-
### Intelligent Post-Processing Pipeline
|
|
112
|
-
- **Timestamp-correlated frame extraction** -- every screenshot corresponds to what you were describing
|
|
113
|
-
- **Key-moment detection** analyzes your transcript to find the most important moments
|
|
114
|
-
- **Video frame extraction** via ffmpeg pulls precise frames from the screen recording
|
|
115
|
-
- **Structured Markdown output** optimized for LLM consumption (llms.txt inspired)
|
|
116
|
-
|
|
117
|
-
### Smart Screenshots
|
|
118
|
-
- **Voice Activity Detection (VAD)** triggers captures at natural pause points
|
|
119
|
-
- **Manual screenshot hotkey** (`Cmd+Shift+S`) for precise control
|
|
120
|
-
- **Multi-monitor support** with display selection
|
|
121
|
-
- **Window-specific capture** for focused feedback
|
|
122
|
-
|
|
123
|
-
### AI-Ready Output
|
|
124
|
-
- **Markdown format** with contextually-placed screenshots and structured feedback items
|
|
125
|
-
- **Multiple export formats**: Markdown, PDF, HTML, JSON
|
|
126
|
-
- **Clipboard bridge** -- file path is copied to clipboard so AI tools can read the full document
|
|
127
|
-
|
|
128
|
-
### Bulletproof Reliability
|
|
129
|
-
- **7-state finite state machine** with watchdog timer -- no state the app can enter and not exit
|
|
130
|
-
- **Crash recovery** with 5-second auto-save -- never lose a feedback session
|
|
131
|
-
- **Graceful degradation** -- if transcription fails, frame extraction continues; if ffmpeg is missing, transcript-only output is generated
|
|
132
|
-
- **Auto-updater** for seamless updates
|
|
133
|
-
|
|
134
|
-
### Professional Experience
|
|
135
|
-
- **Native macOS menu bar** integration (no dock icon)
|
|
136
|
-
- **Windows system tray** support
|
|
137
|
-
- **Global hotkeys** that work from any application
|
|
138
|
-
- **Annotation tools** (arrow, circle, rectangle, freehand, text)
|
|
139
|
-
- **Session history browser** with search and export
|
|
140
|
-
- **Dark/light/system theme** support
|
|
141
|
-
- **Onboarding experience** for first-run setup
|
|
142
|
-
|
|
143
|
-
## How It Works
|
|
32
|
+
## The Problem
|
|
144
33
|
|
|
145
|
-
|
|
34
|
+
AI coding agents can't see your screen. When you find a bug, you context-switch into writing mode -- describing the layout issue in text, manually screenshotting, cropping, and dragging images into the right spot. You speak at 150 words per minute but type at 60. The context is lost in translation.
|
|
146
35
|
|
|
147
|
-
|
|
36
|
+
## The Solution
|
|
148
37
|
|
|
149
|
-
|
|
150
|
-
2. **Analyze** -- The transcript is analyzed to identify key moments, topic changes, and important observations
|
|
151
|
-
3. **Extract** -- Video frames are extracted at the exact timestamps corresponding to each key moment
|
|
152
|
-
4. **Generate** -- Everything is stitched into a structured Markdown document with screenshots placed exactly where they belong
|
|
38
|
+
markupr records your screen while you narrate what's wrong. When you stop, it runs an intelligent pipeline that correlates your transcript timestamps with the video to extract the right frames at the right moments -- then stitches everything into structured Markdown your AI agent can act on immediately.
|
|
153
39
|
|
|
154
|
-
|
|
40
|
+
- **Record** -- press a hotkey, talk through what you see
|
|
41
|
+
- **Process** -- Whisper transcribes, ffmpeg extracts frames at the exact moments you described
|
|
42
|
+
- **Output** -- structured Markdown with screenshots placed exactly where they belong
|
|
155
43
|
|
|
156
|
-
### The Clipboard Bridge
|
|
157
|
-
|
|
158
|
-
When a session completes, the **file path** to your Markdown document is copied to clipboard. Not the content -- the path. This is deliberate:
|
|
159
|
-
|
|
160
|
-
- If your clipboard gets overwritten, the file lives on disk permanently
|
|
161
|
-
- AI tools like Claude Code can read the file path and process the full document including screenshots
|
|
162
|
-
- The file is yours -- local, private, no cloud dependency
|
|
163
|
-
|
|
164
|
-
### Session State Machine
|
|
165
|
-
|
|
166
|
-
The recording session is governed by a 7-state FSM with timeouts:
|
|
167
|
-
|
|
168
|
-
```
|
|
169
|
-
idle ─→ starting (5s timeout) ─→ recording (30min max) ─→ stopping (3s timeout)
|
|
170
|
-
│
|
|
171
|
-
▼
|
|
172
|
-
processing (10s timeout) ─→ complete (30s auto-idle)
|
|
173
|
-
│
|
|
174
|
-
▼
|
|
175
|
-
error (5s auto-recover)
|
|
176
44
|
```
|
|
177
|
-
|
|
178
|
-
Every state has a maximum duration. A watchdog timer monitors state age and forces recovery if anything gets stuck.
|
|
179
|
-
|
|
180
|
-
## Example Output
|
|
181
|
-
|
|
182
|
-
See what markupr produces:
|
|
183
|
-
|
|
184
|
-
- [Desktop app feedback session](examples/feedback-session-example.md) -- a developer reviewing a dashboard, finding mobile and UX issues
|
|
185
|
-
- [MCP server capture session](examples/mcp-session-example.md) -- an AI coding agent recording a CSS bug via `capture_with_voice`
|
|
186
|
-
- [CLI analysis output](examples/cli-output-example.md) -- `npx markupr analyze` processing a security code review
|
|
187
|
-
|
|
188
|
-
## Installation
|
|
189
|
-
|
|
190
|
-
### macOS
|
|
191
|
-
|
|
192
|
-
Download the `.dmg` file from the [releases page](https://github.com/eddiesanjuan/markupr/releases).
|
|
193
|
-
|
|
194
|
-
1. Open the DMG file
|
|
195
|
-
2. Drag markupr to your Applications folder
|
|
196
|
-
3. Launch markupr from Applications
|
|
197
|
-
4. Grant required permissions (Microphone, Screen Recording)
|
|
198
|
-
|
|
199
|
-
### Windows
|
|
200
|
-
|
|
201
|
-
Download the `.exe` installer from the [releases page](https://github.com/eddiesanjuan/markupr/releases).
|
|
202
|
-
|
|
203
|
-
1. Run the installer
|
|
204
|
-
2. Follow the installation wizard
|
|
205
|
-
3. Launch markupr from the Start menu
|
|
206
|
-
|
|
207
|
-
### Linux
|
|
208
|
-
|
|
209
|
-
Download the `.AppImage` or `.deb` file from the [releases page](https://github.com/eddiesanjuan/markupr/releases).
|
|
210
|
-
|
|
211
|
-
```bash
|
|
212
|
-
# AppImage
|
|
213
|
-
chmod +x markupr-*.AppImage
|
|
214
|
-
./markupr-*.AppImage
|
|
215
|
-
|
|
216
|
-
# Debian/Ubuntu
|
|
217
|
-
sudo dpkg -i markupr_*.deb
|
|
45
|
+
Cmd+Shift+F --> talk --> Cmd+Shift+F --> Cmd+V into your agent
|
|
218
46
|
```
|
|
219
47
|
|
|
220
|
-
##
|
|
221
|
-
|
|
222
|
-
### Transcription
|
|
223
|
-
|
|
224
|
-
markupr works out of the box with **local Whisper** transcription -- no API key needed. On first run, you'll be prompted to download a Whisper model (~75MB for tiny, ~500MB for base).
|
|
225
|
-
|
|
226
|
-
For cloud post-session transcription with higher accuracy, add your OpenAI API key:
|
|
227
|
-
|
|
228
|
-
1. Sign up at [platform.openai.com/api-keys](https://platform.openai.com/api-keys)
|
|
229
|
-
2. Create an API key with "Usage" permissions
|
|
230
|
-
3. Open Settings > Advanced > Transcription Service
|
|
231
|
-
4. Enter your OpenAI API key
|
|
232
|
-
|
|
233
|
-
OpenAI usage is billed to your own API account.
|
|
234
|
-
|
|
235
|
-
### AI-Enhanced Analysis (Optional)
|
|
236
|
-
|
|
237
|
-
Add your Anthropic API key for Claude-powered document analysis:
|
|
238
|
-
|
|
239
|
-
1. Get an API key at [console.anthropic.com](https://console.anthropic.com/)
|
|
240
|
-
2. Open Settings > Advanced > AI Analysis
|
|
241
|
-
3. Enter your Anthropic API key
|
|
242
|
-
|
|
243
|
-
Claude analyzes your transcript alongside screenshots to produce an intelligent document -- grouping related feedback, identifying patterns, and writing actionable summaries.
|
|
244
|
-
|
|
245
|
-
### Settings Overview
|
|
246
|
-
|
|
247
|
-
| Category | Setting | Description |
|
|
248
|
-
|----------|---------|-------------|
|
|
249
|
-
| **General** | Output Directory | Where sessions are saved |
|
|
250
|
-
| | Launch at Login | Start markupr on system boot |
|
|
251
|
-
| **Recording** | Countdown | 0, 3, or 5 second countdown before recording |
|
|
252
|
-
| | Transcription Preview | Show live transcription overlay |
|
|
253
|
-
| | Audio Waveform | Visual audio level feedback |
|
|
254
|
-
| **Capture** | Pause Threshold | Voice pause duration before screenshot (500-3000ms) |
|
|
255
|
-
| | Min Time Between | Minimum gap between screenshots |
|
|
256
|
-
| **Appearance** | Theme | Dark, Light, or System |
|
|
257
|
-
| | Accent Color | Customize UI accent color |
|
|
258
|
-
| **Hotkeys** | Toggle Recording | Default: `Cmd/Ctrl+Shift+F` |
|
|
259
|
-
| | Manual Screenshot | Default: `Cmd/Ctrl+Shift+S` |
|
|
260
|
-
|
|
261
|
-
## CLI Usage
|
|
262
|
-
|
|
263
|
-
markupr can run as a standalone CLI tool -- no Electron or desktop app required. This is ideal for:
|
|
264
|
-
- CI/CD pipelines processing screen recordings
|
|
265
|
-
- AI coding agents that need to analyze recordings programmatically
|
|
266
|
-
- Developers who prefer the command line
|
|
48
|
+
## Quick Start
|
|
267
49
|
|
|
268
|
-
###
|
|
50
|
+
### CLI (zero install)
|
|
269
51
|
|
|
270
52
|
```bash
|
|
271
|
-
# Run without installing
|
|
272
53
|
npx markupr analyze ./recording.mov
|
|
273
|
-
|
|
274
|
-
# Install globally via npm
|
|
275
|
-
npm install -g markupr
|
|
276
|
-
|
|
277
|
-
# Install globally via bun
|
|
278
|
-
bun install -g markupr
|
|
279
54
|
```
|
|
280
55
|
|
|
281
|
-
###
|
|
282
|
-
|
|
283
|
-
#### `markupr analyze <video-file>`
|
|
284
|
-
|
|
285
|
-
Process a screen recording into a structured Markdown document with extracted frames and transcript.
|
|
286
|
-
|
|
287
|
-
**Options:**
|
|
288
|
-
| Flag | Description | Default |
|
|
289
|
-
|------|-------------|---------|
|
|
290
|
-
| `--audio <file>` | Separate audio file (if not embedded in video) | Auto-extracted from video |
|
|
291
|
-
| `--output <dir>` | Output directory | `./markupr-output` |
|
|
292
|
-
| `--whisper-model <path>` | Path to local Whisper model file | Auto-detected in `~/.markupr/whisper-models/` |
|
|
293
|
-
| `--no-frames` | Skip frame extraction | `false` |
|
|
294
|
-
| `--template <name>` | Output template (`markdown`, `json`, `github-issue`, `linear`, `jira`, `html`) | `markdown` |
|
|
295
|
-
| `--verbose` | Show detailed progress output | `false` |
|
|
296
|
-
|
|
297
|
-
**Examples:**
|
|
56
|
+
### MCP Server (for AI coding agents)
|
|
298
57
|
|
|
299
58
|
```bash
|
|
300
|
-
|
|
301
|
-
markupr analyze ./bug-demo.mov
|
|
302
|
-
|
|
303
|
-
# Use a specific output directory
|
|
304
|
-
markupr analyze ./recording.mov --output ./reports
|
|
305
|
-
|
|
306
|
-
# Separate audio and video files
|
|
307
|
-
markupr analyze ./screen.mov --audio ./voiceover.wav
|
|
308
|
-
|
|
309
|
-
# Skip frame extraction (transcript only)
|
|
310
|
-
markupr analyze ./recording.mov --no-frames
|
|
59
|
+
npx markupr-mcp
|
|
311
60
|
```
|
|
312
61
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
Watch a directory for new screen recordings and auto-process them as they appear. Ideal for continuous feedback workflows.
|
|
316
|
-
|
|
317
|
-
```bash
|
|
318
|
-
# Watch the current directory
|
|
319
|
-
markupr watch
|
|
320
|
-
|
|
321
|
-
# Watch a specific directory with custom output
|
|
322
|
-
markupr watch ./recordings --output ./reports
|
|
323
|
-
|
|
324
|
-
# Watch with verbose logging
|
|
325
|
-
markupr watch ~/Desktop --verbose
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
#### `markupr push github <report>`
|
|
329
|
-
|
|
330
|
-
Create GitHub issues from a markupr feedback report. Each feedback item (FB-001, FB-002, etc.) becomes a separate issue with labels and structured markdown.
|
|
331
|
-
|
|
332
|
-
```bash
|
|
333
|
-
# Create issues from a report (uses gh CLI auth or GITHUB_TOKEN)
|
|
334
|
-
markupr push github ./markupr-output/report.md --repo myorg/myapp
|
|
335
|
-
|
|
336
|
-
# Preview what would be created
|
|
337
|
-
markupr push github ./report.md --repo myorg/myapp --dry-run
|
|
338
|
-
|
|
339
|
-
# Push specific items only
|
|
340
|
-
markupr push github ./report.md --repo myorg/myapp --items FB-001 FB-003
|
|
341
|
-
```
|
|
342
|
-
|
|
343
|
-
Authentication resolves in order: `--token` flag, `GITHUB_TOKEN` env var, `gh auth token` CLI.
|
|
344
|
-
|
|
345
|
-
#### `markupr push linear <report>`
|
|
346
|
-
|
|
347
|
-
Create Linear issues from a markupr feedback report.
|
|
348
|
-
|
|
349
|
-
```bash
|
|
350
|
-
# Create issues in a Linear team
|
|
351
|
-
markupr push linear ./report.md --team ENG
|
|
352
|
-
|
|
353
|
-
# Assign to a project with dry run
|
|
354
|
-
markupr push linear ./report.md --team DES --project "Q1 Polish" --dry-run
|
|
355
|
-
```
|
|
356
|
-
|
|
357
|
-
Set `LINEAR_API_KEY` env var or pass `--token`.
|
|
358
|
-
|
|
359
|
-
### Output Templates
|
|
360
|
-
|
|
361
|
-
markupr supports multiple output templates for the `analyze` command:
|
|
62
|
+
### Desktop App
|
|
362
63
|
|
|
363
|
-
|
|
364
|
-
|----------|-------------|
|
|
365
|
-
| `markdown` | Default structured Markdown (llms.txt-inspired) |
|
|
366
|
-
| `json` | Machine-readable JSON for integrations |
|
|
367
|
-
| `github-issue` | GitHub-flavored Markdown optimized for issues |
|
|
368
|
-
| `linear` | Linear-optimized issue format |
|
|
369
|
-
| `jira` | Jira-compatible markup |
|
|
370
|
-
| `html` | Self-contained HTML document |
|
|
64
|
+
Download from [markupr.com](https://markupr.com) or [GitHub Releases](https://github.com/eddiesanjuan/markupr/releases). Available for macOS and Windows.
|
|
371
65
|
|
|
372
|
-
|
|
373
|
-
# Generate JSON output for automation
|
|
374
|
-
markupr analyze ./recording.mov --template json
|
|
66
|
+
No API keys required. Local Whisper transcription works out of the box.
|
|
375
67
|
|
|
376
|
-
|
|
377
|
-
markupr analyze ./recording.mov --template github-issue
|
|
378
|
-
```
|
|
68
|
+
## Why markupr?
|
|
379
69
|
|
|
380
|
-
|
|
70
|
+
**Local-first.** Whisper runs on your device. Your recordings, transcripts, and screenshots never leave your machine. No cloud dependency, no account required.
|
|
381
71
|
|
|
382
|
-
|
|
72
|
+
**AI-native output.** The Markdown output is structured for LLM consumption -- headings, categories, severity levels, and inline screenshots. Not a raw transcript with random images. Every screenshot shows exactly what you were describing when you said it.
|
|
383
73
|
|
|
384
|
-
|
|
385
|
-
- uses: eddiesanjuan/markupr-action@v1
|
|
386
|
-
with:
|
|
387
|
-
video-path: ./test-recording.mov
|
|
388
|
-
output-dir: ./markupr-output
|
|
389
|
-
```
|
|
74
|
+
**Works everywhere.** Desktop app for daily use. CLI for scripts and CI/CD. MCP server for agent integration. GitHub Action for PR feedback. Same pipeline, four interfaces.
|
|
390
75
|
|
|
391
|
-
|
|
76
|
+
**Open source.** MIT licensed. No telemetry, no tracking, no analytics. Read the source, fork it, ship it.
|
|
392
77
|
|
|
393
|
-
|
|
78
|
+
## What the Output Looks Like
|
|
394
79
|
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
- macOS: `brew install ffmpeg`
|
|
398
|
-
- Ubuntu/Debian: `sudo apt install ffmpeg`
|
|
399
|
-
- Windows: `choco install ffmpeg` or download from ffmpeg.org
|
|
80
|
+
```markdown
|
|
81
|
+
# Feedback Session -- Feb 5, 2026
|
|
400
82
|
|
|
401
|
-
|
|
83
|
+
## FB-001: Button sizing issue
|
|
84
|
+
The submit button is way too small on mobile. I'm trying to tap it
|
|
85
|
+
and keep hitting the cancel link underneath. Needs more vertical
|
|
86
|
+
padding, maybe 12px minimum tap target.
|
|
402
87
|
|
|
403
|
-
|
|
88
|
+

|
|
404
89
|
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
90
|
+
## FB-002: Loading state feels janky
|
|
91
|
+
After the spinner disappears, the content pops in with no transition.
|
|
92
|
+
There's a visible layout shift -- the sidebar jumps left by about
|
|
93
|
+
20 pixels.
|
|
408
94
|
|
|
409
|
-
|
|
410
|
-
# Perfect for feeding into Claude, GPT, or any LLM
|
|
411
|
-
cat ./feedback/markupr-report.md
|
|
95
|
+

|
|
412
96
|
```
|
|
413
97
|
|
|
414
|
-
|
|
98
|
+
Each screenshot is extracted from the exact video frame matching your narration timestamp. See full examples in [`examples/`](examples/).
|
|
415
99
|
|
|
416
|
-
## MCP Server
|
|
100
|
+
## MCP Server
|
|
417
101
|
|
|
418
|
-
|
|
102
|
+
Give your AI coding agent eyes and ears. Add markupr as an MCP server and it can capture screenshots, record your screen with voice, and receive structured reports -- all mid-conversation.
|
|
419
103
|
|
|
420
104
|
### Setup
|
|
421
105
|
|
|
422
|
-
Add to your IDE config and your agent gets 6 tools:
|
|
423
|
-
|
|
424
106
|
**Claude Code** (`~/.claude/settings.json`):
|
|
425
|
-
```json
|
|
426
|
-
{
|
|
427
|
-
"mcpServers": {
|
|
428
|
-
"markupr": {
|
|
429
|
-
"command": "npx",
|
|
430
|
-
"args": ["-y", "markupr-mcp"]
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
```
|
|
435
107
|
|
|
436
|
-
**Cursor / Windsurf** (MCP settings):
|
|
437
108
|
```json
|
|
438
109
|
{
|
|
439
110
|
"mcpServers": {
|
|
@@ -445,350 +116,163 @@ Add to your IDE config and your agent gets 6 tools:
|
|
|
445
116
|
}
|
|
446
117
|
```
|
|
447
118
|
|
|
448
|
-
|
|
119
|
+
**Cursor / Windsurf** -- same config in your MCP settings.
|
|
120
|
+
|
|
121
|
+
### Tools
|
|
449
122
|
|
|
450
|
-
| Tool |
|
|
123
|
+
| Tool | Description |
|
|
451
124
|
|------|-------------|
|
|
452
125
|
| `capture_screenshot` | Grab the current screen. Your agent sees what you see. |
|
|
453
|
-
| `capture_with_voice` | Record screen +
|
|
126
|
+
| `capture_with_voice` | Record screen + mic for a set duration. Returns a structured report. |
|
|
454
127
|
| `analyze_video` | Process any `.mov` or `.mp4` into Markdown with extracted frames. |
|
|
455
|
-
| `analyze_screenshot` |
|
|
128
|
+
| `analyze_screenshot` | Run a screenshot through the AI analysis pipeline. |
|
|
456
129
|
| `start_recording` | Begin an interactive recording session. |
|
|
457
|
-
| `stop_recording` | End the session
|
|
458
|
-
|
|
459
|
-
### Example: Agent Captures and Fixes a Bug
|
|
130
|
+
| `stop_recording` | End the session and run the full pipeline. |
|
|
460
131
|
|
|
461
|
-
|
|
132
|
+
### Example
|
|
462
133
|
|
|
463
134
|
```
|
|
464
135
|
You: "The sidebar is overlapping the main content on mobile. Can you see it?"
|
|
465
136
|
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
Let me fix the CSS..."
|
|
137
|
+
Agent: [calls capture_screenshot]
|
|
138
|
+
"I can see the issue -- the sidebar has position: fixed but no z-index,
|
|
139
|
+
and it's 280px wide with no responsive breakpoint. Let me fix the CSS..."
|
|
470
140
|
|
|
471
|
-
|
|
141
|
+
[fixes the code]
|
|
472
142
|
```
|
|
473
143
|
|
|
474
144
|
No copy-pasting screenshots. No describing the bug in text. The agent looks at your screen and acts.
|
|
475
145
|
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
## Usage
|
|
479
|
-
|
|
480
|
-
### Basic Workflow
|
|
481
|
-
|
|
482
|
-
1. **Start Recording**: Press `Cmd+Shift+F` (macOS) or `Ctrl+Shift+F` (Windows)
|
|
483
|
-
2. **Select Source**: Choose which screen or window to capture
|
|
484
|
-
3. **Narrate**: Speak naturally about what you see
|
|
485
|
-
4. **Screenshots**: Captured automatically during pauses (or press `Cmd+Shift+S` manually)
|
|
486
|
-
5. **Stop Recording**: Press the hotkey again
|
|
487
|
-
6. **Post-Processing**: Pipeline automatically transcribes, analyzes, extracts frames, and generates output
|
|
488
|
-
7. **Use Output**: File path is on your clipboard -- paste into your AI tool
|
|
146
|
+
Full MCP documentation: [README-MCP.md](README-MCP.md)
|
|
489
147
|
|
|
490
|
-
|
|
148
|
+
## CLI
|
|
491
149
|
|
|
492
|
-
|
|
493
|
-
- **Pause briefly** when you want a screenshot captured
|
|
494
|
-
- **Use manual capture** (`Cmd+Shift+S`) for precise timing
|
|
495
|
-
- **Review before export** to remove unwanted items
|
|
496
|
-
|
|
497
|
-
### Using with AI Coding Agents
|
|
150
|
+
### Installation
|
|
498
151
|
|
|
499
|
-
|
|
152
|
+
```bash
|
|
153
|
+
# Run without installing
|
|
154
|
+
npx markupr analyze ./recording.mov
|
|
500
155
|
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
156
|
+
# Or install globally
|
|
157
|
+
npm install -g markupr
|
|
158
|
+
```
|
|
504
159
|
|
|
505
|
-
###
|
|
160
|
+
### Commands
|
|
506
161
|
|
|
507
|
-
|
|
162
|
+
**`markupr analyze <video>`** -- Process a screen recording into structured Markdown.
|
|
508
163
|
|
|
509
164
|
```bash
|
|
510
|
-
|
|
165
|
+
markupr analyze ./bug-demo.mov
|
|
166
|
+
markupr analyze ./recording.mov --output ./reports
|
|
167
|
+
markupr analyze ./recording.mov --template github-issue
|
|
168
|
+
markupr analyze ./recording.mov --no-frames # transcript only
|
|
511
169
|
```
|
|
512
170
|
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
### Session Output
|
|
516
|
-
|
|
517
|
-
Sessions are saved to an organized folder:
|
|
171
|
+
**`markupr watch [directory]`** -- Watch for new recordings and auto-process them.
|
|
518
172
|
|
|
173
|
+
```bash
|
|
174
|
+
markupr watch ~/Desktop --output ./reports
|
|
519
175
|
```
|
|
520
|
-
~/markupr/sessions/2026-02-05_14-23-41/
|
|
521
|
-
feedback-report.md # Structured Markdown with inline screenshots
|
|
522
|
-
metadata.json # Session metadata (source, duration, environment)
|
|
523
|
-
screenshots/
|
|
524
|
-
fb-001.png # Extracted frames from key moments
|
|
525
|
-
fb-002.png
|
|
526
|
-
fb-003.png
|
|
527
|
-
session-recording.webm # Full screen recording (optional)
|
|
528
|
-
```
|
|
529
|
-
|
|
530
|
-
## Keyboard Shortcuts
|
|
531
|
-
|
|
532
|
-
### Recording
|
|
533
|
-
|
|
534
|
-
| Action | macOS | Windows/Linux |
|
|
535
|
-
|--------|-------|---------------|
|
|
536
|
-
| Start/Stop Recording | `Cmd+Shift+F` | `Ctrl+Shift+F` |
|
|
537
|
-
| Manual Screenshot | `Cmd+Shift+S` | `Ctrl+Shift+S` |
|
|
538
|
-
| Pause/Resume | `Cmd+Shift+P` | `Ctrl+Shift+P` |
|
|
539
|
-
|
|
540
|
-
### Navigation
|
|
541
|
-
|
|
542
|
-
| Action | macOS | Windows/Linux |
|
|
543
|
-
|--------|-------|---------------|
|
|
544
|
-
| Open Settings | `Cmd+,` | `Ctrl+,` |
|
|
545
|
-
| Session History | `Cmd+H` | `Ctrl+H` |
|
|
546
|
-
| Keyboard Shortcuts | `Cmd+/` | `Ctrl+/` |
|
|
547
|
-
| Close Dialog | `Escape` | `Escape` |
|
|
548
176
|
|
|
549
|
-
|
|
177
|
+
**`markupr push github <report>`** -- Create GitHub issues from a feedback report.
|
|
550
178
|
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
| Move Up | `Cmd+Up` | `Ctrl+Up` |
|
|
556
|
-
| Move Down | `Cmd+Down` | `Ctrl+Down` |
|
|
557
|
-
| Undo | `Cmd+Z` | `Ctrl+Z` |
|
|
558
|
-
| Redo | `Cmd+Shift+Z` | `Ctrl+Shift+Z` |
|
|
559
|
-
| Select All | `Cmd+A` | `Ctrl+A` |
|
|
560
|
-
|
|
561
|
-
### Annotation Tools
|
|
562
|
-
|
|
563
|
-
| Tool | Shortcut |
|
|
564
|
-
|------|----------|
|
|
565
|
-
| Arrow | `1` |
|
|
566
|
-
| Circle | `2` |
|
|
567
|
-
| Rectangle | `3` |
|
|
568
|
-
| Freehand | `4` |
|
|
569
|
-
| Text | `5` |
|
|
570
|
-
| Clear Annotations | `Cmd/Ctrl+Backspace` |
|
|
179
|
+
```bash
|
|
180
|
+
markupr push github ./report.md --repo myorg/myapp
|
|
181
|
+
markupr push github ./report.md --repo myorg/myapp --dry-run
|
|
182
|
+
```
|
|
571
183
|
|
|
572
|
-
|
|
184
|
+
**`markupr push linear <report>`** -- Create Linear issues from a feedback report.
|
|
573
185
|
|
|
574
|
-
|
|
186
|
+
```bash
|
|
187
|
+
markupr push linear ./report.md --team ENG
|
|
188
|
+
```
|
|
575
189
|
|
|
576
|
-
|
|
190
|
+
### Output Templates
|
|
577
191
|
|
|
578
|
-
-
|
|
579
|
-
- Feedback items with categories and severity
|
|
580
|
-
- Inline screenshot references
|
|
581
|
-
- Summary table with session metadata
|
|
192
|
+
`markdown` (default) | `json` | `github-issue` | `linear` | `jira` | `html`
|
|
582
193
|
|
|
583
|
-
|
|
584
|
-
# Feedback Report: My App
|
|
194
|
+
### Requirements
|
|
585
195
|
|
|
586
|
-
|
|
587
|
-
-
|
|
588
|
-
- **Items**: 5 feedback points
|
|
589
|
-
- **Screenshots**: 3 captured
|
|
196
|
+
- Node.js 18+
|
|
197
|
+
- [ffmpeg](https://ffmpeg.org/) on your PATH (`brew install ffmpeg` / `apt install ffmpeg` / `choco install ffmpeg`)
|
|
590
198
|
|
|
591
|
-
##
|
|
199
|
+
## Integrations
|
|
592
200
|
|
|
593
|
-
###
|
|
594
|
-
**Timestamp**: 00:15 | **Type**: Bug
|
|
201
|
+
### GitHub Action
|
|
595
202
|
|
|
596
|
-
|
|
203
|
+
Run markupr in CI to get visual feedback on pull requests:
|
|
597
204
|
|
|
598
|
-
|
|
205
|
+
```yaml
|
|
206
|
+
- uses: eddiesanjuan/markupr-action@v1
|
|
207
|
+
with:
|
|
208
|
+
video-path: ./recordings/
|
|
209
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
599
210
|
```
|
|
600
211
|
|
|
601
|
-
###
|
|
602
|
-
|
|
603
|
-
Professional document with embedded screenshots, print-ready layout, and theme support.
|
|
604
|
-
|
|
605
|
-
### HTML (.html)
|
|
606
|
-
|
|
607
|
-
Self-contained web page with embedded images, dark/light theme toggle, and mobile responsive design.
|
|
212
|
+
### Desktop App Workflow
|
|
608
213
|
|
|
609
|
-
|
|
214
|
+
1. Press `Cmd+Shift+F` (macOS) or `Ctrl+Shift+F` (Windows)
|
|
215
|
+
2. Narrate what you see -- screenshots capture automatically during pauses
|
|
216
|
+
3. Press the hotkey again to stop
|
|
217
|
+
4. Paste the file path from your clipboard into Claude Code, Cursor, or any AI agent
|
|
610
218
|
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
## Architecture
|
|
219
|
+
## How It Works
|
|
614
220
|
|
|
615
221
|
```
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
│ │ ├── App.tsx # Main component
|
|
632
|
-
│ │ ├── components/ # UI components (30+)
|
|
633
|
-
│ │ ├── audio/ # Renderer-side audio bridge
|
|
634
|
-
│ │ ├── capture/ # Renderer-side screen recording
|
|
635
|
-
│ │ └── hooks/ # React hooks (theme, animation)
|
|
636
|
-
│ ├── preload/ # Electron preload (secure IPC bridge)
|
|
637
|
-
│ └── shared/ # Shared types and constants
|
|
638
|
-
├── tests/ # Test suite
|
|
639
|
-
├── docs/ # Documentation
|
|
640
|
-
├── site/ # Landing page
|
|
641
|
-
└── package.json
|
|
222
|
+
+-----------+
|
|
223
|
+
Screen + Voice -> | Whisper | -> Timestamped transcript
|
|
224
|
+
+-----------+
|
|
225
|
+
|
|
|
226
|
+
+-----------+
|
|
227
|
+
| Analyzer | -> Key moments identified
|
|
228
|
+
+-----------+
|
|
229
|
+
|
|
|
230
|
+
+-----------+
|
|
231
|
+
| ffmpeg | -> Frames extracted at exact timestamps
|
|
232
|
+
+-----------+
|
|
233
|
+
|
|
|
234
|
+
+-----------+
|
|
235
|
+
| Generator | -> Structured Markdown with inline screenshots
|
|
236
|
+
+-----------+
|
|
642
237
|
```
|
|
643
238
|
|
|
644
|
-
|
|
239
|
+
The pipeline degrades gracefully. No ffmpeg? Transcript-only output. No Whisper model? Timer-based screenshots. No API keys? Everything runs locally.
|
|
645
240
|
|
|
646
|
-
|
|
241
|
+
For architecture details, see [CLAUDE.md](CLAUDE.md).
|
|
647
242
|
|
|
648
|
-
|
|
649
|
-
- npm 9+
|
|
650
|
-
- macOS, Windows, or Linux
|
|
651
|
-
|
|
652
|
-
### Setup
|
|
243
|
+
## Development
|
|
653
244
|
|
|
654
245
|
```bash
|
|
655
|
-
# Clone the repository
|
|
656
246
|
git clone https://github.com/eddiesanjuan/markupr.git
|
|
657
247
|
cd markupr
|
|
658
|
-
```
|
|
659
|
-
|
|
660
|
-
Use either npm or bun:
|
|
661
|
-
|
|
662
|
-
```bash
|
|
663
|
-
# npm
|
|
664
248
|
npm install
|
|
665
|
-
|
|
666
|
-
# Start development mode
|
|
667
249
|
npm run dev
|
|
668
250
|
```
|
|
669
251
|
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
# Start development mode
|
|
675
|
-
bun run dev
|
|
676
|
-
```
|
|
677
|
-
|
|
678
|
-
### Scripts
|
|
679
|
-
|
|
680
|
-
| Script | Description |
|
|
681
|
-
|--------|-------------|
|
|
682
|
-
| `npm run dev` | Start in development mode with hot reload |
|
|
683
|
-
| `npm run build` | Build for production |
|
|
684
|
-
| `npm run build:desktop` | Build desktop app only |
|
|
685
|
-
| `npm run package` | Package for current platform |
|
|
686
|
-
| `npm run package:mac` | Package for macOS |
|
|
687
|
-
| `npm run package:win` | Package for Windows |
|
|
688
|
-
| `npm run package:linux` | Package for Linux |
|
|
252
|
+
| Command | Description |
|
|
253
|
+
|---------|-------------|
|
|
254
|
+
| `npm run dev` | Development mode with hot reload |
|
|
255
|
+
| `npm run build` | Build everything (desktop + CLI + MCP) |
|
|
689
256
|
| `npm test` | Run all tests |
|
|
690
|
-
| `npm run
|
|
691
|
-
| `npm run
|
|
692
|
-
| `npm run lint` | Lint code |
|
|
693
|
-
| `npm run lint:fix` | Auto-fix lint issues |
|
|
694
|
-
| `npm run typecheck` | TypeScript type checking |
|
|
695
|
-
|
|
696
|
-
You can run the same scripts with bun (`bun run dev`, `bun run test`, etc.).
|
|
697
|
-
|
|
698
|
-
### Running Tests
|
|
699
|
-
|
|
700
|
-
```bash
|
|
701
|
-
# Run all tests
|
|
702
|
-
npm test
|
|
703
|
-
|
|
704
|
-
# Run with coverage
|
|
705
|
-
npm run test:coverage
|
|
706
|
-
|
|
707
|
-
# Run specific test file
|
|
708
|
-
npx vitest tests/unit/postProcessor.test.ts
|
|
709
|
-
```
|
|
257
|
+
| `npm run lint` | Lint |
|
|
258
|
+
| `npm run typecheck` | Type check |
|
|
710
259
|
|
|
711
260
|
## Contributing
|
|
712
261
|
|
|
713
|
-
We welcome contributions! markupr is MIT licensed and community-driven.
|
|
714
|
-
|
|
715
|
-
### Quick Start for Contributors
|
|
716
|
-
|
|
717
262
|
1. Fork the repository
|
|
718
|
-
2. Create a feature branch: `git checkout -b feature/
|
|
719
|
-
3.
|
|
720
|
-
4.
|
|
721
|
-
5. Run lint: `npm run lint`
|
|
722
|
-
6. Commit: `git commit -m 'Add amazing feature'`
|
|
723
|
-
7. Push: `git push origin feature/amazing-feature`
|
|
724
|
-
8. Open a Pull Request
|
|
725
|
-
|
|
726
|
-
### Guidelines
|
|
727
|
-
|
|
728
|
-
- **Tests required** for new functionality
|
|
729
|
-
- **Lint clean** -- run `npm run lint` before submitting
|
|
730
|
-
- **TypeScript strict** -- run `npm run typecheck`
|
|
731
|
-
- **Small PRs preferred** -- focused changes are easier to review
|
|
732
|
-
- **Follow existing patterns** -- check CLAUDE.md for architecture details
|
|
263
|
+
2. Create a feature branch: `git checkout -b feature/your-feature`
|
|
264
|
+
3. Run tests: `npm test && npm run lint && npm run typecheck`
|
|
265
|
+
4. Open a Pull Request
|
|
733
266
|
|
|
734
267
|
See [CONTRIBUTING.md](CONTRIBUTING.md) for full guidelines.
|
|
735
268
|
|
|
736
|
-
## Troubleshooting
|
|
737
|
-
|
|
738
|
-
### Common Issues
|
|
739
|
-
|
|
740
|
-
**Microphone not detected**
|
|
741
|
-
- Check System Preferences > Security & Privacy > Microphone
|
|
742
|
-
- Grant markupr microphone access
|
|
743
|
-
|
|
744
|
-
**Screen recording permission denied**
|
|
745
|
-
- macOS: System Preferences > Security & Privacy > Screen Recording
|
|
746
|
-
- Restart markupr after granting permission
|
|
747
|
-
|
|
748
|
-
**Whisper model download failing**
|
|
749
|
-
- Check your internet connection
|
|
750
|
-
- Try a smaller model first (tiny: ~75MB)
|
|
751
|
-
- Downloads support resume if interrupted
|
|
752
|
-
|
|
753
|
-
**OpenAI API connection failed**
|
|
754
|
-
- Verify your API key is correct
|
|
755
|
-
- Check your internet connection
|
|
756
|
-
- Ensure your OpenAI project has billing enabled
|
|
757
|
-
|
|
758
|
-
**Hotkeys not working**
|
|
759
|
-
- Check for conflicts with other applications
|
|
760
|
-
- Try customizing hotkeys in Settings > Hotkeys
|
|
761
|
-
|
|
762
|
-
**ffmpeg not found for frame extraction**
|
|
763
|
-
- Install ffmpeg: `brew install ffmpeg` (macOS) or download from [ffmpeg.org](https://ffmpeg.org/)
|
|
764
|
-
- markupr gracefully degrades to transcript-only output without ffmpeg
|
|
765
|
-
|
|
766
|
-
See [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) for more solutions.
|
|
767
|
-
|
|
768
|
-
## Support markupr
|
|
769
|
-
|
|
770
|
-
If markupr is useful in your workflow and you want to keep it improving quickly:
|
|
771
|
-
|
|
772
|
-
- [Support on Ko-fi](https://ko-fi.com/eddiesanjuan)
|
|
773
|
-
- Share the project with a teammate who writes bug reports
|
|
774
|
-
- Open issues with reproducible feedback sessions so fixes land faster
|
|
775
|
-
|
|
776
269
|
## License
|
|
777
270
|
|
|
778
|
-
MIT
|
|
779
|
-
|
|
780
|
-
## Acknowledgments
|
|
781
|
-
|
|
782
|
-
- [Whisper](https://github.com/openai/whisper) for local speech recognition
|
|
783
|
-
- [Anthropic Claude](https://anthropic.com) for AI-enhanced document analysis
|
|
784
|
-
- [OpenAI](https://platform.openai.com) for cloud transcription
|
|
785
|
-
- [Electron](https://electronjs.org) for cross-platform desktop framework
|
|
786
|
-
- [React](https://reactjs.org) for the UI framework
|
|
787
|
-
- [Vite](https://vitejs.dev) for blazing fast builds
|
|
271
|
+
MIT -- see [LICENSE](LICENSE).
|
|
788
272
|
|
|
789
273
|
---
|
|
790
274
|
|
|
791
275
|
<p align="center">
|
|
792
|
-
Built by <a href="https://github.com/eddiesanjuan">Eddie San Juan</a
|
|
793
|
-
<a href="https://
|
|
276
|
+
Built by <a href="https://github.com/eddiesanjuan">Eddie San Juan</a><br>
|
|
277
|
+
<a href="https://markupr.com">markupr.com</a>
|
|
794
278
|
</p>
|