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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/docs/guides/tools/dam/dam-usage.md +261 -471
- data/lib/appydave/tools/bank_reconciliation/_doc.md +36 -0
- data/lib/appydave/tools/bank_reconciliation/clean/clean_transactions.rb +159 -0
- data/lib/appydave/tools/bank_reconciliation/clean/mapper.rb +133 -0
- data/lib/appydave/tools/bank_reconciliation/clean/read_transactions.rb +258 -0
- data/lib/appydave/tools/bank_reconciliation/models/transaction.rb +158 -0
- data/lib/appydave/tools/configuration/models/bank_reconciliation_config.rb +152 -0
- data/lib/appydave/tools/version.rb +1 -1
- data/lib/appydave/tools.rb +7 -0
- data/package.json +1 -1
- metadata +22 -2
|
@@ -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
|
|
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
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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 [
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
215
|
-
|
|
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
|
-
#
|
|
248
|
-
dam
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
367
|
-
dam s3-cleanup-remote appydave b65 --
|
|
242
|
+
dam s3-cleanup-remote appydave b65 --dry-run # Preview
|
|
243
|
+
dam s3-cleanup-remote appydave b65 --force # Execute
|
|
244
|
+
```
|
|
368
245
|
|
|
369
|
-
|
|
370
|
-
|
|
246
|
+
#### `dam s3-cleanup-local [brand] [project] [--dry-run] [--force]`
|
|
247
|
+
Delete local `s3-staging/` files for a project.
|
|
371
248
|
|
|
372
|
-
|
|
373
|
-
dam s3-cleanup-
|
|
249
|
+
```bash
|
|
250
|
+
dam s3-cleanup-local appydave b65 --dry-run
|
|
251
|
+
dam s3-cleanup-local appydave b65 --force
|
|
374
252
|
```
|
|
375
253
|
|
|
376
|
-
|
|
254
|
+
#### `dam s3-discover [brand] [project] [--shareable]`
|
|
255
|
+
List files currently in S3 for a project.
|
|
377
256
|
|
|
378
|
-
|
|
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-
|
|
381
|
-
|
|
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
|
-
|
|
385
|
-
dam s3-
|
|
266
|
+
dam s3-share appydave b65 intro.mp4
|
|
267
|
+
dam s3-share appydave b65 intro.mp4 --expires 3d --download
|
|
268
|
+
```
|
|
386
269
|
|
|
387
|
-
|
|
388
|
-
dam s3-cleanup-local appydave b65
|
|
270
|
+
### Archive & SSD Commands
|
|
389
271
|
|
|
390
|
-
|
|
391
|
-
|
|
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
|
-
|
|
281
|
+
Verifies SSD is mounted before archiving. Shows size before copying.
|
|
395
282
|
|
|
396
|
-
|
|
283
|
+
#### `dam sync-ssd [brand] [--dry-run]`
|
|
284
|
+
Restore light files (subtitles, images, docs) from SSD to local for archived projects.
|
|
397
285
|
|
|
398
|
-
|
|
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
|
-
#
|
|
403
|
-
dam
|
|
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
|
|
410
|
-
-
|
|
411
|
-
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
437
|
-
Archive completed project to SSD backup location.
|
|
333
|
+
### Git Repository Commands
|
|
438
334
|
|
|
335
|
+
#### `dam repo-status [brand] [--all]`
|
|
439
336
|
```bash
|
|
440
|
-
|
|
441
|
-
dam
|
|
337
|
+
dam repo-status appydave
|
|
338
|
+
dam repo-status --all
|
|
339
|
+
```
|
|
442
340
|
|
|
443
|
-
|
|
444
|
-
|
|
341
|
+
#### `dam repo-sync [brand] [--all]`
|
|
342
|
+
Pull git updates. Skips brands with uncommitted changes.
|
|
445
343
|
|
|
446
|
-
|
|
447
|
-
dam
|
|
344
|
+
```bash
|
|
345
|
+
dam repo-sync appydave
|
|
346
|
+
dam repo-sync --all
|
|
448
347
|
```
|
|
449
348
|
|
|
450
|
-
|
|
451
|
-
|
|
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
|
-
|
|
459
|
-
|
|
352
|
+
```bash
|
|
353
|
+
dam repo-push appydave
|
|
354
|
+
dam repo-push appydave b65
|
|
355
|
+
```
|
|
460
356
|
|
|
461
|
-
|
|
357
|
+
### Help
|
|
462
358
|
|
|
463
359
|
```bash
|
|
464
|
-
#
|
|
465
|
-
dam
|
|
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
|
-
|
|
468
|
-
dam sync-ssd appydave --dry-run
|
|
366
|
+
---
|
|
469
367
|
|
|
470
|
-
|
|
471
|
-
dam sync-ssd voz
|
|
472
|
-
```
|
|
368
|
+
## Archive Range Pattern
|
|
473
369
|
|
|
474
|
-
**
|
|
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
|
-
**
|
|
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
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
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
|
-
|
|
512
|
-
|
|
513
|
-
#
|
|
514
|
-
dam s3-
|
|
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:
|
|
427
|
+
### Example 2: Cleanup After Project Completion
|
|
527
428
|
|
|
528
429
|
```bash
|
|
529
|
-
|
|
530
|
-
dam
|
|
430
|
+
dam archive appydave b63 --dry-run # Preview
|
|
431
|
+
dam archive appydave b63 # Copy to SSD
|
|
531
432
|
|
|
532
|
-
#
|
|
533
|
-
dam
|
|
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:
|
|
437
|
+
### Example 3: Restore Light Files from Cold Storage
|
|
537
438
|
|
|
538
439
|
```bash
|
|
539
|
-
#
|
|
540
|
-
dam
|
|
541
|
-
|
|
542
|
-
#
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
606
|
-
```bash
|
|
607
|
-
# Both are equivalent
|
|
608
|
-
dam list appydave
|
|
609
|
-
dam list v-appydave
|
|
494
|
+
## Command Safety Reference
|
|
610
495
|
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
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
|
-
### "
|
|
512
|
+
### "video-projects-root not configured"
|
|
621
513
|
|
|
622
|
-
**Solution:**
|
|
623
514
|
```bash
|
|
624
|
-
|
|
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
|
-
#
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
540
|
+
### "SSD not mounted"
|
|
677
541
|
|
|
678
|
-
**Solution:** If you need to force re-upload, delete from S3 first:
|
|
679
542
|
```bash
|
|
680
|
-
dam
|
|
681
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
772
|
-
|
|
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
|
-
|
|
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
|
-
**
|
|
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)
|