PicMeme - automated visual meme browsing
October 6th, 2002 -- Version 1.02 is now available for download.
This version contains several bugfixes and many new and exciting features, including:
- Transparency options -- run PicMeme as a semi-transparent window in 2k/XP!
- Improved display quality when resizing images -- the stretch options can now use halftone features.
- Ability to handle web pages that use frames -- no more failing to get URLs from sites that use frames
- Initial (albeit sketchy) support for multiple monitor configurations.
- Improved "look and feel" for app mode
- Improved configuration dialogs
- Improved popup menu layout
- Improved bookmark pages have creation date and links to next and previous days
You can download it now and simply run the installer again over any existing version.
[Pic] n. A photograph, image, drawing, diagram, or still picture
[Meme] n. A unit of cultural information, such as a cultural practice or idea, that is transmitted verbally or by repeated action from one mind to another.
PicMeme is a stand alone Windows application and Windows screen saver that crawls through internet web space and collects interesting pictures to be displayed on your screen.
PicMeme provides a window into the heart and soul of the internet. An ever-changing collection of visual data is compiled by PicMeme's automated web browsing engine. It is web surfing without the effort. It is browsing without the burden of reading.
As PicMeme crawls the web, it grows a vast collection of URLs so that even more information can be mined. Images are checked into an "image store" on the hard drive and rotated out over time. A history of visited sites is maintained to minimize the duplication of data and increase browsing efficiency. Built-in garbage collection also happens automatically.
Although it is primarily intended to run on computers with persistent internet connections, it can be used on machines with no network connection to create a slide show of personal photos. PicMeme is quite configurable and has options to control web spidering aggressiveness, image sizes, display modes, display speed, image types, memory and usage.
With the amount of data currently available on the web, you are guaranteed a unique, personalized, screen saver experience...or your money will be refunded.
If a picture is truly worth a thousand words, then this work of software can be considered epic...
Because of the dynamic, chaotic nature of this software, it impossible to accurately capture or represent the program in a few simple screenshots. However, the following may give you a slightly better idea of what is possible. Ultimately, it is something that must be experienced to be fully understood. All screenshots [should] open in a new browser window. All images were captured with PicMeme running as a Windows app and not a screen saver.
These first four are sample screens with the fill mode configured to "stretch". You may notice that the URL list is set to 5000 and the image store is full at roughly 20MB.
The next three images demonstrate the "collage" fill mode. Keep in mind that the window can be sized to any desired dimension and dragged around the desktop...
The following images show the overlaid help screen and a couple of setup screens to demonstrate just how configurable PicMeme is:
The following are just some of the features available with PicMeme:
- NEVER look at the same boring, tired screen saver again!
- Efficient Windows application written in C/C++ (no MFC,VB,IE,etc. crap to cause bloating)
- Free and Open Source software (free == good!) No expiration, no nags, no ads, no spyware, NO COST!
- Works as both a stand-alone Windows application and a Windows screen saver
- Small download, small footprint (excluding image store and URL cache), small memory footprint
- Can work as web spider or with your personal image data
- Install is fast and easy, uninstall leaves nothing behind (including the registry)
- F1 help screen overlaid on images
- Works with JPEGs, GIFs, and PNGs, and includes configuration to prevent undesired image types from being downloaded
- Drawing modes include stretch to screen, actual size, fit to screen, and random collage modes
- Bookmark function to save your favorite found images
- User configurable seed URLs to start browsing in the direction you choose
- Configurable browsing/spider speed -- can be used on T1s or dialups
- User adjustable display speed - ranges from slow to seizure-inducing
- Ability to limit downloads based on image file size
- Ability to ban sites from download -- prevent unwanted images
- One-key deletion of unwanted images
- Status line shows what URLs have been visited and disk memory usage
- Built in, user-configurable garbage collection prevents your hard drive from filling up
- Did I mention that it was free?
- PicMeme_v1.02.exe - (431kB) - PicMeme version 1.02 - Windows installer. This is probably what you came here for. This is probably all that you need.
Simply download this version and install over any existing version.
- PicMeme_v1.02_src.zip - (117kB) - PicMeme version 1.02 source code only. Unless you plan on doing software development or just really want to see the code, you probably don't need this.
Note: If you are downloading the source, it is likely that you will run into some problems. This project uses several open source libraries to accomplish various things. This includes libxml, libcurl, libjpeg, libpng, libungif and zlib It is not a trivial matter to get the above libraries all working in Windows. It can be done, but it's certainly not very fun. I believe there were some bugs in the GIF library that caused some problems, and I think I fixed a few bugs on my local version. If you want/need help, feel free to email, but I can't guarantee a quick response or total solution If you want/need help, feel free to email, but I can't guarantee a quick response or total solution.
If you like this software, feel free to link here with this ultra distracting web button!
This section describes how to use and configure PicMeme. If you are looking for information specific to running PicMeme as a stand-alone slide show image viewer, see below.
PicMeme configuration is done through a configuration dialog. In application mode, you can right click and choose settings. In screen saver mode, you should click the "Settings" button on the "Screen Saver" tab of the "Display Properties" (opened by right-clicking an empty area of the desktop and choosing Properties) window.
The main configuration screen is shown below:
The main options are as follows:
- Data directory - This is the directory where PicMeme keeps its data. This directory is created at install time and should, for most purposes, not need to be changed.
- Max image store size - This number specifies the maximum number of megabytes that PicMeme will keep in the image store (in the data\images directory). This can be set to whatever you want...however, setting this number too high could fill your hard drive with images...setting it too low will cause the display to be more repetitive. Default: 20Mb.
- Max history cache size - This number indicates how many megabytes will be allocated to the history cache of visited sites (data*_visited files). Again, it's purely preference...but a small cache can cause inefficient performance. Default: 5Mb.
- Max # links in memory - This is the maximum number of URLs (links) to keep in memory. If you have a lot of RAM in your machine, feel free to increase this number. Setting this number too low will increase the chances of the browsing engine expiring all links. Default: 5000
- Wait between page fetches - This is the number of milliseconds (1000 milliseconds per 1 second) to wait between web page fetches. This is one of the most important settings. A higher number will cause links and images to be gathered more slowly, while a smaller number will cause more rapid web spidering. Caution should be used when changing this setting -- a very small value could use all available bandwidth on your internet connection. Default: 5000 (5 seconds)
- Image display duration - This is the number of milliseconds (1000 milliseconds per 1 second) to display each image. A longer value will keep the image on screen for a longer time, a shorter image will display images more rapidly. For a headache inducing effect that will certainly eat all available CPU, cause nausea, vomiting, and seizures, set this value to 1. Default: 2000 (2 seconds)
- Garbage collection every - This value tells PicMeme how frequently to perform garbage collection, in seconds. 120 is generally a good value. This number can be increased, but setting this value too low is not recommended. Default: 120 (2 minutes)
- Dload images between X and Y - These values tell PicMeme what images sizes to consider for download. Any images smaller than the first number or larger than the second number will be ignored. If you hate seeing blocky images, try turning up the lower number. If you set the first number greater than the second number, you will probably get nothing. Default: 3500 and 600000
- Fill mode - The fill mode option specifies which mode should be used when displaying images:
- Stretch - the image is stretched to fill the window/screen
- Fit - the image is expanded to fit the window/screen, but the proportions are maintained
- Actual - the image is not resized and displayed in the center of the screen
- Collage - images are displayed on top of one another in actual size to create a collage effectDefault: Stretch
- Desired image types - These check boxes allow you to configure which image types to download. If, for some odd reason, you don't wish to view/download a certain type of image, simply uncheck the appropriate box. Default: jpeg, gif, and png.
- Show status line - Determines whether or not the status line should be displayed. The status line shows the most recently fetched images/links and provides indicators for the number of links in memory and the total size of all images. Default: Checked (Yes, please show status line)
The URLs/seeds configuration screen is shown below:
You can add any number of URLs to the seed list. Seed URLs are used when PicMeme first starts or when the (R)estart command is given. All URLs should be well formed and contain a leading protocol specifier (ie. "http://").
Care should be taken to provide a good set of seed URLs. The seed URLs ultimately determine where PicMeme will browse, and what kinds of images (at least initially) you will see. If you provide music related URLs (ie. mtv.com) in your seed list, you can expect to see many images of pop artists and band related stuff. If you provide a seed to imdb.com, you should expect to see pictures of actors and screen shots from feature films. Get the picture? The URLs given here should point to pages with a relatively high number of links so that the link queue is never exhausted.
The site ban list controls allow you to restrict the behavior of the web crawling engine. If you wish to prohibit certain sites from being visited, you can enter them here. Both leading and trailing wildcards are supported in the site ban list.
For example, if you wish to prevent the browsing engine from visiting playboy.com or fbi.gov, you should enter playboy.com and *fbi.gov into the site ban list. To prohibit fetching anything from sites with the word 'sex' in them, consider adding *sex to the ban list.
- It should be noted here that the ban list is simply a rudimentary attempt at filtering and should not be considered a comprehensive solution. If you are ultimately concerned about viewing inappropriate(?) material, you may wish to evaluate other, lower-level filtering solutions. It is the author's opinion that 1) no filtering solution is [yet] complete and 2) current filtering software is really good at filtering out "normal" content. Without real-time image analysis software, it is yet to be determined if or how any filtering solution could possibly block a site called something like "www.newpopmusic.com" from serving up a pornographic image called "one.jpg"...but I digress.
Keyboard Commands and Help Screen
The following image shows the help screen overlaid on a random image:
The help screen can be toggled on or off by pressing F1 while PicMeme is running. Pressing a letter corresponding to a command will execute the desired option. The following is an overview of the available commands:
- (n)ext - choose another random image and display it immediately
- (b)ookmark - save the current image in the bookmarks folder. This command will copy the current image to the bookmarks directory and create an entry in the daily bookmarks web page. Once you have added a bookmark, check in the data\bookmarks directory for more information...
- (d)elete - sick of seeing a certain image? want to delete it from the image store? press 'd'.
- (r)estart - pressing 'r' will cause PicMeme to purge the current URL list, delete all images from the image store, and start over from scratch with the set of seed URLs.
- (k)ut - the 'k'ut command tells PicMeme to randomly purge half of the URLs in memory. This feature only works when the current number of URLs in memory is more than half the maximum value.
- (m)urder - deletes the current image, deletes all images from the same host from the image store, and adds the associated host to the ban list. If you end up seeing something you really don't want to see again, consider pressing 'm'.
Miscellaneous usage notes
PicMeme limits itself to one running instance. Period. This means that you cannot run multiple things on multiple monitors. You cannot run multiple copies of PicMeme at the same time. It also means that if you leave PicMeme running as an application, the screen saver will not kick in. Sorry, but that was an intentional design choice and it is unlikely to change.
When running in window-mode as a stand-alone windows application, PicMeme can be dragged around the screen and resized...just like any other window.
Stand alone slide show
First, it should be understood that PicMeme was not originally intended to be used as a personal slide show screen saver. That being said, it was realized that PicMeme can be used to display your personal images in a random fashion.
To run PicMeme with your personal images, several things must be configured. By following the steps below, you should be able to set up a slide show of your personal images:
- Install PicMeme. Be sure that the screen saver option is selected during installation.
- Open the screen saver properties: Right click on an empty area of the desktop, then select properties, and then the screen saver.
- Choose PicMeme as the active Windows screen saver (if it is not already).
- Click Settings. You should see the PicMeme configuration screen appear.
- Select the URLs/seeds tab. You should remove all URLs from both lists by highlighting each one and pressing the delete button.
- Select the General tab. You should change some of these options...
- Set the "Max image store size (MB) to something very large, like 1000. You should try and set this number larger than the total number of megabytes you would ever want to store in the data\images directory. For most people, 1000 is probably sufficient.
- Set the "Garbage collection every" option to something high. 100000 is probably a good guess.
- Because you will only be viewing your personal photos, you probably wish to uncheck the "Show status line" option
- Click OK to finish the PicMeme configuration
- Click OK to finish with the Display Properties
Now that you have the settings correct, you must copy your personal photos into PicMeme's images directory. It is very important that you copy the files and NOT move them into the PicMeme directory! You do not want your original files in the PicMeme directory -- there is a remote possibility that the garbage collection mechanism could delete your files. If you used the standard installation path, you will want to copy your photos to C:\Program Files\PicMeme\data\images. If you use another directory, you will want to copy to the images\data subdirectory. Simply use the Windows explorer to copy/paste the desired files into the data\images directory.
The next time your screen saver kicks in, it should be displaying your personal images. Enjoy.
The following are some items which can/should/could be implemented in future versions of PicMeme. They may not make much sense to you unless you've poured over the code in gory detail...
- Priority #1: Fix bug that causes the display "loop" (timer) to stop, forcing a single image to be displayed indefinitely.
- Priority #2: Fix bug that causes PicMeme to continue running in memory after screen saver ends.
- Maintain in-memory [limited length] queue of displayed images, to allow for PgUp and PgDn keys
- Configuration option to overlay source URL. BitBlt function for this to provide good readability(?)
- Configuration options for limiting images based on width/height/pixelct
- Keyboard keys to change display speed up/down.
- Pause key to [temporarily] pause the flip sequence (some "reasonable" delay)
- change URL config screen to use writeprivateprofilesection (like the ban list) so that deletes actually work...doh!
- Look at perhaps setting SetStretchBltMode explicitly???
- Option to purge NewLinks to XX% when full
- Menu options - purge all .visited, purge all images, ?
- Setup for changing colors, fonts
- Consider limiting URLs per site?
- Option to cut URL list to X% when full
- Improving multi monitor support options(?)
- Website, documentation - Elaborate on possible expansions, alternate uses
- Plugins - DLLs that can mess with shit. Pass in hosdc and image prior to bitblting to screen. Perhaps pass in all bitmaps and DCs.
- Plugin to set/mess with SetStretchBltMode
- Plugin to overlay text?
- Plugin to tweak colors -- filters?
PicMeme is Copyright (c) 2002 jason plumb / noisybox
This software is released under the GNU Public License. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
A full version of the GPL can be viewed here or by visiting http://www.gnu.org/copyleft/gpl.html
Ok, one caveat. It's not a license term, but simply a request: If you use this software as part of a live performance, please offer to provide me with a copy so I can see how PicMeme is being used. Thanks.
Writing software is not a crime. Keep free, open source software alive. Donate to projects you value...even if it isn't this one.
props and thanks
First, a HUGE thanks to Stacy for putting up with me during the numerous hours I slaved away on this project. Thanks also to Dean the Bean for beta testing and funny funny approval. This software would not have been possible without the work of numerous developers of free, quality, open source libraries. These guys truly deserve all the credit: libxml, libcurl, libjpeg, libpng, libungif and zlib.
Although the original idea for PicMeme was floating around my neurons for quite some time, I must give inspirational credit to EveryImage from rhizome.org (who unfortunately now require registration...go figure) and EtherPEG. If you're not familiar with those projects, please have a look.
Feedback, questions, feature requests, patches, complaints, kudos, bug reports, donations, flames, and suggestions can be sent directly to the author at firstname.lastname@example.org