PlanOpticon

Add MIT license, PyPI packaging, CI/CD pipelines, and docs site - MIT License, Copyright (c) 2025 CONFLICT LLC - pyproject.toml with full metadata, optional deps [pdf,gpu,cloud,dev,all] - GitHub Actions: CI (test matrix), PyPI publish, binary releases, docs deploy - MkDocs Material docs site for planopticon.dev with CNAME - Docs: installation, quickstart, configuration, CLI reference, architecture, API reference, user guides, contributing guide - Binary release pipeline for macOS (arm64/x86), Linux, Windows via PyInstaller

leo 2026-02-14 22:33 trunk
Commit f0106a3cb04f75ee93a9e33fb1d43b8178f8c3af81eca8ce0627120874094f9c
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,62 @@
1
+name: CI
2
+
3
+on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+jobs:
10
+ test:
11
+ runs-on: ${{ matrix.os }}
12
+ strategy:
13
+ matrix:
14
+ os: [ubuntu-latest, macos-latest]
15
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
16
+ steps:
17
+ 4
18
+
19
+ - name: checkout@v6
20
+
21
+ - name: Set up Python ${{ matrix.python-version }}
22
+ uses: actions/setup-python@v5
23
+pip instwith:
24
+ python-version: ${{ matrix.python-version }}
25
+
26
+ - name: Install system dependencies (Ubuntu)
27
+ if: runner.os == 'Linux'
28
+ run: |
29
+ sudo apt-get update
30
+ sudo apt-get install -y ffmpeg libsndfile1
31
+
32
+ - name: Install system dependencies (macOS)
33
+ if: runner.os == 'macOS'
34
+ run: brew install ffmpeg libsndfile
35
+
36
+ - name: Install Python dependencies
37
+ run: |
38
+ python -m pip install --upgrade pip
39
+ pip install -e ".[dev]"
40
+
41
+ - name: Run tests
42
+ run: pytest tests/ -v --tb=short
43
+
44
+ - name: Check code style
45
+ run: ruff check video_processor/
46
+
47
+ lint:
48
+ runs-on: ubu4- uses: actions/checkout@v6
49
+
50
+ - uses: actions/setup-python@v5
51
+pip instwith:
52
+ python-version: "3.12"
53
+
54
+ - name: Install dependencies
55
+ run: |
56
+ pip install ruff mypy
57
+
58
+ - name: Ruff
59
+ run: ruff check video_processor/
60
+
61
+ - name: Type check
62
+ run: mypy video_processor/ --igno
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,62 @@
1 name: CI
2
3 on:
4 push:
5 branches: [main]
6 pull_request:
7 branches: [main]
8
9 jobs:
10 test:
11 runs-on: ${{ matrix.os }}
12 strategy:
13 matrix:
14 os: [ubuntu-latest, macos-latest]
15 python-version: ["3.10", "3.11", "3.12", "3.13"]
16 steps:
17 4
18
19 - name: checkout@v6
20
21 - name: Set up Python ${{ matrix.python-version }}
22 uses: actions/setup-python@v5
23 pip instwith:
24 python-version: ${{ matrix.python-version }}
25
26 - name: Install system dependencies (Ubuntu)
27 if: runner.os == 'Linux'
28 run: |
29 sudo apt-get update
30 sudo apt-get install -y ffmpeg libsndfile1
31
32 - name: Install system dependencies (macOS)
33 if: runner.os == 'macOS'
34 run: brew install ffmpeg libsndfile
35
36 - name: Install Python dependencies
37 run: |
38 python -m pip install --upgrade pip
39 pip install -e ".[dev]"
40
41 - name: Run tests
42 run: pytest tests/ -v --tb=short
43
44 - name: Check code style
45 run: ruff check video_processor/
46
47 lint:
48 runs-on: ubu4- uses: actions/checkout@v6
49
50 - uses: actions/setup-python@v5
51 pip instwith:
52 python-version: "3.12"
53
54 - name: Install dependencies
55 run: |
56 pip install ruff mypy
57
58 - name: Ruff
59 run: ruff check video_processor/
60
61 - name: Type check
62 run: mypy video_processor/ --igno
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,39 @@
1
+name: Deploy Docs
2
+
3
+on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - "docs/**"
8
+ - "mkdocs.yml"
9
+
10
+permissions:
11
+ contents: write
12
+ pages: write
13
+ id-token: write
14
+
15
+jobs:
16
+ deploy:
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ 4e: Deploy Docs
20
+
21
+on:
22
+ push:
23
+ branches: [main]
24
+ paths:
25
+ - "docs/**"
26
+ - "mkdocs.yml"
27
+
28
+permissions:
29
+ contents: write
30
+ pages: write
31
+ id-token: write
32
+
33
+jobs:
34
+ deploy:
35
+ runs-on: ubuntu-latest
36
+ steps:
37
+ - uses: actions/checkout@v6
38
+
39
+ - u5es: actions/setup-pythn
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,39 @@
1 name: Deploy Docs
2
3 on:
4 push:
5 branches: [main]
6 paths:
7 - "docs/**"
8 - "mkdocs.yml"
9
10 permissions:
11 contents: write
12 pages: write
13 id-token: write
14
15 jobs:
16 deploy:
17 runs-on: ubuntu-latest
18 steps:
19 4e: Deploy Docs
20
21 on:
22 push:
23 branches: [main]
24 paths:
25 - "docs/**"
26 - "mkdocs.yml"
27
28 permissions:
29 contents: write
30 pages: write
31 id-token: write
32
33 jobs:
34 deploy:
35 runs-on: ubuntu-latest
36 steps:
37 - uses: actions/checkout@v6
38
39 - u5es: actions/setup-pythn
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -0,0 +1,44 @@
1
+name: Publish to PyPI
2
+
3
+on:
4
+ release:
5
+ types: [published]
6
+
7
+permissions:
8
+ id-token: write
9
+
10
+jobs:
11
+ build:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ 4- uses: actions/checkout@v6
15
+
16
+ - uses: actions/setup-python@v5
17
+ with:
18
+ v6
19
+ with:
20
+ python-version: "3.12"
21
+
22
+ - name: Install build tools
23
+ run: pip install build
24
+
25
+ - name: Build package
26
+ run: python -m build
27
+
28
+ - name: Upload artifacts
29
+ uses4 actions/upload-artifact@v6
30
+ with:
31
+ name: dist
32
+ path: dist/
33
+
34
+ publish-pypi:
35
+ needs: build
36
+ runs-on: ubuntu-latest
37
+ environment: pypi
38
+ steps:
39
+ - name: Downlo4 actions/upload-artifact@v6
40
+ t
41
+ path: dist/
42
+
43
+ - name: Publish to PyPI
44
+ uses: pypa/gh-acti
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -0,0 +1,44 @@
1 name: Publish to PyPI
2
3 on:
4 release:
5 types: [published]
6
7 permissions:
8 id-token: write
9
10 jobs:
11 build:
12 runs-on: ubuntu-latest
13 steps:
14 4- uses: actions/checkout@v6
15
16 - uses: actions/setup-python@v5
17 with:
18 v6
19 with:
20 python-version: "3.12"
21
22 - name: Install build tools
23 run: pip install build
24
25 - name: Build package
26 run: python -m build
27
28 - name: Upload artifacts
29 uses4 actions/upload-artifact@v6
30 with:
31 name: dist
32 path: dist/
33
34 publish-pypi:
35 needs: build
36 runs-on: ubuntu-latest
37 environment: pypi
38 steps:
39 - name: Downlo4 actions/upload-artifact@v6
40 t
41 path: dist/
42
43 - name: Publish to PyPI
44 uses: pypa/gh-acti
--- a/.github/workflows/release-binaries.yml
+++ b/.github/workflows/release-binaries.yml
@@ -0,0 +1,69 @@
1
+name: Build Release Binaries
2
+
3
+on:
4
+ release:
5
+ types: [published]
6
+
7
+permissions:
8
+ contents: write
9
+
10
+jobs:
11
+ build:
12
+ strategy:
13
+ matrix:
14
+ include:
15
+ - os: ubuntu-latest
16
+ target: linux-x86_64
17
+ ext: ""
18
+ - os: macos-latest
19
+ target: macos-arm64
20
+ ext: ""
21
+ - os: macos-13
22
+ target: macos-x86_64
23
+ ext: ""
24
+ - os: windows-latest
25
+ target: windows-x86_64
26
+ ext: ".exe"
27
+
28
+ runs-on: ${{ matrix.os }}
29
+ steps:
30
+ 4- uses: actions/checkout@v6
31
+
32
+ - uses: actions/setup-python@v5
33
+ with:
34
+ python-version: "3.12"
35
+
36
+ - name: Install system dependencies (Ubuntu)
37
+ if: runner.os == 'Linux'
38
+ run: |
39
+ sudo apt-get update
40
+ sudo apt-get install -y ffmpeg libsndfile1
41
+
42
+ - name: Install system dependencies (macOS)
43
+ if: runner.os == 'macOS'
44
+ run: brew install ffmpeg libsndfile
45
+
46
+ - name: Install dependencies
47
+ run: |
48
+ pip install -e ".[all]"
49
+ pip install pyinstaller
50
+
51
+ - name: Build binary
52
+ run: |
53
+ pyinstaller \
54
+ --name planopticon-${{ matrix.target }} \
55
+ --onefile \
56
+ --console \
57
+ --hidden-import=video_processor \
58
+ --hidden-import=video_processor.cli.commands \
59
+ --hidden-import=video_processor.providers \
60
+ --hidden-import=video_processor.providers.openai_provider \
61
+ --hidden-import=video_processor.providers.anthropic_provider \
62
+ --hidden-import=video_processor.providers.gemini_provider \
63
+ --collect-all video_processor \
64
+ video_processor/cli/commands.py
65
+
66
+ - name: Upload binary to release
67
+ uses: softprops/action-gh-release@v2
68
+ with:
69
+ files: dist/planopticon-${{ matrix.
--- a/.github/workflows/release-binaries.yml
+++ b/.github/workflows/release-binaries.yml
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/.github/workflows/release-binaries.yml
+++ b/.github/workflows/release-binaries.yml
@@ -0,0 +1,69 @@
1 name: Build Release Binaries
2
3 on:
4 release:
5 types: [published]
6
7 permissions:
8 contents: write
9
10 jobs:
11 build:
12 strategy:
13 matrix:
14 include:
15 - os: ubuntu-latest
16 target: linux-x86_64
17 ext: ""
18 - os: macos-latest
19 target: macos-arm64
20 ext: ""
21 - os: macos-13
22 target: macos-x86_64
23 ext: ""
24 - os: windows-latest
25 target: windows-x86_64
26 ext: ".exe"
27
28 runs-on: ${{ matrix.os }}
29 steps:
30 4- uses: actions/checkout@v6
31
32 - uses: actions/setup-python@v5
33 with:
34 python-version: "3.12"
35
36 - name: Install system dependencies (Ubuntu)
37 if: runner.os == 'Linux'
38 run: |
39 sudo apt-get update
40 sudo apt-get install -y ffmpeg libsndfile1
41
42 - name: Install system dependencies (macOS)
43 if: runner.os == 'macOS'
44 run: brew install ffmpeg libsndfile
45
46 - name: Install dependencies
47 run: |
48 pip install -e ".[all]"
49 pip install pyinstaller
50
51 - name: Build binary
52 run: |
53 pyinstaller \
54 --name planopticon-${{ matrix.target }} \
55 --onefile \
56 --console \
57 --hidden-import=video_processor \
58 --hidden-import=video_processor.cli.commands \
59 --hidden-import=video_processor.providers \
60 --hidden-import=video_processor.providers.openai_provider \
61 --hidden-import=video_processor.providers.anthropic_provider \
62 --hidden-import=video_processor.providers.gemini_provider \
63 --collect-all video_processor \
64 video_processor/cli/commands.py
65
66 - name: Upload binary to release
67 uses: softprops/action-gh-release@v2
68 with:
69 files: dist/planopticon-${{ matrix.
+21
--- a/LICENSE
+++ b/LICENSE
@@ -0,0 +1,21 @@
1
+MIT License
2
+
3
+Copyright (c) 2025 CONFLICT LLC. All rights reserved.
4
+
5
+Permission is hereby granted, free of charge, to any person obtaining a copy
6
+of this software and associated documentation files (the "Software"), to deal
7
+in the Software without restriction, including without limitation the rights
8
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+copies of the Software, and to permit persons to whom the Software is
10
+furnished to do so, subject to the following conditions:
11
+
12
+The above copyright notice and this permission notice shall be included in all
13
+copies or substantial portions of the Software.
14
+
15
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+SOFTWARE.
--- a/LICENSE
+++ b/LICENSE
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/LICENSE
+++ b/LICENSE
@@ -0,0 +1,21 @@
1 MIT License
2
3 Copyright (c) 2025 CONFLICT LLC. All rights reserved.
4
5 Permission is hereby granted, free of charge, to any person obtaining a copy
6 of this software and associated documentation files (the "Software"), to deal
7 in the Software without restriction, including without limitation the rights
8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 copies of the Software, and to permit persons to whom the Software is
10 furnished to do so, subject to the following conditions:
11
12 The above copyright notice and this permission notice shall be included in all
13 copies or substantial portions of the Software.
14
15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 SOFTWARE.
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -0,0 +1,4 @@
1
+include LICENSE
2
+include README.md
3
+include requirements.txt
4
+recursive-include video_processor *.py
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -0,0 +1,4 @@
 
 
 
 
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -0,0 +1,4 @@
1 include LICENSE
2 include README.md
3 include requirements.txt
4 recursive-include video_processor *.py
+1
--- a/docs/CNAME
+++ b/docs/CNAME
@@ -0,0 +1 @@
1
+planopticon.dev
--- a/docs/CNAME
+++ b/docs/CNAME
@@ -0,0 +1 @@
 
--- a/docs/CNAME
+++ b/docs/CNAME
@@ -0,0 +1 @@
1 planopticon.dev
--- a/docs/api/analyzers.md
+++ b/docs/api/analyzers.md
@@ -0,0 +1,7 @@
1
+# Analyzers API Reference
2
+
3
+::: video_processor.analyzers.diagram_analyzer
4
+
5
+::: video_processor.analyzers.content_analyzer
6
+
7
+::: video_processor
--- a/docs/api/analyzers.md
+++ b/docs/api/analyzers.md
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
--- a/docs/api/analyzers.md
+++ b/docs/api/analyzers.md
@@ -0,0 +1,7 @@
1 # Analyzers API Reference
2
3 ::: video_processor.analyzers.diagram_analyzer
4
5 ::: video_processor.analyzers.content_analyzer
6
7 ::: video_processor
--- a/docs/api/models.md
+++ b/docs/api/models.md
@@ -0,0 +1,2 @@
1
+# Models API Reference
2
+
--- a/docs/api/models.md
+++ b/docs/api/models.md
@@ -0,0 +1,2 @@
 
 
--- a/docs/api/models.md
+++ b/docs/api/models.md
@@ -0,0 +1,2 @@
1 # Models API Reference
2
--- a/docs/api/providers.md
+++ b/docs/api/providers.md
@@ -0,0 +1,7 @@
1
+# Providers API Reference
2
+
3
+::: video_processor.providers.base
4
+
5
+::: video_processor.providers.manager
6
+
7
+::: video_processor.providers.discovery
--- a/docs/api/providers.md
+++ b/docs/api/providers.md
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
--- a/docs/api/providers.md
+++ b/docs/api/providers.md
@@ -0,0 +1,7 @@
1 # Providers API Reference
2
3 ::: video_processor.providers.base
4
5 ::: video_processor.providers.manager
6
7 ::: video_processor.providers.discovery
--- a/docs/architecture/overview.md
+++ b/docs/architecture/overview.md
@@ -0,0 +1,37 @@
1
+# Architecture Overview
2
+
3
+## System diagram
4
+
5
+```mermaid
6
+graph TD
7
+ A[Video Input] --> B[Frame Extractor]
8
+ A --> C[Audio Extractor]
9
+ B --> D[Diagram Analyzer]
10
+ C --> E[Transcription]
11
+ D --> F[Knowledge Graph]
12
+ E --> F
13
+ E --> G[Key Point Extractor]
14
+ E --> H[Action Item Detector]
15
+ D --> I[Content Analyzer]
16
+ E --> I
17
+ F --> J[Plan Generator]
18
+ G --> J
19
+ H --> J
20
+ I --> J
21
+bgraph Output & Export
22
+ J J --> L[HTML Report]
23
+ --> L[HTML Report]
24
+ D --> N[Mermaid/SVG/PNG Export]
25
+```
26
+
27
+## Module structure
28
+
29
+```
30
+video_processor/
31
+├── cli/ # CLI commands (Click)
32
+│ └── commands.py
33
+├── le Notes (macOS)
34
+├── extractors/ # Media extraction
35
+│ ├── frame_extractor.py # Video → frames
36
+│ └── audio_extractor.py # Video → WAV
37
+├── anal
--- a/docs/architecture/overview.md
+++ b/docs/architecture/overview.md
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/architecture/overview.md
+++ b/docs/architecture/overview.md
@@ -0,0 +1,37 @@
1 # Architecture Overview
2
3 ## System diagram
4
5 ```mermaid
6 graph TD
7 A[Video Input] --> B[Frame Extractor]
8 A --> C[Audio Extractor]
9 B --> D[Diagram Analyzer]
10 C --> E[Transcription]
11 D --> F[Knowledge Graph]
12 E --> F
13 E --> G[Key Point Extractor]
14 E --> H[Action Item Detector]
15 D --> I[Content Analyzer]
16 E --> I
17 F --> J[Plan Generator]
18 G --> J
19 H --> J
20 I --> J
21 bgraph Output & Export
22 J J --> L[HTML Report]
23 --> L[HTML Report]
24 D --> N[Mermaid/SVG/PNG Export]
25 ```
26
27 ## Module structure
28
29 ```
30 video_processor/
31 ├── cli/ # CLI commands (Click)
32 │ └── commands.py
33 ├── le Notes (macOS)
34 ├── extractors/ # Media extraction
35 │ ├── frame_extractor.py # Video → frames
36 │ └── audio_extractor.py # Video → WAV
37 ├── anal
--- a/docs/architecture/pipeline.md
+++ b/docs/architecture/pipeline.md
@@ -0,0 +1,43 @@
1
+# Processing Pipeline
2
+
3
+## Single video pipeline
4
+
5
+```mermaid
6
+sequenceDiagram
7
+ participant CLI
8
+ participant Pipeline
9
+ participant FrameExtractor
10
+ participant AudioExtractor
11
+ participant Provider
12
+ participant DiagramAnalyzer
13
+ participant KnowledgeGraph
14
+
15
+ CLI->>Pipeli Pipeline->>FrameExtractor: extract_frames()
16
+ Pipeline->>AudioExtractor: extract_audio()
17
+ Pipeline->>ProvidPipeline->>Diagram
18
+ loop Each frame
19
+classify (vision)
20
+ alt High confidence diagram
21
+ DiagramAnalyzer->>Provielse Medium confidence
22
+ DiagramAnalyzer-->>Pipeline: screengrab fallbacaph: register_source()
23
+ Pipeline->>KnowledgeGraph: process_transcript()
24
+Pipeline->>Provider: extract key points
25
+ Pipeline->>Provider: extract action items
26
+ Pipeline->>Pipeline: generate reportStep 2: Filter people framee Step 1: Extract frames
27
+ ->>CLI: VideoManifest
28
+```rocess_transcript()
29
+ Pipelincommandcript()
30
+ Pipeline->>Knowledge:
31
+
32
+1. ote over Pipeline: S for matching video `K@y0,R:()` with error handling
33
+3. M@~~,3e: across all completed videos
34
+4. Generate batch summary with aggregated stats
35
+5. Write batch manifest
36
+
37
+## Error handling
38
+
39
+- Individual video failures don't stop the batch
40
+- Failed videos are logged with error details in the manifest
41
+-M@2Zx,z:ures fall back to screengrabs
42
+- LLM extraction failures returnP@2ae,1:
43
+1Et6n6;
--- a/docs/architecture/pipeline.md
+++ b/docs/architecture/pipeline.md
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/architecture/pipeline.md
+++ b/docs/architecture/pipeline.md
@@ -0,0 +1,43 @@
1 # Processing Pipeline
2
3 ## Single video pipeline
4
5 ```mermaid
6 sequenceDiagram
7 participant CLI
8 participant Pipeline
9 participant FrameExtractor
10 participant AudioExtractor
11 participant Provider
12 participant DiagramAnalyzer
13 participant KnowledgeGraph
14
15 CLI->>Pipeli Pipeline->>FrameExtractor: extract_frames()
16 Pipeline->>AudioExtractor: extract_audio()
17 Pipeline->>ProvidPipeline->>Diagram
18 loop Each frame
19 classify (vision)
20 alt High confidence diagram
21 DiagramAnalyzer->>Provielse Medium confidence
22 DiagramAnalyzer-->>Pipeline: screengrab fallbacaph: register_source()
23 Pipeline->>KnowledgeGraph: process_transcript()
24 Pipeline->>Provider: extract key points
25 Pipeline->>Provider: extract action items
26 Pipeline->>Pipeline: generate reportStep 2: Filter people framee Step 1: Extract frames
27 ->>CLI: VideoManifest
28 ```rocess_transcript()
29 Pipelincommandcript()
30 Pipeline->>Knowledge:
31
32 1. ote over Pipeline: S for matching video `K@y0,R:()` with error handling
33 3. M@~~,3e: across all completed videos
34 4. Generate batch summary with aggregated stats
35 5. Write batch manifest
36
37 ## Error handling
38
39 - Individual video failures don't stop the batch
40 - Failed videos are logged with error details in the manifest
41 -M@2Zx,z:ures fall back to screengrabs
42 - LLM extraction failures returnP@2ae,1:
43 1Et6n6;
--- a/docs/architecture/providers.md
+++ b/docs/architecture/providers.md
@@ -0,0 +1,21 @@
1
+# Provider System
2
+
3
+## Overview
4
+
5
+PlanOpticon supports multiple AI providers through a
6
+
7
+## Supported providers
8
+
9
+| Provider | Chat | Vision | Transcription |
10
+|----------|----
11
+| OpenAI | GPT-4o, GPT-4 |ider System
12
+
13
+## Overv# Provider System
14
+
15
+## Overview
16
+
17
+P |
18
+| Google Gemini | Gemini Flash/Pro | Gemini Flash/Pro | Gemini Flash |
19
+|| — | | `XAI_API_KEY` |
20
+| Ollama (local) | Any installed model | llava, moondr and|
21
+| Transcription |
--- a/docs/architecture/providers.md
+++ b/docs/architecture/providers.md
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/architecture/providers.md
+++ b/docs/architecture/providers.md
@@ -0,0 +1,21 @@
1 # Provider System
2
3 ## Overview
4
5 PlanOpticon supports multiple AI providers through a
6
7 ## Supported providers
8
9 | Provider | Chat | Vision | Transcription |
10 |----------|----
11 | OpenAI | GPT-4o, GPT-4 |ider System
12
13 ## Overv# Provider System
14
15 ## Overview
16
17 P |
18 | Google Gemini | Gemini Flash/Pro | Gemini Flash/Pro | Gemini Flash |
19 || — | | `XAI_API_KEY` |
20 | Ollama (local) | Any installed model | llava, moondr and|
21 | Transcription |
--- a/docs/cli-reference.md
+++ b/docs/cli-reference.md
@@ -0,0 +1,20 @@
1
+# CLI Reference
2
+
3
+## `planopticon analyze`
4
+
5
+Analyze a single video and extract structured knowledge.
6
+
7
+```bash
8
+planopticon analyze [OPTIONS]
9
+```
10
+
11
+| Option | Type | Default | Description |
12
+|--------|------|---------|-------------|
13
+| `-i`, `--input` | PATH | *required* | Input video file path |
14
+| `-o`, `--output` | PATH | *required* | Output directory |
15
+| `--depth` | `basic\|standard\|comprehensive` | `standard` | Processing depth |
16
+| `--focus` | TEXT | all | Comma-separated focus areas |
17
+| `--use-gpu` | FLAG | off | Enable GPU acceleration |
18
+| `--sampling-rate` | FLOAT | 0.5 | Frame sampling rate (fps) |
19
+| `--change-threshold` | FLOAT | 0.15 | Visutitle `--title` | TEXT | auto | Report title |
20
+| `-p`, `--provider` | `auto\
--- a/docs/cli-reference.md
+++ b/docs/cli-reference.md
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/cli-reference.md
+++ b/docs/cli-reference.md
@@ -0,0 +1,20 @@
1 # CLI Reference
2
3 ## `planopticon analyze`
4
5 Analyze a single video and extract structured knowledge.
6
7 ```bash
8 planopticon analyze [OPTIONS]
9 ```
10
11 | Option | Type | Default | Description |
12 |--------|------|---------|-------------|
13 | `-i`, `--input` | PATH | *required* | Input video file path |
14 | `-o`, `--output` | PATH | *required* | Output directory |
15 | `--depth` | `basic\|standard\|comprehensive` | `standard` | Processing depth |
16 | `--focus` | TEXT | all | Comma-separated focus areas |
17 | `--use-gpu` | FLAG | off | Enable GPU acceleration |
18 | `--sampling-rate` | FLOAT | 0.5 | Frame sampling rate (fps) |
19 | `--change-threshold` | FLOAT | 0.15 | Visutitle `--title` | TEXT | auto | Report title |
20 | `-p`, `--provider` | `auto\
--- a/docs/contributing.md
+++ b/docs/contributing.md
@@ -0,0 +1,58 @@
1
+# Contributing
2
+
3
+## Development setup
4
+
5
+```bash
6
+git clone https://github.com/conflict-llc/PlanOpticon.git
7
+cd PlanOpticon
8
+python -m venv .venv
9
+source .venv/bin/activate
10
+pip install -e ".[dev]"
11
+```
12
+
13
+## Running tests
14
+
15
+skills, and CLI commands.
16
+
17
+```bash
18
+# Run all tests
19
+pytest tests/ -v
20
+
21
+# Run with coverage
22
+pytest tests/ --cov=video_processor --cov-report=html
23
+
24
+# Russert result == "linting
25
+- **Black** forRuff** for bisort** for import sorting
26
+- **mypy** for type checking
27
+
28
+```bashration tests)
29
+pytest tests/ -blasts)
30
+pytest tests/ -isort urce, typically
31
+mypy urce, typically d `test_<module>.py`
32
+- Use `pytes files to disk
33
+- Fix base.py # Skill ABC, rethe module structure., `list_videos()`,provider if needed
34
+6. Add tests and d� notes_export.py
35
+│ │ ├── artifact_export.py
36
+│ │ ─ requirements_chat.py
37
+│ │ ├── cli_adapter.py
38
+│ Registerlass to the lazy-impoproviders/discovery.py`
39
+5│ ├── _var="YOUR_API_KEY")
40
+```
41
+
42
+## ia environment variables.
43
+
44
+Implement auth flow a`List[DocumentChunk]`) and `can_process()`
45
+5. Call `register_processor()` at module level
46
+6. Add the import to `video_processor/processors/__init__.py`
47
+7. Add tests
48
+
49
+### Example processor skeleton
50
+
51
+```python
52
+"""Your document processor."""
53
+
54
+from pathlib import Path
55
+from typing import List
56
+
57
+from video_processor.processors.base import (
58
+ DocumentChunk,
--- a/docs/contributing.md
+++ b/docs/contributing.md
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/contributing.md
+++ b/docs/contributing.md
@@ -0,0 +1,58 @@
1 # Contributing
2
3 ## Development setup
4
5 ```bash
6 git clone https://github.com/conflict-llc/PlanOpticon.git
7 cd PlanOpticon
8 python -m venv .venv
9 source .venv/bin/activate
10 pip install -e ".[dev]"
11 ```
12
13 ## Running tests
14
15 skills, and CLI commands.
16
17 ```bash
18 # Run all tests
19 pytest tests/ -v
20
21 # Run with coverage
22 pytest tests/ --cov=video_processor --cov-report=html
23
24 # Russert result == "linting
25 - **Black** forRuff** for bisort** for import sorting
26 - **mypy** for type checking
27
28 ```bashration tests)
29 pytest tests/ -blasts)
30 pytest tests/ -isort urce, typically
31 mypy urce, typically d `test_<module>.py`
32 - Use `pytes files to disk
33 - Fix base.py # Skill ABC, rethe module structure., `list_videos()`,provider if needed
34 6. Add tests and d� notes_export.py
35 │ │ ├── artifact_export.py
36 │ │ ─ requirements_chat.py
37 │ │ ├── cli_adapter.py
38 │ Registerlass to the lazy-impoproviders/discovery.py`
39 5│ ├── _var="YOUR_API_KEY")
40 ```
41
42 ## ia environment variables.
43
44 Implement auth flow a`List[DocumentChunk]`) and `can_process()`
45 5. Call `register_processor()` at module level
46 6. Add the import to `video_processor/processors/__init__.py`
47 7. Add tests
48
49 ### Example processor skeleton
50
51 ```python
52 """Your document processor."""
53
54 from pathlib import Path
55 from typing import List
56
57 from video_processor.processors.base import (
58 DocumentChunk,
--- a/docs/getting-started/configuration.md
+++ b/docs/getting-started/configuration.md
@@ -0,0 +1,7 @@
1
+omatically.
2
+
3
+```bash
4
+planopticon auth google # Google Drive, Docs, Meet, YouTube
5
+plano
6
+
7
+Credentials are stored in `~/.planopticon/`. Use `planopticon auth SERVICE --logout` to remo
--- a/docs/getting-started/configuration.md
+++ b/docs/getting-started/configuration.md
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
--- a/docs/getting-started/configuration.md
+++ b/docs/getting-started/configuration.md
@@ -0,0 +1,7 @@
1 omatically.
2
3 ```bash
4 planopticon auth google # Google Drive, Docs, Meet, YouTube
5 plano
6
7 Credentials are stored in `~/.planopticon/`. Use `planopticon auth SERVICE --logout` to remo
--- a/docs/getting-started/installation.md
+++ b/docs/getting-started/installation.md
@@ -0,0 +1,3 @@
1
+# Installation
2
+
3
+## From conflict-llcconflict-llc
--- a/docs/getting-started/installation.md
+++ b/docs/getting-started/installation.md
@@ -0,0 +1,3 @@
 
 
 
--- a/docs/getting-started/installation.md
+++ b/docs/getting-started/installation.md
@@ -0,0 +1,3 @@
1 # Installation
2
3 ## From conflict-llcconflict-llc
--- a/docs/getting-started/quickstart.md
+++ b/docs/getting-started/quickstart.md
@@ -0,0 +1,32 @@
1
+# Quick Start
2
+
3
+## Analyze a single video
4
+
5
+```bash
6
+planopticon analyze -i meeting.mp4 -o ./output
7
+```
8
+
9
+This runs the full pipeline:
10
+
11
+1. Extracts video frames (smart sampling, change detection)
12
+2. Extracts and transcribes audio
13
+3. Detects and analyzes diagrams, charts, whiteboards
14
+4. Builds a knowledge graph of entities and relationships
15
+5. Extracts key points and action items
16
+6. Generates markdown, HTML, and PDF reports
17
+7. Outputs a `manifest.json` with everything
18
+
19
+## Processing depth
20
+
21
+```bash
22
+# Quick scan — transcription + key points only
23
+planopticon analyze -i video.mp4 -o ./out --depth basic
24
+
25
+# Standard — includes diagram extraction (default)
26
+planopticon analyze -i video.mp4 -o ./out --depth standard
27
+
28
+# Deep — more frames analyzed, richer extraction
29
+planopticon analyze -i video.mp4 -o ./out --depth comprehensive
30
+```
31
+
32
+## Choose a provi
--- a/docs/getting-started/quickstart.md
+++ b/docs/getting-started/quickstart.md
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/getting-started/quickstart.md
+++ b/docs/getting-started/quickstart.md
@@ -0,0 +1,32 @@
1 # Quick Start
2
3 ## Analyze a single video
4
5 ```bash
6 planopticon analyze -i meeting.mp4 -o ./output
7 ```
8
9 This runs the full pipeline:
10
11 1. Extracts video frames (smart sampling, change detection)
12 2. Extracts and transcribes audio
13 3. Detects and analyzes diagrams, charts, whiteboards
14 4. Builds a knowledge graph of entities and relationships
15 5. Extracts key points and action items
16 6. Generates markdown, HTML, and PDF reports
17 7. Outputs a `manifest.json` with everything
18
19 ## Processing depth
20
21 ```bash
22 # Quick scan — transcription + key points only
23 planopticon analyze -i video.mp4 -o ./out --depth basic
24
25 # Standard — includes diagram extraction (default)
26 planopticon analyze -i video.mp4 -o ./out --depth standard
27
28 # Deep — more frames analyzed, richer extraction
29 planopticon analyze -i video.mp4 -o ./out --depth comprehensive
30 ```
31
32 ## Choose a provi
--- a/docs/guide/batch.md
+++ b/docs/guide/batch.md
@@ -0,0 +1,65 @@
1
+# Batch Processing
2
+
3
+## Basic usage
4
+
5
+```bash
6
+planopticon batch -i ./recordings -o ./output --title "Sprint Reviews"
7
+```
8
+
9
+## How it works
10
+
11
+Batch mode:
12
+
13
+1. Scans the input directory for video files matching the pattern
14
+2. Processes each video through the full single-video pipeline
15
+3. Merges knowledge graphs across all videos (case-insensitive entity dedup)ing and conflict resolution
16
+4. Generates a batch summary with aggregated stats and action items
17
+5. Writes a batch manifest linking to per-video results
18
+
19
+## File patterns
20
+
21
+```bash
22
+# Default: common video formats
23
+planopticon batch -i ./recordings -o ./output
24
+
25
+# Custom patterns
26
+planopticon batch -i ./recordings -o ./output --pattern "*.mp4,*.mov"
27
+```
28
+
29
+## Output structure
30
+
31
+```
32
+output/
33
+├── batch_manifest.json # Batch-level manifest
34
+├── batch_summary.md
35
+├── kss all videos (JSON export)
36
+└── videos/
37
+ ├── meeting-01/
38
+ │ ├── manifest.json
39
+ │ ├── transcript/
40
+ │ ├└── results/└── action_items.json
41
+ └── meeting-02/
42
+ ├── manifest.json
43
+ └── ...
44
+```
45
+
46
+## Knowledge graph merging
47
+
48
+When the same entity a:
49
+
50
+- Case-iDescriptions are unioned
51
+- Occurrences are concatRelationship deduplication
52
+
53
+- Rel/
54
+ │ ├── diagramandm��── knowledge_graph.db
55
+ │ ├── knowledge_graph.json
56
+ │ ├── key_points.json
57
+ │ └── action_items.json
58
+ └── meeting-02/
59
+ ├── manifest.json
60
+ └── ...
61
+```
62
+
63
+## Knowledge graph merging
64
+
65
+When the same entit
--- a/docs/guide/batch.md
+++ b/docs/guide/batch.md
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/guide/batch.md
+++ b/docs/guide/batch.md
@@ -0,0 +1,65 @@
1 # Batch Processing
2
3 ## Basic usage
4
5 ```bash
6 planopticon batch -i ./recordings -o ./output --title "Sprint Reviews"
7 ```
8
9 ## How it works
10
11 Batch mode:
12
13 1. Scans the input directory for video files matching the pattern
14 2. Processes each video through the full single-video pipeline
15 3. Merges knowledge graphs across all videos (case-insensitive entity dedup)ing and conflict resolution
16 4. Generates a batch summary with aggregated stats and action items
17 5. Writes a batch manifest linking to per-video results
18
19 ## File patterns
20
21 ```bash
22 # Default: common video formats
23 planopticon batch -i ./recordings -o ./output
24
25 # Custom patterns
26 planopticon batch -i ./recordings -o ./output --pattern "*.mp4,*.mov"
27 ```
28
29 ## Output structure
30
31 ```
32 output/
33 ├── batch_manifest.json # Batch-level manifest
34 ├── batch_summary.md
35 ├── kss all videos (JSON export)
36 └── videos/
37 ├── meeting-01/
38 │ ├── manifest.json
39 │ ├── transcript/
40 │ ├└── results/└── action_items.json
41 └── meeting-02/
42 ├── manifest.json
43 └── ...
44 ```
45
46 ## Knowledge graph merging
47
48 When the same entity a:
49
50 - Case-iDescriptions are unioned
51 - Occurrences are concatRelationship deduplication
52
53 - Rel/
54 │ ├── diagramandm��── knowledge_graph.db
55 │ ├── knowledge_graph.json
56 │ ├── key_points.json
57 │ └── action_items.json
58 └── meeting-02/
59 ├── manifest.json
60 └── ...
61 ```
62
63 ## Knowledge graph merging
64
65 When the same entit
--- a/docs/guide/cloud-sources.md
+++ b/docs/guide/cloud-sources.md
@@ -0,0 +1,44 @@
1
+# Cloud Sources
2
+
3
+!!! note "Coming soon"
4
+ Cloud source integration is under active development.
5
+
6
+PlanOpticon can fetch videos directl videos, documents, and notes.
7
+
8
+## Google Drive
9
+
10
+### Service account auth
11
+
12
+For automated/server-side usage:
13
+
14
+```bash
15
+export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account.json"
16
+planopticon batch --source gdrive --folder-id "abc123" -o ./output
17
+```
18
+
19
+### OAuth2 user auth
20
+
21
+For interactive usage with your own Google account:
22
+
23
+```bash
24
+planopticon auth google
25
+planopticon batch --source gdrive --folder-id "abc123" -o ./output
26
+```
27
+
28
+### Install
29
+
30
+```bash
31
+pip install planopticon[gdrive]
32
+```
33
+
34
+## Google Workspace (gws)
35
+
36
+Full Google Workspace integration beyond just Drive. Access Docs, Sheets, Slides, and Meet recordings through the `gws` CLI group.
37
+
38
+### Setup
39
+
40
+```bash
41
+planopticon auth google
42
+```
43
+
44
+A single Google OAuth sessi
--- a/docs/guide/cloud-sources.md
+++ b/docs/guide/cloud-sources.md
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/guide/cloud-sources.md
+++ b/docs/guide/cloud-sources.md
@@ -0,0 +1,44 @@
1 # Cloud Sources
2
3 !!! note "Coming soon"
4 Cloud source integration is under active development.
5
6 PlanOpticon can fetch videos directl videos, documents, and notes.
7
8 ## Google Drive
9
10 ### Service account auth
11
12 For automated/server-side usage:
13
14 ```bash
15 export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account.json"
16 planopticon batch --source gdrive --folder-id "abc123" -o ./output
17 ```
18
19 ### OAuth2 user auth
20
21 For interactive usage with your own Google account:
22
23 ```bash
24 planopticon auth google
25 planopticon batch --source gdrive --folder-id "abc123" -o ./output
26 ```
27
28 ### Install
29
30 ```bash
31 pip install planopticon[gdrive]
32 ```
33
34 ## Google Workspace (gws)
35
36 Full Google Workspace integration beyond just Drive. Access Docs, Sheets, Slides, and Meet recordings through the `gws` CLI group.
37
38 ### Setup
39
40 ```bash
41 planopticon auth google
42 ```
43
44 A single Google OAuth sessi
--- a/docs/guide/output-formats.md
+++ b/docs/guide/output-formats.md
@@ -0,0 +1,40 @@
1
+# Output For`speaker` fields. |
2
+| Text | `transcript/transcript.txt` | Plain text transcript with no metadata. Suitable for feeding into other tools or reading directly. |
3
+| SRT | `transcript/transcript.srt` | SubRip subtitle format with sequential numbering and `HH:MM:SS,mmm` timestamps. Can be loaded into video players or subtitle editors. |
4
+
5
+### Transcript JSON structure
6
+
7
+```json
8
+{
9
+ "segments": [
10
+ {
11
+ "start": 0.0,
12
+ "end": 4.5,
13
+ "text": "Welcome to the sprint review.",
14
+ "speaker": "Alice"
15
+ }
16
+ ],
17
+ "text": "Welcome to the sprint review. ...",
18
+ "language": "en"
19
+}
20
+```
21
+
22
+When the `--speakers` flag is provided (e.g., `--speakers "Alice,Bob,Carol"`), speaker diarization hints are passed to the transcription provider and speaker labels appear in the JSON segments.
23
+
24
+---
25
+
26
+## Reports
27
+
28
+Analysis reports are generated from the combined transcript, diagrams, key points, action items, and knowledge graph. They live in the `results/` subdirectory.
29
+
30
+| Format | File | Description |
31
+|--------|------|-------------|
32
+| Markdown | `results/analysis.md` | Structured report with embedded Mermaid diagram blocks, tables, and cross-references. Works in any Markdown renderer. |
33
+| HTML | `results/analysis.html` | Self-contained HTML page with inline CSS, embedded SVG diagrams, and a bundled mermaid.js script for rendering any unrendered Mermaid blocks. No external dependencies required to view. |
34
+| PDF | `results/analysis.pdf` | Print-ready PDF. Requires the `planopticon[pdf]` extra (`pip install planopticon[pdf]`). Generated from the HTML report. |
35
+
36
+---
37
+
38
+## Diagrams
39
+
40
+Each visual
--- a/docs/guide/output-formats.md
+++ b/docs/guide/output-formats.md
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/guide/output-formats.md
+++ b/docs/guide/output-formats.md
@@ -0,0 +1,40 @@
1 # Output For`speaker` fields. |
2 | Text | `transcript/transcript.txt` | Plain text transcript with no metadata. Suitable for feeding into other tools or reading directly. |
3 | SRT | `transcript/transcript.srt` | SubRip subtitle format with sequential numbering and `HH:MM:SS,mmm` timestamps. Can be loaded into video players or subtitle editors. |
4
5 ### Transcript JSON structure
6
7 ```json
8 {
9 "segments": [
10 {
11 "start": 0.0,
12 "end": 4.5,
13 "text": "Welcome to the sprint review.",
14 "speaker": "Alice"
15 }
16 ],
17 "text": "Welcome to the sprint review. ...",
18 "language": "en"
19 }
20 ```
21
22 When the `--speakers` flag is provided (e.g., `--speakers "Alice,Bob,Carol"`), speaker diarization hints are passed to the transcription provider and speaker labels appear in the JSON segments.
23
24 ---
25
26 ## Reports
27
28 Analysis reports are generated from the combined transcript, diagrams, key points, action items, and knowledge graph. They live in the `results/` subdirectory.
29
30 | Format | File | Description |
31 |--------|------|-------------|
32 | Markdown | `results/analysis.md` | Structured report with embedded Mermaid diagram blocks, tables, and cross-references. Works in any Markdown renderer. |
33 | HTML | `results/analysis.html` | Self-contained HTML page with inline CSS, embedded SVG diagrams, and a bundled mermaid.js script for rendering any unrendered Mermaid blocks. No external dependencies required to view. |
34 | PDF | `results/analysis.pdf` | Print-ready PDF. Requires the `planopticon[pdf]` extra (`pip install planopticon[pdf]`). Generated from the HTML report. |
35
36 ---
37
38 ## Diagrams
39
40 Each visual
--- a/docs/guide/single-video.md
+++ b/docs/guide/single-video.md
@@ -0,0 +1,83 @@
1
+# Single Video Analysis
2
+
3
+## Basic usage
4
+
5
+```bash
6
+planopticon analyze -i recording.mp4 -o ./output
7
+```
8
+
9
+## What happens
10
+
11
+The pipeline runs these steps in order—
12
+1. **Frame extraction** -- Samples frames from the video using change detection to avoid duplicates
13
+2onfidence diagrams get full 3t, mermaid, chart data)
14
+— Medium-confidence frames are saved as captione4 screenshots
15
+8. **Knowledge graph** —wledge_graph.json` — LLM extracts main 5deo Analysis
16
+
17
+## Basic usage
18
+
19
+```bash
20
+planopticon analyze -i recording.mp4 -o ./output#points and action items
21
+- No diagram extraction
22
+
23
+### `standard` (default)
24
+- Everything in basic
25
+- Diagram extraction (up to 10 frames)
26
+- Knowledge graph
27
+- Full report generation
28
+
29
+### `comprehensive`
30
+- Everything in standard
31
+- More frames analyzed (up to 20)
32
+- Deeper analysis
33
+
34
+## # Action items
35
+```
36
+
37
+## Output manifest
38
+
39
+Every run produces a `manifest.json` that is the single source of truth:
40
+
41
+```json
42
+{
43
+ "version": "1.0",
44
+ "video": {
45
+ "title": "Analysis of recording",
46
+ "source_path": "/path/to/recording.mp4",
47
+ "duration_seconds": 3600.0
48
+ },
49
+ "stats": {
50
+ "duration_seconds": 45.2,
51
+ "frames_extracted": 42,
52
+ "people_frames_filtered": 11,
53
+ "diagrams_detected":
54
+ }diagram_0.svg # Vector rendering
55
+│ ├── diagram_0.pn7(default)
56
+- Everything in basic
57
+- Diagram extraction (up to 10 frames)
58
+- Knowledge graph
59
+8# `comprehensive`
60
+- Everything9alyzed (up to 20)
61
+- Deeper analysis
62
+
63
+## # Action items
64
+```
65
+
66
+## Ou0put manifest
67
+
68
+Every run pr1t is the single source of truth:
69
+
70
+```json
71
+{
72
+ "version": "1.0",
73
+ "video": {
74
+ "title": "Analysis of recording",
75
+ "source_path": "/path/to/recording.mp4",
76
+ "duration_seconds": 3600.0
77
+ },
78
+ "stats": {
79
+ "duration_seconds": 45.2,
80
+ "frames_extracted": 42,
81
+ "people_frames_filtered": 11,
82
+ "diagrams_detected":
83
+ }diagram_0.svg
--- a/docs/guide/single-video.md
+++ b/docs/guide/single-video.md
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/guide/single-video.md
+++ b/docs/guide/single-video.md
@@ -0,0 +1,83 @@
1 # Single Video Analysis
2
3 ## Basic usage
4
5 ```bash
6 planopticon analyze -i recording.mp4 -o ./output
7 ```
8
9 ## What happens
10
11 The pipeline runs these steps in order—
12 1. **Frame extraction** -- Samples frames from the video using change detection to avoid duplicates
13 2onfidence diagrams get full 3t, mermaid, chart data)
14 — Medium-confidence frames are saved as captione4 screenshots
15 8. **Knowledge graph** —wledge_graph.json` — LLM extracts main 5deo Analysis
16
17 ## Basic usage
18
19 ```bash
20 planopticon analyze -i recording.mp4 -o ./output#points and action items
21 - No diagram extraction
22
23 ### `standard` (default)
24 - Everything in basic
25 - Diagram extraction (up to 10 frames)
26 - Knowledge graph
27 - Full report generation
28
29 ### `comprehensive`
30 - Everything in standard
31 - More frames analyzed (up to 20)
32 - Deeper analysis
33
34 ## # Action items
35 ```
36
37 ## Output manifest
38
39 Every run produces a `manifest.json` that is the single source of truth:
40
41 ```json
42 {
43 "version": "1.0",
44 "video": {
45 "title": "Analysis of recording",
46 "source_path": "/path/to/recording.mp4",
47 "duration_seconds": 3600.0
48 },
49 "stats": {
50 "duration_seconds": 45.2,
51 "frames_extracted": 42,
52 "people_frames_filtered": 11,
53 "diagrams_detected":
54 }diagram_0.svg # Vector rendering
55 │ ├── diagram_0.pn7(default)
56 - Everything in basic
57 - Diagram extraction (up to 10 frames)
58 - Knowledge graph
59 8# `comprehensive`
60 - Everything9alyzed (up to 20)
61 - Deeper analysis
62
63 ## # Action items
64 ```
65
66 ## Ou0put manifest
67
68 Every run pr1t is the single source of truth:
69
70 ```json
71 {
72 "version": "1.0",
73 "video": {
74 "title": "Analysis of recording",
75 "source_path": "/path/to/recording.mp4",
76 "duration_seconds": 3600.0
77 },
78 "stats": {
79 "duration_seconds": 45.2,
80 "frames_extracted": 42,
81 "people_frames_filtered": 11,
82 "diagrams_detected":
83 }diagram_0.svg
--- a/docs/index.md
+++ b/docs/index.md
@@ -0,0 +1,18 @@
1
+# PlanOpticon
2
+
3
+ and*AI-powered video ana.**
4
+
5
+PlanOpticon into structured knowledge — transcripts, diagrams, action items, key pointsauto-discoveOpenAI, Anthropic, and Gemini, and producion REPL and planning agent.
6
+
7
+---
8
+
9
+## Features
10
+
11
+- **Multi-provider AI** — Automatically discovers and routes to the best available modeland Google Gemini
12
+- **Smart frame extraction** — Change detection for transitions + periodic capture (every 30s) for slow-evolving content like document scedge graphs** — Extracts entities and relationships, bconflict-llc# PlanOpticon
13
+
14
+ and*AI-powered video ana.**
15
+
16
+PlanOpticon into structured knowledge — transcripts, diagrams, action items, key pointsauto-discoveOpenAI, Anthropic, and Gemini, and producion REPL and planning agent.
17
+
18
+-n
--- a/docs/index.md
+++ b/docs/index.md
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/index.md
+++ b/docs/index.md
@@ -0,0 +1,18 @@
1 # PlanOpticon
2
3 and*AI-powered video ana.**
4
5 PlanOpticon into structured knowledge — transcripts, diagrams, action items, key pointsauto-discoveOpenAI, Anthropic, and Gemini, and producion REPL and planning agent.
6
7 ---
8
9 ## Features
10
11 - **Multi-provider AI** — Automatically discovers and routes to the best available modeland Google Gemini
12 - **Smart frame extraction** — Change detection for transitions + periodic capture (every 30s) for slow-evolving content like document scedge graphs** — Extracts entities and relationships, bconflict-llc# PlanOpticon
13
14 and*AI-powered video ana.**
15
16 PlanOpticon into structured knowledge — transcripts, diagrams, action items, key pointsauto-discoveOpenAI, Anthropic, and Gemini, and producion REPL and planning agent.
17
18 -n
+26
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -0,0 +1,26 @@
1
+site_name: PlanOpticon
2
+site_url: https://planopticon.dev
3
+site_description: AI-powered video analysis and knowledge extraction
4
+site_author: CONFLICT LLC
5
+reconflict-llcte_name: PlanOpticon
6
+sitsite_name: P/PlanOpticon
7
+
8
+theme:
9
+ name: material
10
+ palette:
11
+ - media: "(prefers-color-scheme: light)"
12
+ scheme: default
13
+ primary: deep purple
14
+ accent: ambercustom
15
+ accent: custom
16
+ toggle:
17
+ icon: material/brightness-7
18
+ n - media: "(prefers-color-scheme: dark)"
19
+ scheme: slate
20
+ primary: deep purple
21
+ accent: ambercustom
22
+ accent: c4icon: material/brightnesslight mode
23
+ features:
24
+ - navigation.instant
25
+ - navigation.tabs
26
+ - navigation.sectconflict-llcvi5 CONFLICT LLC
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -0,0 +1,26 @@
1 site_name: PlanOpticon
2 site_url: https://planopticon.dev
3 site_description: AI-powered video analysis and knowledge extraction
4 site_author: CONFLICT LLC
5 reconflict-llcte_name: PlanOpticon
6 sitsite_name: P/PlanOpticon
7
8 theme:
9 name: material
10 palette:
11 - media: "(prefers-color-scheme: light)"
12 scheme: default
13 primary: deep purple
14 accent: ambercustom
15 accent: custom
16 toggle:
17 icon: material/brightness-7
18 n - media: "(prefers-color-scheme: dark)"
19 scheme: slate
20 primary: deep purple
21 accent: ambercustom
22 accent: c4icon: material/brightnesslight mode
23 features:
24 - navigation.instant
25 - navigation.tabs
26 - navigation.sectconflict-llcvi5 CONFLICT LLC
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -0,0 +1,33 @@
1
+[build-system]
2
+requires = ["setuptools>=69.0", "wheel"]
3
+build-backend = "setuptools.build_meta"
4
+
5
+[project]
6
+name = "planopticon"
7
+version = "0.2.0"
8
+description = "AI-powered video analysis and knowledge extraction tool"
9
+readme = "README.md"
10
+license = "MIT"
11
+requires-python = ">=3.10"
12
+authors = [
13
+ { name = "CONFLICT LLC" },
14
+]
15
+keywords = ["video", "analysis", "ai", "knowledge-extraction", "transcription", "diagrams"]
16
+classifiers = [
17
+ "Development Status :: 4 - Beta",
18
+ "Intended Audience :: Developers",
19
+ "Intended Audience License :: udience :: Science/Research",
20
+ "Operating System :: OS Independent",
21
+ "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3.10",
23
+ "Programming Language :: Python :: 3.11",
24
+ "Programming Language :: Python :: 3.12",
25
+ "Programming L
26
+ "Topic :: Scientific/Engineering :: Artificial Intelligence",
27
+]
28
+
29
+dependencies = [
30
+ "numpy>=1.24.0",
31
+ "opencv-python>=4.8.0",
32
+ "scipy>=1.10.0",
33
+ "pconflict-llcconflict-llc
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -0,0 +1,33 @@
1 [build-system]
2 requires = ["setuptools>=69.0", "wheel"]
3 build-backend = "setuptools.build_meta"
4
5 [project]
6 name = "planopticon"
7 version = "0.2.0"
8 description = "AI-powered video analysis and knowledge extraction tool"
9 readme = "README.md"
10 license = "MIT"
11 requires-python = ">=3.10"
12 authors = [
13 { name = "CONFLICT LLC" },
14 ]
15 keywords = ["video", "analysis", "ai", "knowledge-extraction", "transcription", "diagrams"]
16 classifiers = [
17 "Development Status :: 4 - Beta",
18 "Intended Audience :: Developers",
19 "Intended Audience License :: udience :: Science/Research",
20 "Operating System :: OS Independent",
21 "Programming Language :: Python :: 3",
22 "Programming Language :: Python :: 3.10",
23 "Programming Language :: Python :: 3.11",
24 "Programming Language :: Python :: 3.12",
25 "Programming L
26 "Topic :: Scientific/Engineering :: Artificial Intelligence",
27 ]
28
29 dependencies = [
30 "numpy>=1.24.0",
31 "opencv-python>=4.8.0",
32 "scipy>=1.10.0",
33 "pconflict-llcconflict-llc
+2
--- a/setup.py
+++ b/setup.py
@@ -0,0 +1,2 @@
1
+"""Backwards-compatible setup.py — all config lives in pyproject.toml."""
2
+from setupt
--- a/setup.py
+++ b/setup.py
@@ -0,0 +1,2 @@
 
 
--- a/setup.py
+++ b/setup.py
@@ -0,0 +1,2 @@
1 """Backwards-compatible setup.py — all config lives in pyproject.toml."""
2 from setupt

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button