Clip is a utility for making audiovisual recordings: photos, videos, screenshots, screencasts, and sounds. It shouldn’t do all of these in the first version, but it should be awesome at what it does do.

Items should be added only as they are implemented, but for continuity, their order and keyboard combos should always be the eventual ones.

  Take Photo Now        Alt Ctrl 1
  Take Video Now        Alt Ctrl 2
  Take Screenshot Now…  Alt Ctrl 3     [also PrtSc]
  Start Screencast Now  Alt Ctrl 4
  Record Sound Now      Alt Ctrl 5
  Open                      Ctrl O
  Reveal File         Shift Ctrl O
  Save a Copy…        Shift Ctrl S
  Print…                    Ctrl P
  Move to Trash             Ctrl Del
  Close                     Ctrl W

  Undo        Ctrl Z
  Redo  Shift Ctrl Z
  Cut         Ctrl X
  Copy        Ctrl C
  Paste       Ctrl V
  Select All  Ctrl A

  Photo       Ctrl 1
  Video       Ctrl 2
  Screenshot  Ctrl 3
  Screencast  Ctrl 4
  Sound       Ctrl 5
  Always On Top

  Help Using Clip
  About This Version

Main window

The Clip window should be a standard window, containing a navigation bar, a main area, a command area, a gallery, and a handle for resizing the window vertically to show more or fewer rows in the gallery.

The navigation bar should contain buttons for whichever features have been implemented, in order, “Photo”, “Video”, “Screenshot”, “Screencast”, and “Sound”. When Clip opens, the default selection should be whichever feature was used last, otherwise the first one that has been implemented so far.

Apart from the gallery splitter, the window should be resizable only when “Photo”, “Video”, or “Sound” is selected, and the window size when in any of those modes should be remembered when returning to any of them.

The gallery should show thumbnails of up to the ten most recent clips in place of the kind currently selected. (For example, if “Screenshot” is selected, the gallery should show thumbnails of the ten most recent images in the Screenshots folder.) At the leading end of the gallery should be a “…” button that opens the relevant clips folder subfolder.

Whenever any clip is taken, it should zoom over 500 ms from the part of the screen most closely representing it (for example, the selected area for an area screenshot, or the Clip window’s main area for a photo or video) into the next available empty space in the gallery. It should then immediately become the only selected clip in the gallery.

Shared functions

These are functions shared across the various clip types.

Storing clips

Clips should be stored in Photos, Videos, Screenshots, Screencasts, and Audio subfolders of the clips folder, which should be ~/Clips by default. When any clip is stored, the clips folder should be created if it does not exist.

If you have specified different folders to store any clip types, Clip should still save symbolic links to those clips in the relevant clips folder subfolder. The gallery should reflect the contents of that subfolder, treating actual files and valid symbolic links identically, and ignoring broken symbolic links.

If either folder is not writable when a clip is stored, an error message should appear immediately, with primary text ‘You don’t have permission to keep clips in “Name of Folder”.’, and buttons “Folder Properties…”, “Cancel”, and “Change Settings…”.


“Open” should be available whenever at least one clip is selected in the gallery. It should open the selected clip(s) in the(ir) default application.

Save a Copy

“Save a Copy…” should be available whenever exactly one clip is selected in the gallery. It should open a “Save a Copy” filepicker for choosing its name and destination.

Photo (initial version)


Video (initial version)


Screenshot (initial version)

The main area should start with toggle buttons for choosing “Select Area”, “Select Window”, “Active Window”, “Full Screen”, or “All Screens”. The default should be whichever was used last, otherwise “Full Screen”.

Whenever “Select Area” is selected, a frame should float on top of every window, around the last-used area of any screen that is currently available, with handles for resizing the area non-proportionally. Dragging a non-handle part of the frame should move the whole area.

Whenever you choose “Select Window”, even if it was selected already, the pointer should turn into a crosshair until you either cancel (by pressing Esc) or click on any window, which should have only the effect of selecting the window. When a window is selected, around its edges should float the same kind of frame as for “Select Area”, but not movable or resizable.

Whenever “Active Window” is selected, the active window should have the same kind of unmovable unresizable frame.

Regardless of mode, the main area should consist of two checkboxes: “Hide Clip window during screenshot” (defaulting to the same state it had last time, otherwise checked), and “Wait for [combo box] seconds before screenshot”. The combo box should be sensitive whenever the checkbox is checked. Its field should accept only non-negative numbers (ignoring other characters), and its menu should offer “2”, “5” (the default), and “10”.

When you choose “Take Screenshot”, if “Hide Clip window during screenshot” was selected, the Clip window should disappear immediately, overriding (if possible) any normal window manager effect for closing windows. Then if a wait period was specified, a film-style countdown animation should be overlaid on the center of the screen until there is one second left. At the scheduled time, the screenshot should be taken and a camera sound played.

Take Screenshot Now

This is the unique selling proposition for version 1. It satisfies the case where you don’t have Clip open (or even where you do), but you see something amazing that will disappear soon. It might be in the foreground window, a background window, the whole screen, or even a secondary display.

When you invoke Take Screenshot Now (Alt Ctrl 3 or PrtSc), Clip should instantly take a screenshot of every display, and a screenshot of every window. It should then open the main window if closed, followed by a “Choose Screenshot” dialog for choosing which screenshot(s) you wanted.

Or can we use a special mode of the main window?

Screencast (initial version)


Sound (initial version)


Future enhancements


“Reveal” should be available whenever exactly one clip is selected in the gallery. It should reveal the clip in the file manager.

Always On Top

The Clip window should be a utility window when “Always On Top” is checked, otherwise a standard window.

User stories

The birthday

“It’s his birthday. Let’s call him.”
“I can’t, he’s not online. He hasn’t been online all day.”
“Probably out partying with those Crimson dudes.”
“Probably is.”
“Can we sing him Happy Birthday?”
“How can we do that if we can’t call him?”
“Can’t we leave him a message, hon?”
“I think we could do that. We could make a video, and then…”
“Could we send it to him?”
“We could e-mail it, maybe.”
“Can you e-mail a video?”
“I don’t know. I think you can if it’s a small one. I’m not sure.”
“Let’s try it. Is that the thing for recording?”
“It looks like it’s for recording. It says ‘Video’ here and then ‘Record’ here, so I guess so.”
“Okay. Ready?”
“Oh, it’s giving us a countdown…”

“Did you stop it?”
“Yes, I stopped it.”
“Now what do we do?”
“We need to e-mail it.”
“So start up the e-mail?”
“No, hang on, I think we can do it here. This is the same as when I e-mail photos from the photo program.”
“Does it work for videos too?”
“It says YouTube, Vimeo … Send by Mail. Send by Mail, that’s what we want, right?”
“Try it and see.”
“Oh, look, now we got a new message to send. And there’s the video inside.”
“The same video?”
“Of course it’s the same video.”
“Okay, write ‘Happy birthday’.”
“What do you mean, the same video. What other video would it be.”
“Just write the message, hon. You know these machines confuse me.”
“Happy birthday Nadeem. Now, what else should we write?”

The presentation

Emily frowned. Again? Seriously? But there it was in a chat window on her screen: her boss asking her to make yet more changes to a presentation he was giving in three hours. Three hours! “Please could you add screenshots of each stage of the registration process in the new app?” Sure, fine, except there were eleventy billion stages. Well, okay, seventeen stages. Emily chewed on a mint and started work.

She opened the app in her browser, signed in to the test account, and navigated to the first stage. Now, take a screenshot. It was just the Web page she wanted, not the browser chrome, so she selected the area on screen. Snapped. Now navigate to the second stage. Same area for the screenshot. Done. Third stage. Same area. Snapped. Fourth stage. Same area. Snapped…

Fortunately Emily was able to concentrate on filling in and navigating the application. She didn’t think about what to do with the screenshots until she’d snapped all seventeen. She selected them all and plopped them all into the presentation at once. It turned out that the hardest part was positioning the screenshot on each slide. Not so bad after all.

Clip (last edited 2015-06-04 14:28:08 by mpt)