Video Thumbnail Contact Sheet Column Idea


As some of you may know, I have zero programming skills but I have an idea that I think others might like, at least I hope it wont only benefit me.

The Problems:

  • Video thumbnail size. Windows (at least on 7) seems to have a max limit of video thumbnails of 256px. On high DPI monitors, that's kind of small.
  • Thumbnail information. Sometimes it's hard to tell what the video is about by just 1 frame.

Partial Solution:

  • Use a program like Video Thumbnail Maker to create index's of all the video files. That's nice, you can have a lot of frame grabs in 1 large image. And it can be automated to index entire folders (already done).

The problems that I never liked about that:

  • You have a folder full of movies but now that list just doubled because of all the thumbnail indexes.
  • You have to open and browse the thumbnails to find the movie you want, then close the image, go and find the file to open (DO11 and below).

What I've come up with so far thanks in-part to Dopus 12:

  • Using Leo's Viewer Select script, the viewer now selects the currently viewed image. So when you close the Image Viewer, the thumbnail image is selected that is next to the video file you want to view.
  • (DO12 feature that makes it even better) Being able to create a button(s) that can play the video file that's associated with the currently viewed thumbnail sheet. This can play the video while keeping the Image Viewer open or at the same time, auto close the Image Viewer. No need to close Image Viewer and open another file (That's a big step! and the one step that's making me tackle this new idea).

DO12 makes this a pretty nice system! But I think it can go one step further to help clean up the list of files.

Below is the part that I believe will make this little project complete and the part that I would never be able to do myself.

The final icing on the cake:

Example file list (notice Video3 is missing a thumbnail index):

What I would like to do is hide the .jpg files. That's easily done, but how does one open the video thumbnail index for viewing without starting at the very beginning or some random spot? I figured a new column could display either assigned text, icon or maybe even a dynamically created small thumbnail of the image that links back to the .jpg file.

While the column is turned on and if an associated .jpg is found, then that row in the column gets filled. If the associated .jpg is not found, that row is left blank.

Example if the .jpg name was put in it's own column:
Name:__________Custom Column:

Example if the .jpg name was put in it's own column and dynamically renamed:
Name:__________Custom Column:

When clicking on the text, icon or thumb, it opens the Image Viewer of that hidden image. Normal previewing can commence. Using Dopus 12 and a 'play & close button', the Image Viewer goes away and the video starts playing.

Can something like this be done? If so, anyone willing to help with the project and do the hard part? I already looked at other scripts to see if something came close that I could modify, but it may as well just be written in a foreign language since programming doesn't make sense to me.

Thanks for reading!

Clicking somewhere in the custom column to trigger custom actions cannot be done at the moment. But you might get a similar easy access to the jpg by throwing in a qualifier key to be held down while doubleclicking on the video file.
The custom column would only serve as an indicator that the thumb index jpg is available.

Thanks for responding tbone!

Hmm, that sucks. Never thought that column wouldn't be clickable.

Still, holding down a qualifier key would be better than having all the .jpgs visible. Maybe a right-click > View Thumbnail would also work? I think I would prefer that over holding down a key (I'm funny that way).

Yes, a new entry on the context menu should work (for video files only maybe).
Maybe you can combine that with one of the modifiers which grey out or hide the entry if the jpg is not there.

Getting a button to open a hidden .jpg was easy.

@nofilenamequoting Show "{filepath$}.jpg"

Except that it only opens the 1 .jpg for the selected movie file. It can't browse other images. Any idea what is needed to select all other images/hidden images so they show up in Image Viewer?

Just a column is needed that could indicate that a thumbnail actually exists would be great. Or, maybe it's not worth someones time?

Playing around with this more, it might make more sense to just hide all movie files instead of the thumbnails. Seems kind of backwards but does work. Might just need some time getting used to.

I do lose my star ratings but I guess I could clone the ratings over to the .jpg

Yeah, that's not a good idea (hiding the movie files and only showing .jpgs). Still would be great to hide .jpgs and display 'thumb' in a column along with context menu item to view thumbnail. At the same time, opening of the thumbnail index would need to allow viewing of all thumbnails and not just the selected one.

Change your context menu entry which makes use of the "Show.. " command and add the LISTSIBLINGS option, the other jpgs should be browsable by then. Regarding the column, it's quite easy to do! o)

Thanks. LISTSIBLINGS worked great.

If you can code the column, tbone, icecream is on me again :slight_smile:

You can assign an image as the thumbnail for .MP4 files, and I think it can be as large as you want. (Opus will display it up to the max thumbnail size in Preferences / Misc / Advanced.)

I don't think Opus itself allows you to make the change, but I was able to do so with DBPowerAmp's tag editor, which I happen to have installed, and which seems happy to tag MP4 videos the same way it would tag MP4 audio files, including the ability to set the "album cover art". Once the cover art was added to the MP4 file, it showed up as the thumbnail in both Explorer and Opus.

MP3Tag was also able to do the same, as a free alternative, if this is all you want it for.

You may also need to tell the Opus Movie plugin not to generate thumbnails, so thumbnail generation falls through to the shell.

I think I fell in love with having indexes of movies instead of a large, single frame thumbnails (my demo video posted in the other thread only shows 2 of the 8 thumbnails) :slight_smile: Even if the the assigned thumbnail was an index, it sounds like a lot more manual work. Plus I would need it for all movie files, not just mp4.

I'm really happy with my solution I've created and posted about (been using it for months). Only feature I feel that is missing, that would make this complete, is a custom column that shows if a corresponding index has been generated or not.

Having a clickable column item isn't needed anymore. right-click > View Thumbnail is working perfectly fine. Would just be nice to have a visual if an index was missing.

Thanks for posting, Leo. It might help someone.

Fair enough. Here's a script. It checks if the file is part of the Movies file type group first, to avoid hitting the filesystem for everything. Change as required.

HasJpegColumn.js.txt (1.25 KB)


// Called by Directory Opus to initialize the script
function OnInit(initData)
{ = "HasJpegColumn";
	initData.version = "1.0";
	initData.copyright = "(c) 2017 Leo Davidson";
	initData.url = "";
	initData.desc = "Indicates if video file has matching .jpg file.";
	initData.default_enable = true;
	initData.min_version = "12.0";

	var col = initData.AddColumn(); = "HasJPEG";
	col.method = "OnHasJPEG";
	col.label = "Has JPEG";
	col.justify = "left";
	col.autogroup = true;

// Implement the HasJPEG column
function OnHasJPEG(scriptColData)
	if (scriptColData.item.is_dir)

	var groups = scriptColData.item.groups;

	if (typeof groups != "object")

	var movie = false;
	for (var i = 0; i < groups.count; ++i)
		if (groups(i) == "Movies")
			movie = true;
	if (!movie)

	var resPath = DOpus.FSUtil.Resolve(scriptColData.item.realpath);

	if (DOpus.FSUtil.Exists(resPath + ".jpg"))
		scriptColData.value = "Yes";
		scriptColData.sort = 0; // Sort Yes before No.
		scriptColData.value = "No";
		scriptColData.sort = 1; // Sort Yes before No.
1 Like

That's fantastic! Thank you so much, Leo!