pls.watch: The Minimalistic Media Looper
Create shareable loops and playlists using simple URL tokens.
Supports YouTube for video (with playlist import), Imgur for images (with gifv support) and SoundCloud for audio.
Deployed at https://pls.watch
Table of Contents
- URL Parameters
- Known Issues (Fixing autoplay and background playback in Google Chrome/Chromium, etc)
- Companion UserScript
Scratching own itches.
At the time YouTube did not provide any way to specify end timestamp when sharing a link to a video.
The amount of distractions and advertisements on third party sites that provided this functionality was abysmal.
Out of frustration,
pls.watch was born as a clean way to:
- share specific fragment of YouTube video
- display content without any distractions such as related videos or ads
- create playlists with mixed content from YouTube, Imgur (image/gifv) and SoundCloud (audio)
- guarantee backward-compatible API to create clean permalinks (see URL Parameters)
The most basic loop is one video with optional range:
Time format is
1h2m3s or just a number of seconds.
YouTube-compatible syntax is also supported, enabling use by a simple domain swap in URLs:
A YouTube video can have more than one interval. Intervals are chained with the
To chain intervals from multiple videos just append another
&v=(...) at the end of URL:
v=(...) items from
<playlistId> and start autoplay from
YouTube URLs are supported transparently: if
<videoId> is inside of the playlist specified by
<n>-th position, it will be deduplicated:
If URL already had some videos
<n> will be recalculated.
Override Video Volume
To cap YouTube sound volume at a preferred level (global setting):
Level is a number between 0 (muted) and 100 (max volume).
Override Video Quality
To cap YouTube quality at a preferred level (global setting):
Current list of available levels can be found in YouTube Player API Reference.
Override Playback Rate
The default playback rate is
1, which indicates that the video is playing at normal speed. Playback rates may include values like
2. It is a global flag (sets speed of all YouTube videos in playlist).
Current list of available playback rates can be found in YouTube Player API Reference.
By default image is displayed forever (useful for GIFs). A slideshow can be created with simplified
Single track interval:
Playlists (sets) are lazy-inlined on first play:
Any External URL
Generic HTML5 Player
Similar to YouTube Player - main difference is format for
Currently, to be detected,
videoId has to begin with
http and end with:
Generic Image Player
Similar to Imgur Player but if
videoId starts with
http it loads the URL and naïvely believes it is an image.
This parameter will force playback of all intervals in semi-random order (normalized random: current interval will not be played twice in a row).
This parameter will force playlist editor to be visible from the start.
Press ? to toggle help screen listing available shortcuts.
Autoplay does not work in Google Chrome/Chromium
Chrome made the decision not to allow autoplay of video/audio content unless muted, to prevent annoying webpage content.
There is no fix for this, but every user can opt-out and restore autoplay by opening
chrome://flags/#autoplay-policy, changing it to
No user gesture is required and restarting the browser:
Playback pauses when tab is not active in Google Chrome/Chromium
The fix is the same as above (change
See issue #151 for historical context.
There is a simple UserScript that adds a button on supported pages to open current resource in the app.
Click to install: https://pls.watch/pls.watch.user.js
It may require preinstalled browser extension:
Ideas and bug reports are most welcome.
- Underscore.js, jQuery, mCustomScrollbar and toastr are under MIT license
- Black Felt is under CC-BY-SA 3.0
The pls.watch itself is released under CC0 Public Domain Dedication.