Make Files LocalGitHub
A silver spacecraft with 3 blue engines flying out of a burst of light

Mac app and command line for Dropbox

Make a whole batch of Dropbox files local in one command

Give Make Files Local a list of cloud-only files. Dropbox downloads each one into its original folder. You get back every file's name, path, size and result. No file opens in a viewer.

View the project on GitHub

Repository access is limited for now. No download is published yet.

Batch example

One command, a result for every file

With --jobs 3, up to 3 files download at once. Each result prints the moment its file finishes, so small files report while large videos are still on their way.

make-files-local --files-from paths.txt --jobs 3 --jsonlOpening 4 files with up to 3 workers. Batch 3F2B8C1D-6A4E-4F0B-9C55-1D7E2A9B0C44.{"status":"ready","inputIndex":4,"name":"budget.xlsx","sizeBytes":48211,"downloadState":"available"}[1/4] ready: "/Users/you/Dropbox/Project/budget.xlsx"{"status":"ready","inputIndex":3,"name":"floor-plan.pdf","sizeBytes":4812330,"downloadState":"downloaded"}[2/4] ready: "/Users/you/Dropbox/Project/floor-plan.pdf"{"status":"ready","inputIndex":2,"name":"interview.mp4","sizeBytes":862114907,"downloadState":"downloaded"}[3/4] ready: "/Users/you/Dropbox/Project/interview.mp4"{"status":"ready","inputIndex":1,"name":"drone-footage.mov","sizeBytes":1284652031,"downloadState":"downloaded"}[4/4] ready: "/Users/you/Dropbox/Project/drone-footage.mov"Finished: 4 ready, 0 failed, 0 timed out.
Each JSON line is one finished file, shortened here to its main fields. Full results also include the path, timings and IDs.
status
ready, failed or timeout for each file
sizeBytes
the file's size in bytes, ready for a script to check or sum
downloadState
downloaded when a cloud-only file came down, available when its content was already accessible

Download a batch in 3 steps

  1. List the files

    Write one path per line in a UTF-8 text file called paths.txt. Type each filename exactly as it appears, with its spaces and apostrophes. Leave out shell quotes.

    /Users/you/Dropbox/Project/drone-footage.mov
    /Users/you/Dropbox/Project/interview.mp4
    /Users/you/Dropbox/Project/floor-plan.pdf
    /Users/you/Dropbox/Project/budget.xlsx
  2. Run the batch

    Point the command at your list. Each file gets up to 600 seconds by default. Change that with --timeout.

    make-files-local --files-from paths.txt --jobs 3 --jsonl > results.jsonl
  3. Use the ready files

    A failed or timed-out file gets its own error message. The rest of the batch keeps going. Pull out the paths that are ready:

    jq -r 'select(.status == "ready") | .path' results.jsonl

Prefer a window? Open the Mac app, click Open files… or drag files into the table. It keeps a history with each file's full path and exact size.

For AI agents and scripts

Hand your agent a folder and get clean JSON back

Any agent with terminal access on your Mac can run Make Files Local. Results go to stdout as JSON Lines. Progress and the summary go to stderr, so your parser only sees data.

The repository includes an agent skill with the whole workflow, from writing the list to retrying the files that failed.

Exit codes
CodeMeaning
0every file is ready, or the input was empty
2at least one file failed or timed out
1an input, setup or output error
Pipe a list of paths
cat paths.txt | make-files-local --jsonl
Download every file in a folder
find ~/Dropbox/Project -type f -print0 | make-files-local -0 --jobs 3 --jsonl
Pass paths inline with a here-document
make-files-local --jsonl <<'FILES'
/Users/you/Dropbox/Project/interview.mp4
FILES

What you need

Files stay in their original Dropbox folders. Dropbox may later return a file to online-only, so run its path again when you need fresh content.

Free and MIT licensed

chucktrukk/makefileslocal.com on GitHub