- Verify quit bindings, watch-later files, and the active mpv configuration.
- Separate permission problems from stream, playlist, script, and path issues.
- Use a clean temporary test to identify the exact cause safely.
- Confirm the Symptom With a Minimal Clean mpv Command
- Check the Options and Actions Directly Related to Resume Playback
- Inspect Watch-Later Files and State Directory Access
- Account for Streams, Playlists, and yt-dlp URLs
- Use Logs to Identify the Actual Failure
- Run a Clean Temporary Test Before Making Permanent Changes
- Quick Fix Checklist
- Frequently Asked Questions
When mpv does not return to the saved playback position, the cause is usually narrower than it first appears. The player may be quitting without requesting a watch-later save, writing the resume file somewhere unexpected, failing to write into its state directory, identifying a stream differently on the next launch, or loading a profile, script, or file-local option that changes the relevant behavior. The steps below isolate those possibilities without deleting your configuration or changing unrelated subtitle, HDR, shader, audio, video, or hardware-decoding settings.

Start with free Canva bundles
Browse the freebies page to claim ready-to-use Canva bundles, then get 25% off your first premium bundle after you sign up.
Free to claim. Canva-ready. Instant access.
1. Confirm the Symptom With a Minimal Clean mpv Command
Begin with a local, seekable media file that lasts several minutes. A local file removes playlist changes, expiring URLs, yt-dlp extraction, and server-side seeking from the test. Choose a file you can reopen using exactly the same path.
Close every mpv instance, open a terminal, and run a clean test with configuration loading disabled:
mpv --no-config --save-position-on-quit=yes "path/to/test-video.mkv"
On Windows, use a command such as:
mpv.exe --no-config --save-position-on-quit=yes "C:\Media\test-video.mkv"
Let the video play, seek to an obvious location such as 10 minutes, and then press q or close the player normally. Reopen it with the identical command and identical file path.
Success means playback resumes close to the position at which you quit. A small difference can be normal because seeking may land on a nearby keyframe, particularly with formats or streams that do not support precise seeking. If this clean test succeeds, stop investigating codecs, GPU drivers, HDR output, subtitles, and audio backends. The resume mechanism works, so the fault is in the normal configuration, launch method, path identity, scripts, or playlist workflow.
If the test fails, repeat it using an explicitly selected temporary watch-later directory. Create the directory first, ensuring your user account can write to it:
mpv --no-config --save-position-on-quit=yes --watch-later-directory="/absolute/path/mpv-resume-test" "path/to/test-video.mkv"
Use an ordinary writable folder rather than a protected system directory. On Windows, a folder inside your user profile is appropriate. This test separates mpv's resume logic from problems locating or writing its normal state directory.
2. Check the Options and Actions Directly Related to Resume Playback
2.1 Verify the quit key used
mpv has separate quit actions. The quit-watch-later command explicitly saves playback state before exiting, while a plain quit action does not inherently request that behavior unless save-position-on-quit is enabled. Default bindings and custom bindings can therefore produce different results.
As a direct test during playback, open mpv's console if available and run quit-watch-later, or temporarily add this binding to input.conf:
Q quit-watch-later
Play, seek, press uppercase Q, and reopen the same item. If this works while your usual key does not, inspect input.conf for the usual key. A line such as q quit invokes normal quitting. You can either use quit-watch-later for a dedicated save-and-quit key or retain normal quitting and enable:
save-position-on-quit=yes
Also test the exact exit method you normally use. A normal window close can be handled by mpv, but forced process termination, a system crash, power loss, kill -9, or ending the process through a task manager may prevent state from being written. Success is a newly created or updated watch-later file after a controlled quit.
2.2 Confirm the option is in the correct configuration file
In mpv.conf, write the option without command-line dashes:
save-position-on-quit=yes
On the command line, use:
--save-position-on-quit=yes
Do not assume the configuration file being edited is the one the running mpv process loads. Packaged, portable, sandboxed, and application-bundled builds can use different locations. A graphical front end may also launch its own mpv library with a separate configuration directory.
Run mpv from a terminal and inspect its startup messages, or temporarily place a visibly testable option in the suspected configuration. The safest proof remains comparison: if --no-config plus the explicit option works, but the ordinary launch does not, the ordinary configuration or launcher is responsible.
2.3 Look for profiles and file-local overrides
Profiles can override an earlier global setting. Search every loaded configuration file for these terms:
save-position-on-quitresume-playbackwatch-later-directorywatch-later-optionsreset-on-next-file
Pay particular attention to profiles used for local video, audio-only playback, HDR, online URLs, or specific protocols. To inspect a named profile, use:
mpv --show-profile=PROFILE_NAME
This displays what that profile contains. It does not by itself prove that the profile is active, so also inspect the launch command and any profile-cond rules.
File-local configuration can make the failure appear limited to one title or directory. Depending on your enabled configuration behavior, mpv can load media-specific or directory-specific options. Search beside the affected media and in parent directories for local mpv configuration files. Temporarily rename only the suspected local file, then retest. Do not delete the entire mpv configuration folder.
Success means the same title resumes once the overriding line or local configuration is removed or corrected. Stop there rather than changing renderers, subtitle engines, or decoders.
2.4 Disable scripts selectively
A script can intercept keys, alter playlist navigation, change file identity, issue a plain quit command, or modify options at runtime. First test with --no-config. If that succeeds, temporarily disable only user scripts or move them to a temporary holding directory, preserving their files. Restore scripts one at a time until the symptom returns.
Input-management, session, playlist, history, and launcher-integration scripts deserve attention before shaders or visual scripts. A shader normally changes rendering rather than watch-later persistence. Likewise, subtitle styling, selected audio and video tracks, screenshot templates, output drivers, hardware decoding, HDR tone mapping, and GPU drivers ordinarily do not control whether a watch-later file is written.
These unrelated settings matter only if they crash or forcibly terminate mpv before orderly shutdown. If playback is stable and the process exits normally, avoid changing them during resume troubleshooting.

3. Inspect Watch-Later Files and State Directory Access
mpv stores resume data in watch-later configuration files. The exact base location can depend on the operating system, mpv build, environment variables, and launch context. Linux installations may follow XDG directories, Windows builds commonly use a user-specific mpv directory, and macOS packaging can affect the selected configuration or state path. Rather than guessing, use logs or set --watch-later-directory to a known test folder.
3.1 Check whether a file is generated
Open the watch-later directory before starting the test. Play a local file, seek, quit normally, and refresh the directory. The generated filename may be a hash rather than the media filename, so sort files by modification time.
Open the newest file in a text editor. It should contain saved properties, including a playback position. Do not rename or hand-edit it during the initial diagnosis. First establish whether mpv creates it and whether its timestamp changes after each controlled quit.
- If no file appears, focus on the quit action, option state, state path, or write permissions.
- If a file appears but is not reused, focus on path or URL identity, resume settings, and playlist behavior.
- If the file is reused but seeking lands elsewhere, focus on media seekability or server behavior.
3.2 Test directory permissions safely
Create a dedicated empty folder owned by your normal user and pass it through --watch-later-directory. If resume works there, the original state directory may be read-only, inaccessible, sandbox-restricted, mounted with unusual permissions, or owned by another account.
Check whether mpv was previously run as an administrator or with sudo. That can leave state files owned by a different account. Correct ownership or permissions on the affected mpv state directory only. Do not run the player permanently with elevated privileges and do not grant broad write access to unrelated system folders.
Also confirm that security software, controlled-folder protection, sandbox permissions, or application confinement is not denying writes. Success means the watch-later file is updated by a normal, non-elevated mpv process.
3.3 Reopen the identical file path
Watch-later matching depends on the identity mpv derives for the played item. The same file reached through different paths may be treated differently. Examples include a relative path versus an absolute path, a symlink versus its target, different drive-letter casing or network mappings, and a renamed or moved file.
Shell quoting is important when paths contain spaces, brackets, ampersands, or other special characters. Quote the full path and compare the exact launch commands. If resume works when the same absolute path is reused, normalize the paths produced by your launcher, file manager, playlist generator, or script.
4. Account for Streams, Playlists, and yt-dlp URLs
4.1 Network streams may not support reliable seeking
A watch-later file can record a position even when the source cannot return to it. Live streams, rolling manifests, some HTTP servers, and non-seekable inputs may reject or approximate a seek. In that case, saving is working but restoration is limited by the source.
Test the same setup with a local seekable file. If local playback resumes correctly, mpv's save-position mechanism is functioning. For the stream, inspect whether mpv reports a finite duration and whether manual backward and forward seeking works. If manual seeking is unavailable, watch-later restoration cannot make the source seekable.
4.2 URLs must remain stable
Online media opened through yt-dlp can resolve to temporary media URLs. Reopening the original stable page URL is generally more consistent than saving and relaunching an extracted, signed, or expiring CDN URL. Ensure your script or launcher passes the same original URL on the next session.
If yt-dlp is unavailable or cannot extract the page, that is an input-resolution problem rather than a watch-later problem. Check terminal output and use a trusted installation method for the external tool. Do not download random replacement binaries or install unrelated codec packs.
4.3 Playlists save per-item state
When quitting a playlist, distinguish between resuming the current item's timestamp and restoring the entire playlist session. Watch-later data is primarily associated with the item being played. A launcher that regenerates URLs, changes item paths, or always starts the first entry can make it seem as though the position was lost.
Reopen the exact item outside the playlist. If it resumes, the saved timestamp is valid and the remaining issue is playlist restoration or launcher behavior. If it does not, compare the item's path or URL between sessions.
5. Use Logs to Identify the Actual Failure
Run the failing case from a terminal so errors remain visible. Increase relevant logging and write it to a file:
mpv --msg-level=all=v --log-file=mpv-resume.log "path/to/test-video.mkv"
Add --save-position-on-quit=yes if you are testing the option explicitly. Reproduce the problem once, exit normally, and search the log for terms such as watch, resume, config, profile, script, permission, and denied.
The stats overlay and track list are useful for confirming the loaded file, duration, seekability, and selected tracks, but they do not replace checking the generated watch-later file. Subtitle, audio, and video track selections may themselves be stored among watch-later properties, depending on the configured watch-later options. However, a track-selection problem should not be confused with failure to save the playback timestamp.
If logs show an orderly quit and a watch-later write, stop changing save settings. Test whether the next launch identifies the same source and attempts to seek. If logs show a write error, fix that precise path or permission issue.
6. Run a Clean Temporary Test Before Making Permanent Changes
Use this controlled sequence to avoid changing many variables at once:
- Create an empty, writable temporary directory for resume files.
- Select one local, seekable media file.
- Launch with
--no-config,--save-position-on-quit=yes, and the temporary--watch-later-directory. - Seek to a memorable timestamp.
- Quit normally and verify that a file appears in the temporary directory.
- Relaunch with the identical command and absolute media path.
- Confirm that playback resumes.
- Add your normal configuration, profiles, scripts, and launcher behavior back one category at a time.
Once a category makes the failure return, inspect only that category. This method is faster and safer than rewriting a large mpv.conf, replacing GPU drivers, disabling hardware decoding, or removing all scripts at once.
7. Quick Fix Checklist
- Add
save-position-on-quit=yesto the activempv.conf. - Use
quit-watch-laterwhen you want an explicit save-and-quit action. - Avoid forced termination, crashes, and process killing during the test.
- Verify that a watch-later file is created or updated after quitting.
- Test a writable directory with
--watch-later-directory. - Reopen the same absolute local path or stable original URL.
- Check profiles, input bindings, and file-local configuration for overrides.
- Disable scripts selectively if
--no-configfixes the problem. - Test local media before blaming yt-dlp, a playlist, or a network stream.
- Use verbose terminal logging to find write and configuration errors.
8. Frequently Asked Questions
8.1 Should I use q or Q to save my position?
What matters is the command bound to the key, not the letter alone. Inspect input.conf. A binding that invokes quit-watch-later explicitly writes watch-later state. A plain quit relies on save-position-on-quit=yes if you want normal quits to save. Test your actual binding rather than assuming defaults are unchanged.
8.2 Where does mpv store the saved position?
mpv stores it in a watch-later configuration file under its selected state or configuration location. The precise location varies by platform, build, environment, and launch method. Use logs or specify a known directory with --watch-later-directory. Sort that directory by modification time to find the generated file.
8.3 Why does saving work for local files but not online videos?
The online source may be non-seekable, live, expired, or represented by a different URL on the next launch. Reopen the same stable page URL, confirm yt-dlp can resolve it, and test manual seeking. If the server cannot seek, mpv cannot reliably restore the timestamp even when it saved one.
8.4 Can subtitles, HDR, hwdec, or shaders break watch-later saving?
They do not normally control watch-later persistence. They become relevant only if a setting, driver, or script causes a crash or abnormal termination. If the watch-later file is written after a normal quit, leave rendering and track settings alone and investigate source identity or seeking instead.
8.5 Why does one file fail while other files resume correctly?
The affected item may be opened through a different path, governed by file-local options, non-seekable, damaged, renamed, or launched through a special profile. Compare its absolute path, nearby configuration files, duration, and manual seek behavior with a working file.
8.6 When should I stop troubleshooting?
Stop changing settings when a watch-later file is updated and the identical local file resumes near the saved timestamp. If only a network source still fails, the remaining limitation is likely URL stability or seek support. If a single configuration line or script reproduces the failure, fix that component and restore the rest of your working setup.