Video/Formats/Technology
Video Download Storage Problems: File Limits, Disk Space, and Temporary Files

Why Storage Matters During a Video Download
When people think about downloading a video, they often look at one number:
the final file size.
That number is useful, but it is not always the complete storage picture.
A video may be downloaded, temporarily stored, processed, merged with another media stream, and then retained for a short period before the finished file is delivered to the user.
That means several different storage questions can exist at the same time:
How large is the final video?
How much space does the device have?
How much temporary working space does the server use?
Is there a maximum size for one output?
How long are finished files retained?
These are different measurements.
They should not be treated as interchangeable.
The MediaFetches project itself uses a server-side job system and temporary job directory for managed downloads. I inspected the uploaded MediaFetches project directly as the source of truth for the implementation described in this guide.
The practical lesson is simple:
A 1 GB final video does not automatically mean that exactly 1 GB of free storage is sufficient at every stage of every download workflow.
There is no universal multiplier such as “always keep twice the file size free.” The amount of working space depends on the download and processing path.
Final File Size vs Temporary Storage
Final output file
The final output file is the finished media that the user ultimately receives.
For example, suppose a download completes as:
1.0 GB MP4
That is the size of the completed output.
It does not tell you how much storage may have been used while the system was preparing that file.
Temporary download files
Temporary files are working data created while the download is in progress.
The exact behavior varies between applications.
Some downloaders use partial files, some write directly to the destination, and some create separate intermediate files.
yt-dlp documents both models: .part files are the normal default, while --no-part tells yt-dlp to write directly into the output file. (yt-dlp documentation)
MediaFetches' managed pipeline explicitly sets:
noPart: true
so its current managed yt-dlp job does not use a standard .part file for the primary output.
That does not mean no temporary storage is involved.
The managed job writes into a dedicated:
tmp/jobs
directory, and the actual source/processing path can involve the selected media output and intermediate files.
Intermediate processing files
A downloader may also need temporary or intermediate media when the source provides separate streams.
For example:
video stream
audio stream
may need to become:
one final output
Depending on the source and processing path, more than one file can exist before the final output is selected.
The MediaFetches implementation explicitly checks for files produced for a job and then removes leftover intermediate outputs that are not chosen as the final file.
That means temporary working storage is a real part of the server's download lifecycle.
How Much Free Space Does a Video Download Need?
There is no universal number that works for every downloader, device, and source.
The safest rule is:
Have comfortably more free space than the expected final file size when downloading a large video.
That does not mean there is a fixed requirement of two times, three times, or any other multiplier.
The actual need depends on what the software has to store during the operation.
Why the final file size is not always the whole story
Imagine an illustrative video with an expected final output of about 1 GB.
If the system only ever needed one 1 GB file, then 1 GB of storage would be the obvious minimum.
But a real workflow can involve:
downloaded source data separate media streams intermediate processing final output filesystem overhead other jobs running at the same time
So having exactly 1 GB free should not be treated as a guaranteed safe margin.
This is a general engineering principle, not a special MediaFetches rule.
Large files and higher-quality video
Higher-quality source options often contain more data.
For example, a long 4K video may be much larger than a short 720p version.
That means storage pressure becomes more important as:
resolution increases duration increases bitrate increases additional streams are included
This does not mean every 4K file has a predictable size.
The actual encoded size depends on the source and encoding characteristics.
For more background, our guide on video resolutions explains why a resolution label alone does not determine the complete characteristics of a media file.
Device Storage Problems
Device storage is the space available on the user's own phone, laptop, desktop, or other receiving device.
This is completely separate from MediaFetches' server storage.
Phone storage
Phones are particularly sensitive to large video downloads because storage is often shared by:
photos videos apps downloaded media offline maps messaging attachments operating-system data
Android's current guidance recommends checking storage from Settings → Storage and provides built-in tools for removing downloaded media and other unnecessary files. Google also distinguishes device storage from memory and explains that clearing an app's cache removes temporary data, while clearing app storage can remove persistent app data. (Google Play Help)
For a large video, check available storage before starting instead of waiting until the transfer fails near the end.
Laptop and desktop storage
On Windows, you can check free disk space through File Explorer and the Storage settings.
Microsoft's current Windows guidance specifically identifies videos and Downloads as categories that can consume large amounts of space and recommends Storage Sense, Cleanup recommendations, or moving large personal files to another drive when appropriate. (Microsoft Support)
On a Mac, Apple similarly recommends checking storage through System Settings → General → Storage and notes that large media files such as photos and videos can consume substantial space. (Apple Support)
What happens when the destination disk fills up?
A download can fail even after successfully receiving part of the file.
This is not a theoretical problem.
Browsers such as Chrome explicitly distinguish a Disk full download condition from other errors and describe it as insufficient computer space for the download. (Google Chrome Help)
The practical symptom can be:
download starts → file grows → device runs out of space → write operation fails
If the device is nearly full before you begin, you are increasing the chance of this happening.
How to safely free storage before a large download
Use normal operating-system tools rather than deleting system files manually.
On Windows, Microsoft recommends Storage Sense, Cleanup recommendations, and reviewing large or unused files. (Microsoft Support)
On macOS, Apple provides Storage settings that help identify large files and categories using space. (Apple Support)
On Android, Google provides Storage settings and tools for deleting downloaded media and unused content. (Google Play Help)
A sensible cleanup order is:
Remove videos, downloads, or other personal files you genuinely no longer need. Move large personal files to external or cloud storage when appropriate. Empty the Recycle Bin or Trash when appropriate. Use built-in temporary-file cleanup tools. Do not delete unknown system files just because they look large.
Server-Side Storage Problems in MediaFetches
The server has its own storage environment.
This matters because MediaFetches is not simply handing you a direct link and forgetting about the file.
The current managed workflow stores jobs and finished outputs on the server temporarily.
Temporary job storage
The current project defines:
JOBS_DIR = tmp/jobs
relative to the project.
A job writes its output into that managed directory.
The file remains available after the server-side preparation completes until its job expires or is removed through quota housekeeping.
Individual output-file limits
The current/default MediaFetches configuration sets:
MAX_FILE_BYTES = 2 GiB
which is:
2,147,483,648 bytes
This is a limit on one managed output file.
It is not the same thing as saying that the server has only 2 GiB of total storage.
The downloader also passes the configured limit through yt-dlp's --max-filesize mechanism. yt-dlp documents --max-filesize as a limit that aborts downloads whose reported filesize is larger than the configured value. (yt-dlp documentation)
When the managed pipeline detects that the file exceeds its configured maximum, MediaFetches reports:
"That file is larger than this server allows. Please try a lower quality."
This is one of the clearest examples of a server-side file limit that is different from your personal device storage.
The configured temporary-storage ceiling
The current/default configuration sets:
MAX_TMP_BYTES = 8 GiB
or:
8,589,934,592 bytes
This is important, but the implementation needs to be described carefully.
The project's quota-enforcement function calculates the size of READY job files and evicts the oldest ready jobs first when the configured total exceeds the limit.
So the 8 GiB value should not be described as:
“The filesystem can never contain more than 8 GiB of temporary data under any circumstances.”
That would be inaccurate.
The current implementation specifically tracks finished ready-job files for quota enforcement.
Active working files may exist before the job becomes ready.
Finished-file expiration and cleanup
A finished job does not remain on the server forever.
The current/default configuration sets:
JOB_TTL_MS = 30 minutes
After a job expires, the housekeeping process removes its recorded file and job entry.
The cleanup sweep runs every:
5 minutes
by default.
The housekeeping system also looks for orphaned files in the jobs directory.
An orphan is a file that remains on disk without a live job record knowing about it.
The project gives such orphan files a grace period before removal so that a file currently being written is not immediately deleted simply because its path has not yet been registered.
This cleanup design is important because temporary storage that is never reclaimed eventually becomes a storage problem.
MediaFetches File and Storage Limits
Here are the current/default values verified in the project's configuration:
Maximum individual output size
2 GiB per managed output
Configuration variable:
MAX_FILE_BYTES
Temporary-storage quota
8 GiB
Configuration variable:
MAX_TMP_BYTES
Again, the current quota-enforcement logic applies this threshold to tracked ready-job files rather than guaranteeing a literal hard ceiling on every byte that may temporarily exist during active processing.
Finished-file retention
30 minutes
Configuration variable:
JOB_TTL_MS
Cleanup sweep
5 minutes
Configuration variable:
JOB_SWEEP_INTERVAL_MS
Download concurrency
3 simultaneous download processes
Configuration variable:
MAX_CONCURRENT_DOWNLOADS
This matters to storage because several jobs can exist simultaneously.
More concurrent jobs can mean more simultaneous working data.
Queued jobs
20 queued jobs
Configuration variable:
MAX_QUEUED_JOBS
This is primarily a capacity setting, but it can indirectly matter to storage because a busy service may have several completed outputs waiting to be collected.
All of these are current/default configuration values, not permanent MediaFetches guarantees. A deployment can change them through environment configuration.
Why a Large Video Can Fail Even When the Final Size Looks Acceptable
Storage problems are not always caused by a single oversized final file.
Separate video and audio
Some source formats provide video and audio separately.
The download process may therefore involve:
video data
and:
audio data
before producing the final output.
That does not mean separate streams automatically double disk usage.
The exact storage consumption depends on the selected formats and how the processing pipeline handles them.
Processing and merging
MediaFetches uses FFmpeg as part of its media-processing pipeline.
For the managed video path, it asks yt-dlp to target MP4 output and uses:
-c copy
for FFmpeg post-processing.
That is stream copying rather than normal video re-encoding.
Nevertheless, there can still be input and output files involved during the merge/process stage.
The current code explicitly looks for all files associated with the job and removes unused produced files after choosing the final one.
Temporary files
The current managed jobs are written into a dedicated jobs directory.
When a job succeeds, the final file becomes the tracked output.
When processing leaves behind extra produced files, the project attempts to remove those unused intermediates.
This is one reason temporary storage should be treated as a separate concept from the final file.
Concurrent jobs
If several downloads run at the same time, their temporary and finished data can coexist.
MediaFetches therefore has a concurrency limit of three managed download processes by default.
That limit reduces the amount of simultaneous download work and also reduces how many large jobs can be actively processing at once.
How to Recognize a Storage-Related Download Problem
The symptoms can tell you where to look.
Not enough device space
Likely signs:
browser reports disk full file transfer stops while saving device storage warning appears another large file also cannot be downloaded
This points toward the user's device.
File exceeds the configured limit
If MediaFetches reports:
"That file is larger than this server allows. Please try a lower quality."
the problem is not simply that your phone is full.
The selected output exceeds the server's configured maximum.
Server storage pressure
A server under storage pressure can behave differently.
Possible effects include:
jobs being evicted after completion new processing becoming difficult output creation failing busy-service behavior cleanup becoming important
This is primarily a deployment-side problem.
Deleting files from your own phone will not increase the MediaFetches server's disk space.
Temporary or intermediate-file problems
A merge or processing operation can require filesystem writes even after the source data has been downloaded.
If the server cannot create or finalize the necessary output, the problem can occur during processing instead of initial transfer.
Processing cannot complete
A job may therefore follow:
Downloading → Processing → Failed
without the source transfer itself being the main issue.
This is why storage troubleshooting should consider the stage at which the job failed.
How to Troubleshoot Storage Problems
- Check available device storage
Before downloading a large file, check the destination device.
Do not rely on the browser or operating system to warn you before every large download.
- Check the expected file size
MediaFetches can show an approximate size when the source provides enough metadata.
Use that estimate as a planning aid.
It is not necessarily an exact final size.
- Test whether smaller downloads work
If a large 4K source repeatedly causes problems but a smaller 720p source succeeds, storage or file-size limits become more plausible.
This is not proof by itself, but it is a useful diagnostic comparison.
- Check whether another download works
Try another legitimately accessible video with a smaller expected output.
If smaller downloads succeed while a very large one fails, the size itself becomes an important clue.
- Check whether the source is unusually large
Long duration, high resolution, high bitrate, multiple streams, and other source characteristics can make a video much larger than expected.
Do not assume that every 1080p or 4K video has a fixed size.
- Consider MediaFetches server-side limits
Remember the current/default:
2 GiB maximum individual output 8 GiB configured ready-file quota 30-minute finished-job TTL
These can affect a download independently of your device's free storage.
- Wait for temporary jobs to expire when appropriate
Finished MediaFetches files are temporary.
The current default retention is 30 minutes, and the janitor periodically sweeps expired or orphaned files.
If a busy server has many completed jobs sitting around, cleanup can release space over time.
The user should not attempt to manually delete server files.
- Try a smaller available quality when appropriate
If a source offers several qualities and the highest one is too large for the circumstances, selecting a smaller available quality can reduce the amount of data being downloaded.
This is especially practical when the user's device or data/storage constraints are the real limitation.
It is not a solution for an unsupported source or access restriction.
- Do not repeatedly retry a storage problem
If a file is over the configured maximum, repeated attempts will not make it smaller.
If the device is full, repeatedly downloading the same file does not create storage.
Fix the storage constraint first.
- Know when the problem is server-side
If:
your device has plenty of free space smaller files work the source is available the failure consistently happens during server-side processing or the requested output exceeds MediaFetches' configured maximum
then the problem may be on the service/deployment side.
That is not something you can repair from your browser.
What Temporary Files Actually Do
Temporary files are not automatically “junk.”
Applications often use temporary storage because working on media directly in a permanent user location is not always practical.
Why applications use temporary files
A media application may need a temporary location to:
store downloaded data before finalization hold an intermediate stream combine media streams prepare a final container recover from certain processing stages separate working data from final output
The exact implementation differs by application.
Microsoft's documentation for Clipchamp is a useful real-world example: the application and its browser version use temporary copies/cache data while video projects are being processed, and those temporary files can grow substantially before being cleared. (Microsoft Support)
That does not mean MediaFetches uses Clipchamp's storage model.
It simply illustrates why "temporary" does not mean "irrelevant."
Why temporary files can disappear
Temporary files are generally intended to have a shorter lifetime than permanent user files.
MediaFetches implements this explicitly.
A finished job receives an expiry time.
The janitor later removes expired files.
The project also removes orphaned job files left by crashes or hard restarts after a grace period.
Why cleanup matters
Suppose a server keeps every 1 GB finished video forever.
After enough users, the disk will eventually fill.
Cleanup prevents temporary job storage from becoming permanent media storage.
This is why MediaFetches treats completed files as short-lived job artifacts rather than a permanent cloud library.
What Happens to Finished Downloads?
When a MediaFetches job successfully finishes, the project records:
final file path extension MIME type file size filename expiration time
The job moves to:
READY
and the user receives the ability to collect the file.
The finished file is not intended to remain permanently available.
At the current default retention period, it expires after 30 minutes.
There is another important distinction:
server-side file retention
is different from:
the copy saved to your device
Once you successfully save the file locally, your copy is governed by your own device storage and file-management rules.
Deleting or moving your local file does not delete the server copy immediately; server cleanup follows the job's own lifecycle.
Conversely, when the server-side job expires, your already-saved local copy is unaffected.
Storage and Quality Trade-Offs
Storage decisions are closely connected to quality selection.
A higher-quality source can often mean:
more downloaded data larger final files more storage consumption more server-side processing work
But the relationship is not fixed.
A source's actual encoded bitrate, codec, frame rate, duration, and content complexity all affect the result.
This is why you should not use a rule such as:
“1080p always needs exactly X GB.”
There is no universal number.
For MediaFetches users, the practical choice is usually:
Do I actually need the highest available quality?
If yes, make sure your storage situation can handle it.
If not, choosing a smaller available quality can reduce the amount of data involved without requiring a custom compression workflow.
For readers who want the technical details behind bitrate and storage, the related MP4 vs WebM and resolution resources can help explain why file characteristics vary.
How MediaFetches Handles Temporary Files and Cleanup
The current managed workflow is designed around a temporary job lifecycle.
Conceptually:
User request
↓
Job created
↓
Temporary job directory
↓
yt-dlp source download
↓
Processing/FFmpeg if required
↓
Final output
↓
Ready
↓
Temporary retention
↓
Cleanup
The implementation uses a dedicated tmp/jobs directory for managed jobs.
It writes job output using the generated job ID as the filename stem.
The project uses noPart: true for the managed yt-dlp invocation rather than standard .part files.
When yt-dlp finishes, MediaFetches scans the job directory for files belonging to that job.
If more than one produced file exists, it prefers:
.mp4 for video .mp3 for audio
and removes other produced files left behind by the processing operation.
This is an important implementation detail because it means temporary/intermediate files are not intended to remain indefinitely.
The job service then records the completed file and assigns the configured TTL.
The janitor periodically:
deletes expired job files removes expired job records looks for orphaned files gives active-looking files a grace period removes older READY files when the configured quota requires eviction
The current/default housekeeping values are:
30-minute finished-file TTL
and:
5-minute sweep interval
while the configured ready-file quota is:
8 GiB
These values can be changed through environment configuration.
Common Questions How much free storage should I have before downloading a large video?
There is no universal number.
At minimum, you should have enough room for the expected file, with additional margin because the download workflow may involve temporary working data.
For very large downloads, leaving only a few megabytes above the estimated final size is not a sensible safety margin.
Why can a 1 GB video need more than 1 GB of available working space?
Because the final file is only one part of the workflow.
Depending on the source and processing path, the system may also need to hold temporary or intermediate media before the final file is ready.
That does not mean it always needs exactly 2 GB.
There is no universal multiplier.
What happens if my device runs out of storage during a download?
The transfer may fail when the device can no longer write more data.
Chrome's current documentation explicitly describes Disk full as a condition where there is not enough space on the computer to download the file. (Google Chrome Help)
Free space before retrying.
What happens if MediaFetches reaches its temporary-storage ceiling?
The current project's quota-enforcement logic evicts the oldest READY job files when the tracked ready-file total exceeds the configured ceiling.
That can cause older finished downloads to become unavailable.
It does not mean users can manually delete server files.
Can a video be too large for MediaFetches?
Yes.
The current/default maximum individual output is 2 GiB.
When the managed downloader detects that a file exceeds the configured limit, the project reports that the file is larger than the server allows and suggests trying a lower quality.
Does deleting old finished downloads free server storage?
Yes, when those finished files are actually removed from the server-side job store.
MediaFetches also has automatic expiration and quota-based eviction.
Are MediaFetches temporary files kept forever?
No.
The job system assigns an expiration time to completed files, and the janitor removes expired jobs/files.
Orphaned files are also subject to cleanup after a grace period.
Can MediaFetches storage limits be changed?
Yes.
The relevant limits are environment-configurable.
The current/default values in the project are:
MAX_FILE_BYTES=2147483648 MAX_TMP_BYTES=8589934592 JOB_TTL_MS=1800000 JOB_SWEEP_INTERVAL_MS=300000
A deployment administrator can change those values.
Changing them does not automatically increase the physical disk capacity of the server.
Related MediaFetches guides
For related guidance, see where downloaded videos go and video storage guide.
Final Takeaway
Storage problems during video downloading can occur at different stages and on different systems.
The most important distinction is:
final file size ≠ total storage used throughout the workflow
A download can involve:
device free space
server temporary storage
temporary/intermediate media
processing space
individual file limits
retention and cleanup rules
For MediaFetches, the current/default managed-download configuration uses a 2 GiB individual output limit, an 8 GiB configured ready-file quota, and a 30-minute finished-job retention period, with a housekeeping sweep every five minutes.
Those are configuration values, not permanent product guarantees.
On the device side, the practical approach is straightforward:
Check free space → check the expected file size → avoid unnecessary high-quality downloads → free safe storage → retry only after fixing the storage constraint.
On the server side, a user cannot repair a disk-quota problem by deleting files from their own phone or PC.
And when a source is simply too large for the configured MediaFetches limit, repeatedly retrying will not change the file's size.
The core lesson is:
Storage problems are workflow problems. Look beyond the final video size and consider where the media is being stored, processed, retained, and eventually saved.


