# nickcorrieri/rawdog architecture

> Architecture diagram of the GitHub repository nickcorrieri/rawdog, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/nickcorrieri/rawdog
- Repository: https://github.com/nickcorrieri/rawdog

## Overview

RAWDog is a local-first CLI for importing RAW and camera-media files into working folders, then making preview-first, append-only copies to permanent archives. Operators can reuse import profiles, organize imports by project or date, manage dens and yards, and run catalogue, audit, verification, and reporting workflows. The CLI is the product entry point; its commands coordinate planning and file operations, with local SQLite and portable store metadata retaining state. The README documents broader command capabilities than the sampled source excerpts show, so uncertain internal wiring is omitted.

Main entry points: [`rawdog/cli.py`](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/cli.py) (CLI workflows), [`rawdog/db.py`](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/db.py) (Application database), [`rawdog/copier.py`](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/copier.py) (Safe file transfer), [`rawdog/profiles.py`](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/profiles.py) (Import profiles)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ingest["Import workflows"]
  node_cli["CLI workflows<br/>[cli.py]"]
  node_profiles["Import profiles<br/>[profiles.py]"]
  node_projects["Project memory<br/>[projects.py]"]
  node_layout["Source layout<br/>[layout.py]"]
  node_metadata["Media metadata<br/>[metadata.py]"]
end

subgraph group_archive["Archive management"]
  node_denplan["Den planning<br/>[den.py]"]
  node_copy["Safe file transfer<br/>[copier.py]"]
  node_naming["Filename policies<br/>[filenames.py]"]
  node_datefolders["Date organization<br/>[datefolders.py]"]
  node_stores["Den and yard catalogs<br/>[stores.py]"]
  node_safety["Path safety<br/>[safety.py]"]
end

subgraph group_audit["Catalogue and audit"]
  node_inventory["Media inventory<br/>[inventory.py]"]
  node_verifier["Copy verification<br/>[verifier.py]"]
  node_reports["Audit reports<br/>[reports.py]"]
end

subgraph group_state["Plans and memory"]
  node_db[("Application database<br/>[db.py]")]
  node_execution["Execution plans<br/>[execution.py]"]
  node_planning["Planning jobs<br/>[planning_jobs.py]"]
  node_queue["Work queue<br/>[queue.py]"]
end

node_operator(("Photographer"))
node_working["Working folders"]
node_archive_drive["Archive volumes"]

node_operator -->|"runs commands"| node_cli
node_cli -->|"uses profiles"| node_profiles
node_cli -->|"records projects"| node_projects
node_cli -->|"analyzes imports"| node_layout
node_cli -->|"reads capture times"| node_metadata
node_cli -->|"plans den work"| node_denplan
node_denplan -->|"executes transfers"| node_copy
node_cli -->|"copies imports"| node_copy
node_cli -->|"chooses filenames"| node_naming
node_cli -->|"organizes by date"| node_datefolders
node_cli -->|"scans media"| node_inventory
node_cli -->|"verifies copies"| node_verifier
node_cli -->|"produces reports"| node_reports
node_cli -->|"manages catalogs"| node_stores
node_cli -->|"checks paths"| node_safety
node_cli -->|"manages plans"| node_execution
node_cli -->|"tracks planning"| node_planning
node_cli -->|"manages queued work"| node_queue
node_profiles -->|"stores profiles"| node_db
node_projects -->|"stores projects"| node_db
node_execution -->|"stores execution state"| node_db
node_planning -->|"stores job state"| node_db
node_queue -->|"stores queue state"| node_db
node_copy -->|"reads source files"| node_working
node_copy -->|"writes archive copies"| node_archive_drive
node_stores -->|"maintains local catalogs"| node_archive_drive

click node_cli "https://github.com/nickcorrieri/rawdog/blob/main/rawdog/cli.py"
click node_profiles "https://github.com/nickcorrieri/rawdog/blob/main/rawdog/profiles.py"
click node_projects "https://github.com/nickcorrieri/rawdog/blob/main/rawdog/projects.py"
click node_layout "https://github.com/nickcorrieri/rawdog/blob/main/rawdog/layout.py"
click node_metadata "https://github.com/nickcorrieri/rawdog/blob/main/rawdog/metadata.py"
click node_denplan "https://github.com/nickcorrieri/rawdog/blob/main/rawdog/den.py"
click node_copy "https://github.com/nickcorrieri/rawdog/blob/main/rawdog/copier.py"
click node_naming "https://github.com/nickcorrieri/rawdog/blob/main/rawdog/filenames.py"
click node_datefolders "https://github.com/nickcorrieri/rawdog/blob/main/rawdog/datefolders.py"
click node_stores "https://github.com/nickcorrieri/rawdog/blob/main/rawdog/stores.py"
click node_inventory "https://github.com/nickcorrieri/rawdog/blob/main/rawdog/inventory.py"
click node_verifier "https://github.com/nickcorrieri/rawdog/blob/main/rawdog/verifier.py"
click node_reports "https://github.com/nickcorrieri/rawdog/blob/main/rawdog/reports.py"
click node_safety "https://github.com/nickcorrieri/rawdog/blob/main/rawdog/safety.py"
click node_db "https://github.com/nickcorrieri/rawdog/blob/main/rawdog/db.py"
click node_execution "https://github.com/nickcorrieri/rawdog/blob/main/rawdog/execution.py"
click node_planning "https://github.com/nickcorrieri/rawdog/blob/main/rawdog/planning_jobs.py"
click node_queue "https://github.com/nickcorrieri/rawdog/blob/main/rawdog/queue.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_profiles,node_projects,node_layout,node_metadata toneBlue
class node_denplan,node_copy,node_naming,node_datefolders,node_stores,node_safety toneAmber
class node_inventory,node_verifier,node_reports toneMint
class node_db,node_execution,node_planning,node_queue toneRose
class node_operator,node_working,node_archive_drive toneIndigo
```

## Components

### Import workflows

- [CLI workflows](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/cli.py): `rawdog/cli.py`
- [Import profiles](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/profiles.py): `rawdog/profiles.py`
- [Project memory](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/projects.py): `rawdog/projects.py`
- [Source layout](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/layout.py): `rawdog/layout.py`
- [Media metadata](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/metadata.py): `rawdog/metadata.py`

### Archive management

- [Den planning](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/den.py): `rawdog/den.py`
- [Safe file transfer](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/copier.py): `rawdog/copier.py`
- [Filename policies](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/filenames.py): `rawdog/filenames.py`
- [Date organization](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/datefolders.py): `rawdog/datefolders.py`
- [Den and yard catalogs](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/stores.py): `rawdog/stores.py`
- [Path safety](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/safety.py): `rawdog/safety.py`

### Catalogue and audit

- [Media inventory](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/inventory.py): `rawdog/inventory.py`
- [Copy verification](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/verifier.py): `rawdog/verifier.py`
- [Audit reports](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/reports.py): `rawdog/reports.py`

### Plans and memory

- [Application database](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/db.py): `rawdog/db.py`
- [Execution plans](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/execution.py): `rawdog/execution.py`
- [Planning jobs](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/planning_jobs.py): `rawdog/planning_jobs.py`
- [Work queue](https://github.com/nickcorrieri/rawdog/blob/main/rawdog/queue.py): `rawdog/queue.py`

### Other components

- **Photographer**
- **Working folders**
- **Archive volumes**

## Connections

- Photographer → CLI workflows: runs commands
- CLI workflows → Import profiles: uses profiles
- CLI workflows → Project memory: records projects
- CLI workflows → Source layout: analyzes imports
- CLI workflows → Media metadata: reads capture times
- CLI workflows → Den planning: plans den work
- Den planning → Safe file transfer: executes transfers
- CLI workflows → Safe file transfer: copies imports
- CLI workflows → Filename policies: chooses filenames
- CLI workflows → Date organization: organizes by date
- CLI workflows → Media inventory: scans media
- CLI workflows → Copy verification: verifies copies
- CLI workflows → Audit reports: produces reports
- CLI workflows → Den and yard catalogs: manages catalogs
- CLI workflows → Path safety: checks paths
- CLI workflows → Execution plans: manages plans
- CLI workflows → Planning jobs: tracks planning
- CLI workflows → Work queue: manages queued work
- Import profiles → Application database: stores profiles
- Project memory → Application database: stores projects
- Execution plans → Application database: stores execution state
- Planning jobs → Application database: stores job state
- Work queue → Application database: stores queue state
- Safe file transfer → Working folders: reads source files
- Safe file transfer → Archive volumes: writes archive copies
- Den and yard catalogs → Archive volumes: maintains local catalogs
