veodl 1.8.3 → 1.9.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.
@@ -1,66 +1,82 @@
1
- # veo for agents
2
-
3
- veo is a command-line video downloader. Use it only for content the user is authorized to download. This guide covers the stable command flow and the difference between download state, media tracks and measured audio signal.
4
-
5
- ## Fast path
6
-
7
- ```sh
8
- veo "https://example.com/video" --dry-run --json
9
- veo "https://example.com/video" --json --output ./downloads
10
- veo inspect "./downloads/video.mp4" --check-audio --json
11
- ```
12
-
13
- Set `VEO_NO_UPDATE_CHECK=1` when a background update notice would distract a script. Use an explicit output directory to avoid depending on the agent's current working directory. `--dry-run` plans the download without saving media. It can still inspect the source and prepare backend tools on first use.
14
-
15
- ## Output and failures
16
-
17
- Download commands write **one JSON object per URL** to stdout with `--json`. Several URLs produce newline-delimited JSON, not a JSON array. Progress, summaries and errors go to stderr. A failed item can still contain saved files, especially within a playlist.
18
-
19
- Example success:
20
-
21
- ```json
22
- {"url":"https://example.com/video","status":"saved","title":"Example","files":["/downloads/Example.mp4"],"runId":"abc123"}
23
- ```
24
-
25
- Example failure:
26
-
27
- ```json
28
- {"url":"https://example.com/video","status":"failed","error":"HTTP Error 429","files":[]}
29
- ```
30
-
31
- These are abbreviated examples; fields such as timing and playlist counts may also be present. Exit code `0` means the command succeeded, `1` means at least one item failed, and `130` means cancellation. Validate both the exit code and each result's `status`; a command can fail before producing any stdout JSON. Never infer success from the presence of a file path alone.
32
-
33
- ## Inspect runs and results
34
-
35
- ```sh
36
- veo runs --json
37
- veo runs k3f9qa --json
38
- veo history --failed --limit 20 --json
39
- veo retry --last --json
40
- ```
41
-
42
- `runs` reports **active** runs, including their ID, state, options, job path and per-item progress. Completed runs disappear from this list. Download JSON and `history` retain the `runId`. `history` reports finished attempts with their outcome and saved file paths. A failed history entry may contain a `job` path, which can be passed to `veo --retry-failed "<job-path>"`; `veo retry --last` finds the newest retryable job automatically. Running jobs are excluded from `retry --last`.
43
-
44
- ## Inspect saved media and audio
45
-
46
- ```sh
47
- veo inspect "/downloads/Example.mp4" --json
48
- veo inspect "/downloads/Example.mp4" --check-audio --json
49
- veo inspect run abc123 --check-audio --json
50
- veo inspect run abc123 --search "/moved/videos" --json
51
- ```
52
-
53
- `inspect` uses local FFprobe/FFmpeg and never downloads a URL. Its JSON contains `format`, `durationSeconds`, `sizeBytes`, `streams`, `hasAudioTrack` and `hasVideoTrack`. Without `--check-audio`, `audioCheck` is `null`.
54
-
55
- With `--check-audio`, veo decodes every audio track from start to end. `audioCheck.hasSignal` is true when at least one track's peak exceeds **−60 dBFS**. `audioCheck.tracks` lists each track's `streamIndex`, `maxDbfs` and `hasSignal`; digital silence may have `maxDbfs: null` or a very low level after conversion. A present audio track does not prove audible content. This is a signal-level check, not a listening or speech-quality test. Decoding long media can take time; if FFmpeg fails, the command exits nonzero instead of reporting silence.
56
-
57
- `inspect run` reads the saved run record even after the download finishes. It checks whether each file still exists **before** probing it. If a media file was renamed, veo searches the original output tree using file identity, size and a three-part SHA-256 fingerprint. `--search` adds one more directory after a move. Missing or ambiguous matches are reported without probing a different file; missing files make the command exit with code `1`. The fingerprint lives in veo's run history, so this works across media formats without rewriting the media. Runs created before this feature do not have a persistent run record.
58
-
59
- The run record is stored in veo's per-user cache on the device that ran the download. `inspect` works on Windows, macOS, Linux and Termux with locally available FFmpeg/FFprobe; set `VEO_FFMPEG_PATH` to their directory when they are not on the normal search path. Moving only the media to another device does not transfer the run record.
60
-
61
- ## Operational notes
62
-
63
- - Run `veo doctor --offline` to check the local setup without network repair. `veo doctor fix` may install missing tools.
64
- - Use `--resume` for interrupted downloads and `--skip-existing` when repeated saves should be avoided.
65
- - `veo flush` removes temporary downloads and retry jobs; do not run it as routine maintenance in an agent workflow.
66
- - Do not call bare `veo` in an interactive terminal from automation: it opens a wizard. Use explicit URLs and flags.
1
+ # veo for agents
2
+
3
+ veo is a command-line video downloader. Use it only for content the user is authorized to download. This guide covers the stable command flow and the difference between download state, media tracks and measured audio signal.
4
+
5
+ ## Fast path
6
+
7
+ ```sh
8
+ veo "https://example.com/video" --dry-run --json
9
+ veo "https://example.com/video" --json --output ./downloads
10
+ veo inspect "./downloads/video.mp4" --check-audio --json
11
+ ```
12
+
13
+ For a page with an embedded player that the normal extractor cannot identify,
14
+ run `veo "<page-url>" --list-sources --json` and choose an `index` from the
15
+ returned `sources`. Then use `veo "<page-url>" --source <index> --dry-run --json`
16
+ before the download. Source discovery opens a temporary headless Chromium-based
17
+ browser and observes media requests after Play. It needs Chrome, Edge or Chromium,
18
+ or `VEO_BROWSER_PATH`. A found source is verified by the backend; size may be
19
+ unknown, and DRM-protected media is excluded. Source numbers are tied to the
20
+ page's current discovery run and may change later.
21
+
22
+ Use `--deep-scan --timeout 2m` with `--list-sources` to check every observed
23
+ media candidate up to a two-minute source-search deadline. The JSON result
24
+ contains `timedOut: true` if the scan stopped at the deadline; any returned
25
+ sources were verified before it stopped. A timed-out listing exits nonzero,
26
+ even if it contains partial results. The timeout applies to discovery,
27
+ not to a later download.
28
+
29
+ Set `VEO_NO_UPDATE_CHECK=1` when a background update notice would distract a script. Use an explicit output directory to avoid depending on the agent's current working directory. `--dry-run` plans the download without saving media. It can still inspect the source and prepare backend tools on first use.
30
+
31
+ ## Output and failures
32
+
33
+ Download commands write **one JSON object per URL** to stdout with `--json`. Several URLs produce newline-delimited JSON, not a JSON array. Progress, summaries and errors go to stderr. A failed item can still contain saved files, especially within a playlist.
34
+
35
+ Example success:
36
+
37
+ ```json
38
+ {"url":"https://example.com/video","status":"saved","title":"Example","files":["/downloads/Example.mp4"],"runId":"abc123"}
39
+ ```
40
+
41
+ Example failure:
42
+
43
+ ```json
44
+ {"url":"https://example.com/video","status":"failed","error":"HTTP Error 429","files":[]}
45
+ ```
46
+
47
+ These are abbreviated examples; fields such as timing and playlist counts may also be present. Exit code `0` means the command succeeded, `1` means at least one item failed, and `130` means cancellation. Validate both the exit code and each result's `status`; a command can fail before producing any stdout JSON. Never infer success from the presence of a file path alone.
48
+
49
+ ## Inspect runs and results
50
+
51
+ ```sh
52
+ veo runs --json
53
+ veo runs k3f9qa --json
54
+ veo history --failed --limit 20 --json
55
+ veo retry --last --json
56
+ ```
57
+
58
+ `runs` reports **active** runs, including their ID, state, options, job path and per-item progress. Completed runs disappear from this list. Download JSON and `history` retain the `runId`. `history` reports finished attempts with their outcome and saved file paths. A failed history entry may contain a `job` path, which can be passed to `veo --retry-failed "<job-path>"`; `veo retry --last` finds the newest retryable job automatically. Running jobs are excluded from `retry --last`.
59
+
60
+ ## Inspect saved media and audio
61
+
62
+ ```sh
63
+ veo inspect "/downloads/Example.mp4" --json
64
+ veo inspect "/downloads/Example.mp4" --check-audio --json
65
+ veo inspect run abc123 --check-audio --json
66
+ veo inspect run abc123 --search "/moved/videos" --json
67
+ ```
68
+
69
+ `inspect` uses local FFprobe/FFmpeg and never downloads a URL. Its JSON contains `format`, `durationSeconds`, `sizeBytes`, `streams`, `hasAudioTrack` and `hasVideoTrack`. Without `--check-audio`, `audioCheck` is `null`.
70
+
71
+ With `--check-audio`, veo decodes every audio track from start to end. `audioCheck.hasSignal` is true when at least one track's peak exceeds **−60 dBFS**. `audioCheck.tracks` lists each track's `streamIndex`, `maxDbfs` and `hasSignal`; digital silence may have `maxDbfs: null` or a very low level after conversion. A present audio track does not prove audible content. This is a signal-level check, not a listening or speech-quality test. Decoding long media can take time; if FFmpeg fails, the command exits nonzero instead of reporting silence.
72
+
73
+ `inspect run` reads the saved run record even after the download finishes. It checks whether each file still exists **before** probing it. If a media file was renamed, veo searches the original output tree using file identity, size and a three-part SHA-256 fingerprint. `--search` adds one more directory after a move. Missing or ambiguous matches are reported without probing a different file; missing files make the command exit with code `1`. The fingerprint lives in veo's run history, so this works across media formats without rewriting the media. Runs created before this feature do not have a persistent run record.
74
+
75
+ The run record is stored in veo's per-user cache on the device that ran the download. `inspect` works on Windows, macOS, Linux and Termux with locally available FFmpeg/FFprobe; set `VEO_FFMPEG_PATH` to their directory when they are not on the normal search path. Moving only the media to another device does not transfer the run record.
76
+
77
+ ## Operational notes
78
+
79
+ - Run `veo doctor --offline` to check the local setup without network repair. `veo doctor fix` may install missing tools.
80
+ - Use `--resume` for interrupted downloads and `--skip-existing` when repeated saves should be avoided.
81
+ - `veo flush` removes temporary downloads and retry jobs; do not run it as routine maintenance in an agent workflow.
82
+ - Do not call bare `veo` in an interactive terminal from automation: it opens a wizard. Use explicit URLs and flags.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veodl",
3
- "version": "1.8.3",
3
+ "version": "1.9.0",
4
4
  "description": "A clean, simple video downloader powered by yt-dlp.",
5
5
  "type": "module",
6
6
  "bin": {