Output Structure
Every Vesper Orbit scan produces a single self-contained folder. This page describes the folder layout, the manifest CSV, and the rules Orbit follows when naming downloaded files.
Folder Layout
By default, Orbit writes scans to ~/Downloads/. You can change the save folder with the Change folder link below the Start button. Each scan creates its own subfolder, named after the host plus a timestamp:
[chosen folder]/
[host-with-dashes]-[YYYY-MM-DD-HHMM]/
pdfs/
images/
audio/
video/
_manifest.csv
Concrete example, scanning archive.example.org at 2:30 PM on May 7, 2026:
~/Downloads/
archive-example-org-2026-05-07-1430/
pdfs/
oral-history-jane-doe.pdf
annual-report-1953.pdf
images/
archive-photo-1947.jpg
campus-map-1962.png
audio/
interview-tape-12.mp3
video/
orientation-1968.mp4
_manifest.csv
The timestamp ensures re-scans of the same site never overwrite prior captures - you can run Orbit weekly against the same domain and accumulate a clean history.
Organize by Site Structure
The Organize by control offers a second layout. Site structure keeps the same type folders and adds the path of the page each file was found on underneath them:
~/Downloads/archive-example-org-2026-05-07-1430/
pdfs/
about/board/
board-minutes-2026-07-21.pdf
collections/oral-histories/
oral-history-jane-doe.pdf
images/
about/board/
sarah-marsden.jpg
_manifest.csv
The path follows the page the file was linked from, not where the server stores the file. That distinction matters: on a WordPress site every upload lives under /wp-content/uploads/2019/07/ and on Drupal under /sites/default/files/, neither of which tells you anything about the content. Files captured with no source page - when you point Orbit straight at a file URL - fall back to the file's own directory, and files from the site root land in _home/.
Filename Rules
Vesper Orbit preserves the original filename whenever the URL has one:
https://archive.example.org/files/oral-history-jane-doe.pdf→oral-history-jane-doe.pdfhttps://archive.example.org/img/photo_1947.jpg→photo_1947.jpg
Collisions
When two URLs would land at the same local filename, Orbit appends a numeric suffix to avoid overwriting:
- First file:
annual-report.pdf - Second collision:
annual-report-2.pdf - Third collision:
annual-report-3.pdf
Nameless URLs
When a URL has no usable filename in its path - typical of CDN-hosted media with hashed paths or query-string-only identifiers - Orbit generates a short hash of the URL and uses it as the filename, preserving the extension:
https://cdn.example.org/v2/?asset=8421→a3f2c8.jpg(extension inferred fromContent-Type)
The Manifest CSV
_manifest.csv at the root of every scan is the source of truth for what happened during that crawl. Open it in Excel, Numbers, or Google Sheets. The Save manifest CSV toggle on the idle screen turns it off if you do not want it; it is on by default.
Columns
| Column | Description |
|---|---|
source_url | The URL Orbit attempted to fetch. |
local_path | Path of the saved file relative to the scan folder, or empty if the file was not saved. |
type | One of pdfs, images, audio, video. |
bytes | File size in bytes, or empty if not downloaded. |
status | One of ok, too_large, error, skipped_type. |
source_page | The page this file was found on. |
page_title | The title of that page. |
link_text | The text of the link that pointed at the file, where there was one. |
alt_text | The image's alt text. Empty when the image is marked decorative. |
title_attr | The title attribute on the link or image. |
figcaption | The caption, when the file sits inside a <figure>. |
aria_label | The accessible label on the link or image. |
content_disposition | The filename the server declared, when it declared one. Often the real name behind a download handler URL. |
original_filename | The name taken from the URL, before any collision suffix. |
Why the Context Columns Exist
Client sites are full of files named 0001_1.jpg and 1907.pdf. On their own those names tell you nothing, and the information that would identify them - the link text, the caption, the alt text, the page they sat on - is visible on the website and lost the moment the file is downloaded. These columns keep it.
Every one of them holds text that was literally attached to that file in the page's markup. Orbit does not guess: it will not take the nearest heading, or the surrounding paragraph, and call it a description. On a photo grid or a sidebar that kind of guess is wrong, and wrong in a way you would not notice. Nothing is renamed on disk from any of these columns either - your files keep the names the site gave them, and the manifest is what explains them.
Status Values Explained
ok- file downloaded successfully and saved atlocal_path.too_large- file exceeded the 100 MB cap. Not downloaded.local_pathis empty.error- HTTP error, network failure, or unreachable URL. Check thebytescolumn for any partial response info.skipped_type- the file's media type was disabled in your scan settings. Useful when you turned off Video to keep the scan small but want a record of what would have been captured.
Defaults Summary
| Setting | Default |
|---|---|
| Save folder | ~/Downloads/ |
| Scan scope | Full Site |
| Save manifest CSV | ON |
| Organize by | Media type |
| Max crawl depth | 8 (Single Page scans one page) |
| Max pages | 5,000 (Single Page scans one page) |
| Max file size | 100 MB |
| Media types | All four ON |
| Subdomains | OFF |
| Exclusions | Vesper Audit defaults |
See Also
- Media Types - what each pill captures.
- Exclusions - keeping the crawl focused.
- Troubleshooting - what to do if files are missing.