1
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# FAQ & Troubleshooting
2
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Frequently Asked Questions
4
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
5
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Do I need an API key?
6
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
7
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
You need at least one of:
8
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
9
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Cloud API key**: `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, or `GEMINI_API_KEY`
10
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Local Ollama**: Install [Ollama](https://ollama.com), pull a model, and run `ollama serve`
11
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
12
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Some features work without any AI provider:
13
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
14
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `planopticon query stats` — direct knowledge graph queries
15
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `planopticon query "entities --type person"` — structured entity lookups
16
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `planopticon export markdown` — document generation from existing KG (7 document types, no LLM)
17
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `planopticon kg inspect` — knowledge graph statistics
18
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `planopticon kg convert` — format conversion
19
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
20
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### How much does it cost?
21
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
22
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
PlanOpticon defaults to cheap models to minimize costs:
23
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
24
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Task | Default model | Approximate cost |
25
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|------|--------------|-----------------|
26
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Chat/analysis | Claude Haiku / GPT-4o-mini | ~$0.25-0.50 per 1M tokens |
27
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Vision (diagrams) | Gemini Flash / GPT-4o-mini | ~$0.10-0.50 per 1M tokens |
28
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Transcription | Local Whisper (free) / Whisper-1 | $0.006/minute |
29
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
30
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
A typical 1-hour meeting costs roughly $0.05-0.15 to process with default models. Use `--provider ollama` for zero cost.
31
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
32
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Can I run fully offline?
33
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
34
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Yes. Install Ollama and local Whisper:
35
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
36
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
37
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ollama pull llama3.2
38
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ollama pull llava
39
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
pip install planopticon[gpu]
40
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon analyze -i video.mp4 -o ./output --provider ollama
41
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
42
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
43
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
No data leaves your machine.
44
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
45
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### What video formats are supported?
46
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
47
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Any format FFmpeg can decode:
48
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
49
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- MP4, MKV, AVI, MOV, WebM, FLV, WMV, M4V
50
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Container formats with common codecs (H.264, H.265, VP8, VP9, AV1)
51
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
52
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### What document formats can I ingest?
53
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
54
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **PDF** — text extraction via pymupdf or pdfplumber
55
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Markdown** — parsed with heading-based chunking
56
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Plain text** — paragraph-based chunking with overlap
57
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
58
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### How does the knowledge graph work?
59
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
60
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
PlanOpticon extracts entities (people, technologies, concepts, decisions) and relationships from your content. These are stored in a SQLite database (`knowledge_graph.db`) with zero external dependencies. Entities are automatically classified using a planning taxonomy (goals, requirements, risks, tasks, milestones).
61
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
62
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
When you process multiple sources, entities are merged using fuzzy name matching (0.85 threshold) with type conflict resolution and provenance tracking.
63
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
64
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Can I use PlanOpticon with my existing Obsidian vault?
65
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
66
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Yes, in both directions:
67
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
68
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
69
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Ingest an Obsidian vault into PlanOpticon
70
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon ingest ~/Obsidian/MyVault --output ./kb --recursive
71
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
72
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Export PlanOpticon knowledge to an Obsidian vault
73
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export obsidian --input ./kb --output ~/Obsidian/PlanOpticon
74
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
75
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
76
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The Obsidian export produces proper YAML frontmatter, wiki-links (`[[Entity Name]]`), and tag pages.
77
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
78
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### How do I add my own AI provider?
79
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
80
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Create a provider module, extend `BaseProvider`, and register it:
81
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
82
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
83
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.providers.base import BaseProvider, ProviderRegistry
84
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
85
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
class MyProvider(BaseProvider):
86
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
provider_name = "myprovider"
87
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
88
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def chat(self, messages, max_tokens=4096, temperature=0.7, model=None):
89
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Your implementation
90
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...
91
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
92
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ProviderRegistry.register(
93
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
name="myprovider",
94
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
provider_class=MyProvider,
95
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
env_var="MY_PROVIDER_API_KEY",
96
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
model_prefixes=["my-"],
97
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
default_models={"chat": "my-model-v1", "vision": "", "audio": ""},
98
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
)
99
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
100
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
101
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
See the [Contributing guide](contributing.md) for details.
102
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
103
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
104
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
105
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Troubleshooting
106
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
107
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Authentication errors
108
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
109
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### "No auth method available for zoom"
110
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
111
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
You need to set credentials before authenticating:
112
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
113
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
114
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
export ZOOM_CLIENT_ID="your-client-id"
115
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
export ZOOM_CLIENT_SECRET="your-client-secret"
116
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon auth zoom
117
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
118
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
119
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The error message tells you which environment variables to set. Each service requires different credentials — see the [Authentication guide](guide/authentication.md).
120
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
121
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### "Token expired" or "401 Unauthorized"
122
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
123
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Your saved token has expired and auto-refresh failed. Re-authenticate:
124
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
125
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
126
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon auth google # or whatever service
127
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
128
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
129
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
To clear a stale token:
130
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
131
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
132
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon auth google --logout
133
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon auth google
134
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
135
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
136
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Tokens are stored in `~/.planopticon/{service}_token.json`.
137
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
138
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### OAuth redirect errors
139
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
140
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If the browser-based OAuth flow fails, check:
141
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
142
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1. Your client ID and secret are correct
143
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2. The redirect URI in your OAuth app matches PlanOpticon's default (`urn:ietf:wg:oauth:2.0:oob`)
144
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3. The OAuth app has the required scopes enabled
145
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
146
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Provider errors
147
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
148
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### "ANTHROPIC_API_KEY not set"
149
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
150
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Set at least one provider's API key:
151
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
152
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
153
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
export OPENAI_API_KEY="sk-..."
154
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# or
155
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
export ANTHROPIC_API_KEY="sk-ant-..."
156
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# or
157
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
export GEMINI_API_KEY="AI..."
158
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
159
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
160
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Or use a `.env` file in your project directory.
161
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
162
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### "Unexpected role system" (Anthropic)
163
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
164
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This was a bug in older versions where system messages were passed in the messages array instead of as a top-level parameter. Update to v0.4.0 or later.
165
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
166
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### "Model not found" or "Invalid model"
167
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
168
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Check available models:
169
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
170
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
171
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon list-models
172
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
173
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
174
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Common model name issues:
175
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Anthropic: use `claude-haiku-4-5-20251001`, not `claude-haiku`
176
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- OpenAI: use `gpt-4o-mini`, not `gpt4o-mini`
177
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
178
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### Rate limiting / 429 errors
179
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
180
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
PlanOpticon doesn't currently implement automatic retry. If you hit rate limits:
181
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
182
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1. Use a different provider: `--provider gemini`
183
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2. Use cheaper/faster models: `--chat-model gpt-4o-mini`
184
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3. Reduce processing depth: `--depth basic`
185
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
4. Use Ollama for zero rate limits: `--provider ollama`
186
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
187
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Processing errors
188
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
189
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### "FFmpeg not found"
190
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
191
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Install FFmpeg:
192
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
193
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
194
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# macOS
195
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
brew install ffmpeg
196
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
197
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Ubuntu/Debian
198
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
sudo apt-get install ffmpeg libsndfile1
199
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
200
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Windows
201
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Download from https://ffmpeg.org/download.html and add to PATH
202
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
203
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
204
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### "Audio extraction failed: no audio track found"
205
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
206
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The video file has no audio track. PlanOpticon will skip transcription and continue with frame analysis only.
207
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
208
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### "Frame extraction memory error"
209
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
210
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
For very long videos, frame extraction can use significant memory. Use the `--max-memory-mb` safety valve:
211
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
212
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
213
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon analyze -i long-video.mp4 -o ./output --max-memory-mb 2048
214
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
215
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
216
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Or reduce the sampling rate:
217
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
218
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
219
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon analyze -i long-video.mp4 -o ./output --sampling-rate 0.25
220
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
221
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
222
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### Batch processing — one video fails
223
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
224
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Individual video failures don't stop the batch. Failed videos are logged in the batch manifest with error details. Check `batch_manifest.json` for the specific error.
225
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
226
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Knowledge graph issues
227
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
228
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### "No knowledge graph loaded" in companion
229
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
230
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The companion auto-discovers knowledge graphs by looking for `knowledge_graph.db` or `knowledge_graph.json` in the current directory and parent directories. Either:
231
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
232
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1. `cd` to the directory containing your knowledge graph
233
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2. Specify the path explicitly: `planopticon companion --kb ./path/to/kb`
234
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
235
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### Empty or sparse knowledge graph
236
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
237
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Common causes:
238
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
239
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1. **Too few entities extracted**: Try `--depth comprehensive` for deeper analysis
240
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2. **Short or low-quality transcript**: Check `transcript/transcript.txt` — poor audio produces poor transcription
241
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3. **Wrong provider**: Some models extract entities better than others. Try `--provider openai --chat-model gpt-4o` for higher quality
242
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
243
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### Duplicate entities after merge
244
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
245
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The fuzzy matching threshold is 0.85 (SequenceMatcher ratio). If you're getting duplicates, the names are too different for automatic matching. You can manually inspect and merge:
246
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
247
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
248
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon kg inspect ./knowledge_graph.db
249
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon query "entities --name python"
250
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
251
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
252
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Companion / REPL issues
253
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
254
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### Chat gives generic advice instead of project-specific answers
255
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
256
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The companion needs both a knowledge graph and an LLM provider. Check:
257
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
258
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
259
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon> /status
260
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
261
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
262
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If it says "KG: not loaded" or "Provider: none", fix those first:
263
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
264
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
265
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon> /provider openai
266
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon> /model gpt-4o-mini
267
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
268
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
269
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### Companion is slow
270
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
271
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The companion makes LLM API calls for chat messages. To speed things up:
272
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
273
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1. Use a faster model: `/model gpt-4o-mini` or `/model claude-haiku-4-5-20251001`
274
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2. Use direct queries instead of chat: `/entities`, `/search`, `/neighbors` don't need an LLM
275
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3. Use Ollama locally for lower latency: `/provider ollama`
276
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
277
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Export issues
278
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
279
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### Obsidian export has broken links
280
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
281
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Make sure your Obsidian vault has wiki-links enabled (Settings > Files & Links > Use [[Wikilinks]]). PlanOpticon exports use wiki-link syntax by default.
282
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
283
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### PDF export fails
284
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
285
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
PDF export requires the `pdf` extra:
286
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
287
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
288
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
pip install planopticon[pdf]
289
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
290
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
291
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This installs WeasyPrint, which has system dependencies. On macOS:
292
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
293
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
294
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
brew install pango
295
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
296
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
297
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On Ubuntu:
298
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
299
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
300
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
sudo apt-get install libpango1.0-dev
301
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
302
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!