appydave-tools 0.85.0 → 0.86.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,6 +8,7 @@
8
8
  - [Installation](#installation)
9
9
  - [Configuration](#configuration)
10
10
  - [Commands](#commands)
11
+ - [Archive Range Pattern](#archive-range-pattern)
11
12
  - [Examples](#examples)
12
13
  - [Workflows](#workflows)
13
14
  - [Troubleshooting](#troubleshooting)
@@ -20,9 +21,6 @@
20
21
  # Install appydave-tools gem
21
22
  gem install appydave-tools
22
23
 
23
- # Initialize configuration
24
- dam init
25
-
26
24
  # List available brands
27
25
  dam list
28
26
 
@@ -49,147 +47,115 @@ dam s3-status appydave b65
49
47
  gem install appydave-tools
50
48
  ```
51
49
 
52
- ### Initialize Configuration
53
-
54
- ```bash
55
- dam init
56
- ```
57
-
58
- This creates `~/.dam-config` pointing to your video projects directory.
59
-
60
50
  ### AWS CLI Setup
61
51
 
62
- DAM uses the AWS CLI for S3 operations. Install and configure:
52
+ DAM uses named AWS profiles for S3 operations. Install and configure:
63
53
 
64
54
  ```bash
65
55
  # Install AWS CLI (macOS)
66
56
  brew install awscli
67
57
 
68
- # Configure AWS credentials (if not using .video-tools.env)
69
- aws configure
58
+ # Configure a named profile (matching brands.json aws.profile)
59
+ aws configure --profile david-appydave
70
60
  ```
71
61
 
72
62
  ---
73
63
 
74
64
  ## Configuration
75
65
 
76
- ### System Configuration (`~/.dam-config`)
77
-
78
- Created by `dam init`:
79
-
80
- ```bash
81
- VIDEO_PROJECTS_ROOT=/Users/yourname/dev/video-projects
82
- ```
83
-
84
- ### Brand Configuration (`.video-tools.env`)
85
-
86
- Each brand directory contains a `.video-tools.env` file:
87
-
88
- ```bash
89
- # AWS Configuration
90
- AWS_ACCESS_KEY_ID=AKIA...
91
- AWS_SECRET_ACCESS_KEY=...
92
- AWS_REGION=ap-southeast-1
93
- S3_BUCKET=your-bucket-name
94
- S3_STAGING_PREFIX=staging/v-appydave/
95
-
96
- # SSD Backup Path
97
- SSD_BASE=/Volumes/T7/youtube-PUBLISHED/appydave
66
+ DAM is configured via two JSON files in `~/.config/appydave/`:
67
+
68
+ ### System Settings (`~/.config/appydave/settings.json`)
69
+
70
+ ```json
71
+ {
72
+ "video-projects-root": "/Users/yourname/dev/video-projects",
73
+ "ecamm-recording-folder": "/Users/yourname/ecamm",
74
+ "download-folder": "/Users/yourname/Downloads",
75
+ "download-image-folder": "/Users/yourname/Downloads/images",
76
+ "current_user": "david",
77
+ "aliases-output-path": "~/.oh-my-zsh/custom/aliases-jump.zsh"
78
+ }
79
+ ```
80
+
81
+ The `video-projects-root` key is required — it points to the root containing all brand folders (`v-appydave/`, `v-voz/`, etc.).
82
+
83
+ ### Brands Config (`~/.config/appydave/brands.json`)
84
+
85
+ Defines each brand's AWS settings, storage paths, team members, and workflow type:
86
+
87
+ ```json
88
+ {
89
+ "brands": {
90
+ "appydave": {
91
+ "name": "AppyDave",
92
+ "shortcut": "ad",
93
+ "type": "owned",
94
+ "youtube_channels": ["appydave"],
95
+ "team": ["david", "jan"],
96
+ "git_remote": "git@github.com:appydave-video-projects/v-appydave.git",
97
+ "locations": {
98
+ "video_projects": "/Users/yourname/dev/video-projects/v-appydave",
99
+ "ssd_backup": "/Volumes/T7/youtube-PUBLISHED/appydave"
100
+ },
101
+ "aws": {
102
+ "profile": "david-appydave",
103
+ "region": "ap-southeast-1",
104
+ "s3_bucket": "appydave-video-projects",
105
+ "s3_prefix": "staging/v-appydave/"
106
+ },
107
+ "settings": {
108
+ "s3_cleanup_days": 90
109
+ }
110
+ }
111
+ },
112
+ "users": {
113
+ "david": {
114
+ "name": "David Cruwys",
115
+ "email": "david@appydave.com",
116
+ "role": "owner",
117
+ "default_aws_profile": "david-appydave"
118
+ }
119
+ }
120
+ }
121
+ ```
122
+
123
+ To create or edit these files:
124
+
125
+ ```bash
126
+ ad_config -c # Create missing config files (safe — won't overwrite)
127
+ ad_config -e # Open configs in VS Code
128
+ ad_config -l # List all config locations
98
129
  ```
99
130
 
100
- **Example template**: See `v-shared/video-asset-tools/.env.example` in your video-projects folder.
101
-
102
131
  ---
103
132
 
104
133
  ## Commands
105
134
 
106
- ### Initialization & Help
107
-
108
- #### `dam init`
109
- Initialize DAM configuration.
110
-
111
- ```bash
112
- dam init
113
- ```
114
-
115
- #### `dam help [command]`
116
- Show help information.
117
-
118
- ```bash
119
- dam help # Overview
120
- dam help s3-up # Command-specific help
121
- dam help brands # List available brands
122
- dam help workflows # Explain FliVideo vs Storyline
123
- ```
124
-
125
135
  ### Project Discovery
126
136
 
127
- #### `dam list [--summary] [brand] [pattern]`
137
+ #### `dam list [brand] [pattern]`
128
138
  List brands and projects.
129
139
 
130
- **Mode 1: Brands only (clean list)**
131
140
  ```bash
132
- dam list
133
- # Output: Brands: appydave, aitldr, joy, kiros, ss, voz
134
- ```
135
-
136
- **Mode 2: Brands with project counts (summary)**
137
- ```bash
138
- dam list --summary
139
- # Output:
140
- # appydave: 27 projects
141
- # voz: 3 projects
142
- # aitldr: 2 projects
143
- ```
144
-
145
- **Mode 3: Specific brand's projects**
146
- ```bash
147
- dam list appydave
148
- # Output: Lists all AppyDave projects
149
- ```
150
-
151
- **Mode 3b: Pattern matching**
152
- ```bash
153
- dam list appydave 'b6*'
154
- # Output: Lists b60, b61, b62...b69 projects
141
+ dam list # List all configured brands
142
+ dam list appydave # List all projects for a brand
143
+ dam list appydave 'b6*' # Pattern matching (b60–b69)
144
+ dam list appydave 'b[1-5]*' # All b10–b59 projects
155
145
  ```
156
146
 
157
147
  ### Status & Monitoring
158
148
 
159
149
  #### `dam status [brand] [project]`
160
- Show unified status for project or brand (local, S3, SSD, git).
150
+ Show unified status for a project or brand (local, S3, SSD, git).
161
151
 
162
- **Brand status:**
163
152
  ```bash
164
- dam status appydave
153
+ dam status appydave # Brand-level summary
154
+ dam status appydave b65 # Project-level detail
155
+ dam status # Auto-detect from current directory
165
156
  ```
166
157
 
167
- **Output:**
168
- ```
169
- 📊 Brand Status: v-appydave
170
- 📡 Git Remote: git@github.com:klueless-io/v-appydave.git
171
-
172
- 🌿 Branch: main
173
- 📡 Remote: git@github.com:klueless-io/v-appydave.git
174
- ✓ Working directory clean
175
- ✓ Up to date with remote
176
-
177
- 📋 Manifest Summary:
178
- Total projects: 114
179
- Local: 74
180
- S3 staging: 12
181
- SSD backup: 67
182
-
183
- Storyline projects: 3
184
- FliVideo projects: 111
185
- ```
186
-
187
- **Project status:**
188
- ```bash
189
- dam status appydave b65
190
- ```
191
-
192
- **Output:**
158
+ **Output (project level):**
193
159
  ```
194
160
  📊 Status: v-appydave/b65-guy-monroe-marketing-plan
195
161
 
@@ -206,132 +172,42 @@ Storage:
206
172
 
207
173
  Git:
208
174
  🌿 Branch: main
209
- 📡 Remote: git@github.com:klueless-io/v-appydave.git
175
+ 📡 Remote: git@github.com:appydave-video-projects/v-appydave.git
210
176
  ↕️ Status: Clean working directory
211
177
  🔄 Sync: Up to date
212
178
  ```
213
179
 
214
- **Auto-detect from PWD:**
215
- ```bash
216
- cd ~/dev/video-projects/v-appydave/b65-project
217
- dam status
218
- ```
219
-
220
- ### Git Repository Commands
221
-
222
- #### `dam repo-status [brand] [--all]`
223
- Check git status for brand repositories.
224
-
225
- ```bash
226
- # Single brand
227
- dam repo-status appydave
228
-
229
- # All brands
230
- dam repo-status --all
231
- ```
232
-
233
- **Output:**
234
- ```
235
- 🔍 Git Status: v-appydave
236
-
237
- 🌿 Branch: main
238
- 📡 Remote: git@github.com:klueless-io/v-appydave.git
239
- ✓ Working directory clean
240
- ✓ Up to date with remote
241
- ```
242
-
243
- #### `dam repo-sync [brand] [--all]`
244
- Pull updates for brand repositories.
180
+ #### `dam ssd-status [brand] [--all]`
181
+ Check whether the SSD is mounted and available for each brand.
245
182
 
246
183
  ```bash
247
- # Single brand
248
- dam repo-sync appydave
249
-
250
- # All brands
251
- dam repo-sync --all
252
- ```
253
-
254
- **Output:**
255
- ```
256
- 🔄 Syncing: v-appydave
257
-
258
- ✓ Already up to date
184
+ dam ssd-status appydave # Check one brand's SSD
185
+ dam ssd-status --all # Check all brands
259
186
  ```
260
187
 
261
- **Safety features:**
262
- - Skips brands with uncommitted changes (prevents conflicts)
263
- - Shows summary when syncing multiple brands
264
-
265
- #### `dam repo-push [brand] [project]`
266
- Push changes for brand repository.
267
-
268
- ```bash
269
- # Push all changes
270
- dam repo-push appydave
271
-
272
- # Validate project exists before push
273
- dam repo-push appydave b65
274
- ```
275
-
276
- **Output:**
277
- ```
278
- 📤 Pushing: v-appydave
279
-
280
- ✓ Project validated: b65-guy-monroe-marketing-plan
281
-
282
- 📤 Pushing 2 commit(s)...
283
-
284
- ✓ Push successful
285
-
286
- main -> main
287
- ```
288
-
289
- **Safety features:**
290
- - Warns if uncommitted changes detected
291
- - Optional project validation against manifest
292
- - Shows push summary
293
-
294
188
  ### S3 Sync Commands
295
189
 
296
190
  #### `dam s3-up [brand] [project] [--dry-run]`
297
191
  Upload files from local `s3-staging/` to S3.
298
192
 
299
193
  ```bash
300
- # With explicit args
301
- dam s3-up appydave b65
302
-
303
- # Auto-detect from current directory
304
- cd ~/dev/video-projects/v-appydave/b65-project
305
- dam s3-up
306
-
307
- # Dry-run (preview without uploading)
308
- dam s3-up appydave b65 --dry-run
194
+ dam s3-up appydave b65 # Upload
195
+ dam s3-up appydave b65 --dry-run # Preview without uploading
196
+ dam s3-up # Auto-detect from current directory
309
197
  ```
310
198
 
311
- **What it does:**
312
- - Uploads files from `project/s3-staging/` to S3
313
- - Skips files already in sync (MD5 comparison)
314
- - Shows progress and summary
199
+ Skips files already in sync (MD5 comparison). Shows progress and summary.
315
200
 
316
201
  #### `dam s3-down [brand] [project] [--dry-run]`
317
202
  Download files from S3 to local `s3-staging/`.
318
203
 
319
204
  ```bash
320
- # With explicit args
321
205
  dam s3-down appydave b65
322
-
323
- # Auto-detect
324
- cd ~/dev/video-projects/v-appydave/b65-project
325
- dam s3-down
326
-
327
- # Dry-run
328
206
  dam s3-down voz boy-baker --dry-run
207
+ dam s3-down # Auto-detect
329
208
  ```
330
209
 
331
- **What it does:**
332
- - Downloads files from S3 to `project/s3-staging/`
333
- - Skips files already in sync
334
- - Creates `s3-staging/` if it doesn't exist
210
+ Creates `s3-staging/` if it doesn't exist. Skips files already in sync.
335
211
 
336
212
  #### `dam s3-status [brand] [project]`
337
213
  Check sync status between local and S3.
@@ -363,57 +239,78 @@ Status:
363
239
  Delete S3 staging files for a project.
364
240
 
365
241
  ```bash
366
- # Preview what would be deleted
367
- dam s3-cleanup-remote appydave b65 --dry-run
242
+ dam s3-cleanup-remote appydave b65 --dry-run # Preview
243
+ dam s3-cleanup-remote appydave b65 --force # Execute
244
+ ```
368
245
 
369
- # Delete with confirmation prompt
370
- dam s3-cleanup-remote appydave b65
246
+ #### `dam s3-cleanup-local [brand] [project] [--dry-run] [--force]`
247
+ Delete local `s3-staging/` files for a project.
371
248
 
372
- # Delete without confirmation
373
- dam s3-cleanup-remote appydave b65 --force
249
+ ```bash
250
+ dam s3-cleanup-local appydave b65 --dry-run
251
+ dam s3-cleanup-local appydave b65 --force
374
252
  ```
375
253
 
376
- **Warning:** This deletes files from S3. Use `--dry-run` first!
254
+ #### `dam s3-discover [brand] [project] [--shareable]`
255
+ List files currently in S3 for a project.
377
256
 
378
- **Note:** The old `dam s3-cleanup` command still works but shows a deprecation warning.
257
+ ```bash
258
+ dam s3-discover appydave b65 # List S3 files
259
+ dam s3-discover appydave b65 --shareable # Generate pre-signed URLs
260
+ ```
379
261
 
380
- #### `dam s3-cleanup-local [brand] [project] [--dry-run] [--force]`
381
- Delete local s3-staging files for a project.
262
+ #### `dam s3-share [brand] [project] [file] [--expires 7d] [--download]`
263
+ Generate a time-limited pre-signed URL for sharing a specific S3 file.
382
264
 
383
265
  ```bash
384
- # Preview what would be deleted
385
- dam s3-cleanup-local appydave b65 --dry-run
266
+ dam s3-share appydave b65 intro.mp4
267
+ dam s3-share appydave b65 intro.mp4 --expires 3d --download
268
+ ```
386
269
 
387
- # Delete with confirmation prompt
388
- dam s3-cleanup-local appydave b65
270
+ ### Archive & SSD Commands
389
271
 
390
- # Delete without confirmation
391
- dam s3-cleanup-local appydave b65 --force
272
+ #### `dam archive [brand] [project] [--dry-run] [--force]`
273
+ Archive completed project to SSD backup location.
274
+
275
+ ```bash
276
+ dam archive appydave b63 --dry-run # Preview
277
+ dam archive appydave b63 # Copy to SSD, keep local
278
+ dam archive appydave b63 --force # Copy to SSD, delete local (frees disk)
392
279
  ```
393
280
 
394
- **Warning:** This deletes local files in the s3-staging directory. Use `--dry-run` first!
281
+ Verifies SSD is mounted before archiving. Shows size before copying.
395
282
 
396
- ### Project Management
283
+ #### `dam sync-ssd [brand] [--dry-run]`
284
+ Restore light files (subtitles, images, docs) from SSD to local for archived projects.
397
285
 
398
- #### `dam manifest [brand] [--all]`
399
- Generate project manifest for a brand (tracks projects across local + SSD storage).
286
+ **Important:** Does NOT sync heavy video files (MP4, MOV, etc.).
400
287
 
401
288
  ```bash
402
- # Generate manifest for specific brand
403
- dam manifest appydave
404
-
405
- # Generate manifests for all configured brands
406
- dam manifest --all
289
+ dam sync-ssd appydave # Sync all AppyDave projects from SSD
290
+ dam sync-ssd appydave --dry-run # Preview
291
+ dam sync-ssd voz
407
292
  ```
408
293
 
409
- **What it does:**
410
- - Scans local and SSD storage locations
411
- - Tracks project distribution (local only, SSD only, or both)
412
- - Calculates disk usage statistics
413
- - Validates project ID formats
414
- - Outputs `projects.json` in brand directory
294
+ **What it syncs:**
295
+ - Includes: `.srt`, `.vtt`, `.txt`, `.md`, `.jpg`, `.jpeg`, `.png`, `.webp`, `.json`, `.yml`
296
+ - Excludes: `.mp4`, `.mov`, `.avi`, `.mkv`, `.webm`
297
+
298
+ **Requirements:**
299
+ - `projects.json` manifest must exist (`dam manifest <brand>` first)
300
+ - SSD must be mounted
301
+
302
+ Restored files are placed in `archived/{range}/{project}/` — see [Archive Range Pattern](#archive-range-pattern).
415
303
 
416
- **Example output:**
304
+ #### `dam manifest [brand] [--all] [--verbose]`
305
+ Generate `projects.json` for a brand — tracks all projects across local + SSD storage.
306
+
307
+ ```bash
308
+ dam manifest appydave # Generate for one brand
309
+ dam manifest --all # Generate for all brands
310
+ dam manifest appydave --verbose # Show validation warnings
311
+ ```
312
+
313
+ **Output example:**
417
314
  ```
418
315
  📊 Generating manifest for appydave...
419
316
 
@@ -433,61 +330,76 @@ Disk Usage:
433
330
  ✅ All validations passed!
434
331
  ```
435
332
 
436
- #### `dam archive [brand] [project] [--dry-run] [--force]`
437
- Archive completed project to SSD backup location.
333
+ ### Git Repository Commands
438
334
 
335
+ #### `dam repo-status [brand] [--all]`
439
336
  ```bash
440
- # Preview archive operation
441
- dam archive appydave b63 --dry-run
337
+ dam repo-status appydave
338
+ dam repo-status --all
339
+ ```
442
340
 
443
- # Copy to SSD (leaves local copy intact)
444
- dam archive appydave b63
341
+ #### `dam repo-sync [brand] [--all]`
342
+ Pull git updates. Skips brands with uncommitted changes.
445
343
 
446
- # Copy to SSD and delete local copy
447
- dam archive appydave b63 --force
344
+ ```bash
345
+ dam repo-sync appydave
346
+ dam repo-sync --all
448
347
  ```
449
348
 
450
- **What it does:**
451
- - Copies entire project directory to SSD backup location
452
- - Verifies SSD is mounted before archiving
453
- - Shows project size before copying
454
- - Optional: Delete local copy after successful archive (--force)
455
-
456
- **Configuration:** Uses `ssd_backup` location from `brands.json` config.
349
+ #### `dam repo-push [brand] [project]`
350
+ Push changes. Optional project validation against manifest.
457
351
 
458
- #### `dam sync-ssd [brand] [--dry-run]`
459
- Restore light files (subtitles, images, docs) from SSD to local for archived projects.
352
+ ```bash
353
+ dam repo-push appydave
354
+ dam repo-push appydave b65
355
+ ```
460
356
 
461
- **Important:** Does NOT sync heavy video files (MP4, MOV, etc.)
357
+ ### Help
462
358
 
463
359
  ```bash
464
- # Sync all AppyDave projects from SSD
465
- dam sync-ssd appydave
360
+ dam help # Overview
361
+ dam help s3-up # Command-specific help
362
+ dam help brands # List available brands
363
+ dam help workflows # FliVideo vs Storyline explanation
364
+ ```
466
365
 
467
- # Preview what would be synced
468
- dam sync-ssd appydave --dry-run
366
+ ---
469
367
 
470
- # Sync VOZ projects
471
- dam sync-ssd voz
472
- ```
368
+ ## Archive Range Pattern
473
369
 
474
- **What it does:**
475
- - Reads `projects.json` manifest to find projects on SSD
476
- - Syncs ALL eligible projects for the brand (not one at a time)
477
- - Only copies light files: `.srt`, `.vtt`, `.jpg`, `.png`, `.md`, `.txt`, `.json`, `.yml`
478
- - Excludes heavy files: `.mp4`, `.mov`, `.avi`, `.mkv`, `.webm`
479
- - Creates `archived/{range}/{project}/` directory structure
480
- - Skips files already synced (size comparison)
370
+ When projects are archived to SSD or restored locally via `sync-ssd`, they are organized into **50-number range folders** with letter prefixes.
481
371
 
482
- **Requirements:**
483
- - Must have `projects.json` manifest (run: `dam manifest <brand>` first)
484
- - SSD must be mounted
485
- - Projects must exist on SSD
372
+ **Rule:** `(number / 50) * 50` → range start; range end = start + 49
486
373
 
487
- **Use Cases:**
488
- - Restore subtitles and images without huge video files
489
- - Access project documentation from archived projects
490
- - Prepare project for re-editing (get metadata, then manually copy videos if needed)
374
+ | Project ID | Range Folder |
375
+ |------------|-------------|
376
+ | `b00`–`b49` | `b00-b49` |
377
+ | `b50`–`b99` | `b50-b99` |
378
+ | `a00`–`a49` | `a00-a49` |
379
+ | `a50`–`a99` | `a50-a99` |
380
+ | Non-matching | `000-099` (legacy fallback) |
381
+
382
+ **SSD structure:**
383
+ ```
384
+ /Volumes/T7/youtube-PUBLISHED/appydave/
385
+ ├── b00-b49/
386
+ │ └── b40-some-project/
387
+ └── b50-b99/
388
+ └── b65-guy-monroe-marketing-plan/
389
+ ```
390
+
391
+ **Local restored structure (after `sync-ssd`):**
392
+ ```
393
+ ~/dev/video-projects/v-appydave/
394
+ ├── b70-active-project/ ← flat = still active
395
+ └── archived/
396
+ ├── b00-b49/
397
+ │ └── b40-some-project/ ← light files only
398
+ └── b50-b99/
399
+ └── b65-guy-monroe.../ ← light files only (no .mp4/.mov)
400
+ ```
401
+
402
+ The manifest distinguishes between `flat` (active) and `archived` (restored) local structure.
491
403
 
492
404
  ---
493
405
 
@@ -498,60 +410,44 @@ dam sync-ssd voz
498
410
  **David (uploads to S3):**
499
411
  ```bash
500
412
  cd ~/dev/video-projects/v-appydave/b65-guy-monroe
501
- # Place files in s3-staging/
502
413
  mkdir -p s3-staging
503
414
  cp ~/Downloads/intro-footage.mp4 s3-staging/
504
415
 
505
- # Upload to S3
506
416
  dam s3-up appydave b65
507
417
  ```
508
418
 
509
419
  **Jan (downloads from S3):**
510
420
  ```bash
511
- cd ~/dev/video-projects/v-appydave/b65-guy-monroe
512
-
513
- # Check what's available
514
- dam s3-status appydave b65
515
-
516
- # Download files
517
- dam s3-down appydave b65
518
-
519
- # Edit files in s3-staging/
520
- # ...
521
-
522
- # Upload edited files back
523
- dam s3-up appydave b65
421
+ dam s3-status appydave b65 # Check what's available
422
+ dam s3-down appydave b65 # Download files
423
+ # ... edit files in s3-staging/ ...
424
+ dam s3-up appydave b65 # Upload edited files back
524
425
  ```
525
426
 
526
- ### Example 2: Pattern Matching
427
+ ### Example 2: Cleanup After Project Completion
527
428
 
528
429
  ```bash
529
- # List all b60-series projects
530
- dam list appydave 'b6*'
430
+ dam archive appydave b63 --dry-run # Preview
431
+ dam archive appydave b63 # Copy to SSD
531
432
 
532
- # List all completed projects
533
- dam list appydave 'b[1-5]*'
433
+ dam s3-cleanup-remote appydave b63 --dry-run # Preview S3 cleanup
434
+ dam s3-cleanup-remote appydave b63 --force # Delete from S3
534
435
  ```
535
436
 
536
- ### Example 3: Cleanup After Project Completion
437
+ ### Example 3: Restore Light Files from Cold Storage
537
438
 
538
439
  ```bash
539
- # Archive to SSD
540
- dam archive appydave b63
541
-
542
- # Verify sync status
543
- dam s3-status appydave b63
544
-
545
- # Clean up S3 (saves storage costs)
546
- dam s3-cleanup-remote appydave b63 --dry-run # Preview
547
- dam s3-cleanup-remote appydave b63 --force # Execute
440
+ dam manifest appydave # Refresh manifest first
441
+ dam ssd-status appydave # Confirm SSD is mounted
442
+ dam sync-ssd appydave --dry-run # Preview what will be restored
443
+ dam sync-ssd appydave # Restore subtitles, images, docs
548
444
  ```
549
445
 
550
446
  ---
551
447
 
552
448
  ## Workflows
553
449
 
554
- ### FliVideo Workflow (AppyDave Brand)
450
+ ### FliVideo Workflow (AppyDave, AITLDR)
555
451
 
556
452
  **Pattern:** Sequential, chapter-based recording
557
453
 
@@ -559,7 +455,7 @@ dam s3-cleanup-remote appydave b63 --force # Execute
559
455
 
560
456
  **Short Name Support:**
561
457
  ```bash
562
- dam s3-up appydave b65 # Expands to full project name
458
+ dam s3-up appydave b65 # Expands to full project name
563
459
  ```
564
460
 
565
461
  **Typical Flow:**
@@ -567,9 +463,9 @@ dam s3-up appydave b65 # Expands to full project name
567
463
  2. Upload raw footage to S3 for collaboration
568
464
  3. Download edited chapters from S3
569
465
  4. Publish final video
570
- 5. Archive to SSD
466
+ 5. Archive to SSD (`dam archive appydave b65 --force`)
571
467
 
572
- ### Storyline Workflow (VOZ, AITLDR Brands)
468
+ ### Storyline Workflow (VOZ, Kiros)
573
469
 
574
470
  **Pattern:** Script-first, narrative-driven content
575
471
 
@@ -577,213 +473,107 @@ dam s3-up appydave b65 # Expands to full project name
577
473
 
578
474
  **Full Name Required:**
579
475
  ```bash
580
- dam s3-up voz boy-baker # Use full project name
476
+ dam s3-up voz boy-baker # Full project name required
581
477
  ```
582
478
 
583
- **Typical Flow:**
584
- 1. Write script
585
- 2. Record A-roll (main footage)
586
- 3. Upload raw footage to S3
587
- 4. Download edited version from S3
588
- 5. Publish and archive
589
-
590
479
  ---
591
480
 
592
481
  ## Brand Shortcuts
593
482
 
594
- DAM supports brand shortcuts for faster typing:
483
+ | Shortcut | Full Name | Type |
484
+ |----------|-----------|------|
485
+ | `appydave` (or `ad`) | `v-appydave` | owned |
486
+ | `voz` | `v-voz` | client |
487
+ | `aitldr` | `v-aitldr` | owned |
488
+ | `kiros` | `v-kiros` | client |
489
+ | `joy` | `v-beauty-and-joy` | owned |
490
+ | `ss` | `v-supportsignal` | client |
595
491
 
596
- | Shortcut | Full Name | Purpose |
597
- |----------|-----------|---------|
598
- | `appydave` | `v-appydave` | AppyDave brand videos |
599
- | `voz` | `v-voz` | VOZ client projects |
600
- | `aitldr` | `v-aitldr` | AITLDR brand videos |
601
- | `kiros` | `v-kiros` | Kiros client projects |
602
- | `joy` | `v-beauty-and-joy` | Beauty & Joy brand |
603
- | `ss` | `v-supportsignal` | SupportSignal client |
492
+ ---
604
493
 
605
- **Usage:**
606
- ```bash
607
- # Both are equivalent
608
- dam list appydave
609
- dam list v-appydave
494
+ ## Command Safety Reference
610
495
 
611
- # Both are equivalent
612
- dam s3-up joy project-name
613
- dam s3-up v-beauty-and-joy project-name
614
- ```
496
+ | Command | Dry-Run | Force Required | Action |
497
+ |---------|---------|----------------|--------|
498
+ | `s3-up` | ✅ | No | Upload to S3 |
499
+ | `s3-down` | ✅ | No | Download from S3 |
500
+ | `s3-cleanup-remote` | ✅ | Yes | Delete from S3 |
501
+ | `s3-cleanup-local` | ✅ | No | Delete local staging |
502
+ | `archive` | ✅ | Optional (deletes local) | Copy to SSD |
503
+ | `sync-ssd` | ✅ | No | Restore light files from SSD |
504
+ | `list` | — | — | Read-only |
505
+ | `manifest` | — | — | Generates JSON |
506
+ | `s3-status` | — | — | Read-only |
615
507
 
616
508
  ---
617
509
 
618
510
  ## Troubleshooting
619
511
 
620
- ### "VIDEO_PROJECTS_ROOT not configured"
512
+ ### "video-projects-root not configured"
621
513
 
622
- **Solution:**
623
514
  ```bash
624
- dam init
515
+ ad_config -e # Edit settings.json and add video-projects-root
625
516
  ```
626
517
 
627
518
  ### "Brand directory not found"
628
519
 
629
- **Check available brands:**
630
520
  ```bash
631
- dam list
632
- ```
633
-
634
- **Verify config:**
635
- ```bash
636
- cat ~/.dam-config
521
+ dam list # See configured brands
522
+ ad_config -p brands # Print brands.json
637
523
  ```
638
524
 
639
525
  ### "No project found matching 'b65'"
640
526
 
641
- **Possible causes:**
642
- 1. Project doesn't exist in brand directory
643
- 2. Wrong brand specified
644
-
645
- **Debug:**
646
527
  ```bash
647
- # List all projects
648
- dam list appydave
649
-
650
- # Use full project name
651
- dam s3-up appydave b65-full-project-name
528
+ dam list appydave # See all projects for brand
529
+ dam list appydave 'b6*' # Check b60–b69 range
652
530
  ```
653
531
 
654
532
  ### "AWS credentials not found"
655
533
 
656
- **Solution 1:** Add to `.video-tools.env` in brand directory
657
534
  ```bash
658
- AWS_ACCESS_KEY_ID=AKIA...
659
- AWS_SECRET_ACCESS_KEY=...
660
- AWS_REGION=ap-southeast-1
535
+ aws configure --profile david-appydave # Set up named profile
661
536
  ```
662
537
 
663
- **Solution 2:** Configure AWS CLI
664
- ```bash
665
- aws configure
666
- ```
667
-
668
- ### "Could not detect brand and project from current directory"
669
-
670
- **Solution:** Either:
671
- 1. Provide explicit args: `dam s3-up appydave b65`
672
- 2. Ensure you're in project directory: `cd v-appydave/b65-project`
673
-
674
- ### Files Not Syncing (Always "Skipped")
538
+ Profile name must match `aws.profile` in `brands.json`.
675
539
 
676
- **Cause:** Files haven't changed (MD5 hash matches)
540
+ ### "SSD not mounted"
677
541
 
678
- **Solution:** If you need to force re-upload, delete from S3 first:
679
542
  ```bash
680
- dam s3-cleanup appydave b65 --force
681
- dam s3-up appydave b65
543
+ dam ssd-status --all # Check all brands
544
+ # Connect the external SSD, then retry
682
545
  ```
683
546
 
684
- ---
685
-
686
- ## Advanced Usage
687
-
688
- ### Auto-Detection from PWD
689
-
690
- All S3 commands support auto-detection:
547
+ ### "projects.json not found" (sync-ssd fails)
691
548
 
692
549
  ```bash
693
- cd ~/dev/video-projects/v-appydave/b65-project
694
-
695
- # These auto-detect brand and project
696
- dam s3-up
697
- dam s3-down
698
- dam s3-status
550
+ dam manifest appydave # Generate manifest first
699
551
  ```
700
552
 
701
- ### Command Safety Features
702
-
703
- #### Dry-Run Support
704
-
705
- All filesystem-modifying commands support `--dry-run` to preview changes before execution:
706
-
707
- | Command | Dry-Run Support | Force Flag Required | What It Previews |
708
- |---------|----------------|---------------------|------------------|
709
- | **s3-up** | ✅ Yes | No | Files to upload to S3 |
710
- | **s3-down** | ✅ Yes | No | Files to download from S3 |
711
- | **s3-cleanup-remote** | ✅ Yes | **Yes (`--force`)** | S3 files to delete |
712
- | **s3-cleanup-local** | ✅ Yes | **Yes (`--force`)** | Local s3-staging files to delete |
713
- | **archive** | ✅ Yes | Optional (`--force` = delete local) | Project to copy to SSD |
714
- | **sync-ssd** | ✅ Yes | No | Light files to restore from SSD |
715
-
716
- #### Read-Only Commands (No Dry-Run Needed)
717
-
718
- These commands only read data and don't modify files:
719
-
720
- | Command | Type | What It Does |
721
- |---------|------|--------------|
722
- | **list** | Read-only | List brands/projects |
723
- | **manifest** | Generates JSON | Generate `projects.json` manifest |
724
- | **s3-status** | Read-only | Check sync status |
725
- | **help** | Read-only | Show help information |
726
-
727
- #### Safety Workflow Examples
553
+ ### Files Not Syncing (Always "Skipped")
728
554
 
729
- **Always preview destructive operations first:**
555
+ Files with matching MD5 are skipped. To force re-upload:
730
556
 
731
557
  ```bash
732
- # Preview S3 upload
733
- dam s3-up appydave b65 --dry-run
734
- # Review output, then execute
735
- dam s3-up appydave b65
736
-
737
- # Preview S3 cleanup (requires --force)
738
- dam s3-cleanup-remote appydave b65 --force --dry-run
739
- # Review output, then execute
740
558
  dam s3-cleanup-remote appydave b65 --force
741
-
742
- # Preview archive (with or without local deletion)
743
- dam archive appydave b63 --dry-run # Copy only
744
- dam archive appydave b63 --force --dry-run # Copy + delete local
745
- # Review output, then execute
746
- dam archive appydave b63 # Copy only
747
- dam archive appydave b63 --force # Copy + delete local
748
-
749
- # Preview SSD sync
750
- dam sync-ssd appydave --dry-run
751
- # Review output, then execute
752
- dam sync-ssd appydave
559
+ dam s3-up appydave b65
753
560
  ```
754
561
 
755
- #### Force Flag Behavior
756
-
757
- Commands requiring `--force` provide extra protection for destructive operations:
758
-
759
- - **s3-cleanup-remote**: Must use `--force` to delete S3 files (prevents accidental deletion)
760
- - **s3-cleanup-local**: Must use `--force` to delete local staging files
761
- - **archive**: Optional `--force` flag deletes local copy after successful SSD backup
762
- - Without `--force`: Copies to SSD, keeps local copy intact
763
- - With `--force`: Copies to SSD, then deletes local copy (frees disk space)
764
-
765
- ### Interactive Selection
562
+ ### "Could not detect brand and project from current directory"
766
563
 
767
- When multiple projects match short name:
564
+ Either provide explicit args or ensure you're inside the project directory:
768
565
 
769
566
  ```bash
770
567
  dam s3-up appydave b65
771
- # Output:
772
- # ⚠️ Multiple projects match 'b65':
773
- # 1. b65-first-project
774
- # 2. b65-second-project
775
- # Select project (1-2):
568
+ # or
569
+ cd ~/dev/video-projects/v-appydave/b65-project && dam s3-up
776
570
  ```
777
571
 
778
572
  ---
779
573
 
780
- ## See Also
781
-
782
- - **AWS Setup Guide:** [docs/usage/dam/aws-setup.md](./dam/aws-setup.md)
783
- - **Architecture:** [docs/usage/dam/architecture.md](./dam/architecture.md)
784
- - **Onboarding:** [docs/usage/dam/onboarding.md](./dam/onboarding.md)
785
- - **Integration Brief:** [docs/dam-integration-plan.md](../dam-integration-plan.md)
786
-
787
- ---
574
+ **Last Updated:** 2026-04-08
788
575
 
789
- **Last Updated:** 2025-11-10
576
+ **See Also:**
577
+ - [DAM Data Model](../../architecture/dam/dam-data-model.md)
578
+ - [DAM Vision](../../architecture/dam/dam-vision.md)
579
+ - [Configuration Guide](../configuration-setup.md)