ArtSaver: the MacOS Screen Saver for Beautiful Pictures ‒
Because Your Pictures are Worth it
Did you ever wish for a slideshow screensaver that would show the place and time where the images
were taken? Or find the the folder in which each one is stored on your hard disk?
Do you have multiple monitors and you'd like to display different slide sets on them when
the slideshow is running?
Then ArtSaver might be the right slideshow screensaver for you.
This screensaver presents your pictures as a "slide show" or "picture flow".
It is meant for people who don't need fancy visual effects, but just
some basic animations (zoom in/out, pan & zoom, cross-dissolving, or static display),
but want to see their pictures as big as possible and, in particular,
want more control over the information that is displayed with the image.
You can customize these much more than Apple's built-in slide show screensaver.
It is mostly geared towards people who want to see their collection of beautiful images
as large as possible, and with some information which one of their images they are seeing.
Many artists (photographers, painters, etc.) like ArtSaver.
You can find all of ArtSaver's options at
System Settings → Screen Saver → ArtSaver → Options...
To learn more about an option, just hover with the mouse over the control.
Below are some more in-depth explanations for some of the options.
I think, ArtSaver also handles huge (i.e., 100k+) image collections better than Apple's
built-in picture screen saver, because it builds a database of the images and stores it on disk,
rather than scanning the folders every time it gets launched.
Also, your image collection can be scattered about many subfolders.
For the tech savvy, there is even a way to collect images across different
folders (for instructions, see below).
There is a "companion" app, called ArtSaverApp, which allows you to back up to previously
shown images (using the arrow keys).
How to Review the List of Pictures ArtSaver Has Displayed
In order to retrieve a list of all the images ArtSaver has displayed after you stopped it,
copy this line into Terminal:
log show --predicate 'subsystem == "de.zach.ArtSaver"' --info
(It will take a few seconds to show results.)
Alternatively, invoke Console.app, type "de.zach.ArtSaver" in the search box (w/o quotes),
select SUBSYSTEM instead of ANY, and check Action / Include Info Messages.
Multiple Screens/Monitors
You can use ArtSaver with several screens (monitors) attached to the same Mac.
On the options pane (see above), you need to specify settings for each and every
monitor; the good thing is that you can even specify different image folders,
so you can show different slide shows at the same time.
Installation
As usual, just double-click the file ArtSaver.saver.
(If you had System Settings open, quit that first!)
Then go to
Apple Menu → System Settings → Screensavers → choose ArtSaver.
Then, go to ArtSaver's Options, specify the folder of images,
and set other options as you like.
Alternatively, if you want to install it "by hand", first delete any old copies,
second drag the "ArtSaver" package to either one of the following folders:
/Library/Screen Savers/ (ArtSaver will be available to all users), or,
~/Library/Screen Savers/ (only you can use it)
First Invocation
When ArtSaver is invoked for the very first time (i.e., when you go to "Screensavers"
and click on ArtSaver in the list of available screensavers), it tries to scan the folder
~/Pictures in your home. (Should that fail, you need to change the folder.)
Usually, you might want to specify a different pictures folder anyways, I presume.
However, please note that, as of Mojave (macOS 10.14), it cannot access the photos library any more!
For more information, see
http://www.artsaver.de/index.html
Exporting Photos from the Photos.app
If and when exporting your photos from the Photos app, so that ArtSaver
can access and display them, I recommend the following settings in the Export dialog:
- Include "Title, keywords, and Description" and "Location Information"
- File Name: Use Title (unless the original files already had descriptive file names when importing)
Then, in ArtSaver's options, check "filename" and "info"; thus, you will get the title, and several
other information on the picture in ArtSaver (see below "More Info About 'infos' to read a precise
description.)
Accessing Photos in the Photos.app Directly
There is a "trick" with which you can still - sort of - access directly the photos that are stored
inside Photos.app's database, without exporting them:
1. Copy this as one line into Terminal:
open ~/Pictures/Photos\ Library.photoslibrary/originals
2. A folder will appear with subfolders named with numbers; at the top there is a little folder symbol
3. Open ArtSaverApp's preferences, click "Change", an "Open" dialog will appear
4. Now click and hold the little folder icon of the folder from step 2,
and drag it into the "Open" dialog and release
5. The "Open" dialog should now show the folder from step 2
6. Select "Follow aliases", then click OK
Of course, this is just a crude work-around; you only get all or nothing.
And the filenames don't tell you anything (but the place & date do, hopefully).
Warning: disable the Delete function in ArtSaver's Preferences!
Deleting a photo might render the Photos.app database corrupt!
Companion App
You probably already know that there is a companion app, called ArtSaverApp,
which is a regular app that you can launch yourself and that offers keyboard control.
If you are interested, head over to ArtSaver's home page.
Making ArtSaver Scan a Number of Different Folders,
Difference Between "Use Spotlight" and "Follow aliases" in the Search Options
If the terms "folder alias" or "symbolic link" (a.k.a. "symlink") don't mean anything to you,
then you can safely skip this section and just use the default setting "Use Spotlight".
The option "Follow aliases" is only relevant to people who want or have a more complex folder
structure than just a simple folder with its sub-folders.
For instance, if you have several folders (A, B, ..) that do not reside in a common parent folder,
then you can create one main folder (e.g., "ArtSaver Pictures") and put aliases (or symbolic links)
to the real folders A, B, ..., into "ArtSaver Pictures" (how to create folder aliases).
That way, you can make ArtSaver show images from several different folders.
If you are wondering why there are two different options in ArtSaver:
Spotlight cannot follow aliases (nor symlinks), but the search method I implemented
in ArtSaver is (necessarily) slower than Spotlight.
More Info About the "Info" Checkbox in ArtSaver's Options
Which information does ArtSaver extract from the photo files,
and in which order does it display that?
There are four pieces of info ArtSaver tries to display when you check "info":
1. kind of a "description", 2. keywords/people, 3. location, and 4. date/time.
ArtSaver tries to find this information, then assembles them into one line
to be shown underneath the file name.
Here are the "EXIF tags" ArtSaver evaluates to derive this information:
1. ArtSaver tries a succession of tags to find a "description" of the image:
first, it looks for the IPTC tag "Caption/Description"
(a.k.a. "ImageDescription" or "Caption/Abstract"),
then for IPTC/XMP tag "ArtworkContentDescription", then for the TIFF tag "Image Description";
after all that, it checks for the presence of the IPTC tag "ObjectName" (a.k.a. "Title")
and prepends this to the description, but only, if it is not identical to the filename.
2. The keywords are extracted from the IPTC tag "Keywords"; if not present, it will
try the IPTC/XMP tag "PersonInImage" (a.k.a. "Person Shown")
ArtSaver will try to display all keywords.
3. Location is derived from the GPS info if present in the picture;
if the Mac has internet connection, then ArtSaver will display it as city & country,
otherwise it will just display longitude & latitude.
4. For date/time it uses the EXIF tag "DateTimeDigitized", a.k.a. "CreateDate".
Most of these tags are used by Apple Photos when you export pictures including
Title, Keywords, Description, and Location information.
If you have people tagged in your exported photos from the Photos.app,
then those names will appear as Keywords (older Photos versions) or as
"PersonInImage" (newer Photos versions).
(You can preview the tags by Preview's "Show Inspector";
also, you can view and manipulate tags using the command line tools 'exiftool' or 'exiv2'.)
In addition, ArtSaver filters the description (step 1) in order to economize on screen space:
if there is a common prefix between image description/caption and the filename,
then this is removed from the description.
In the extreme case, if the caption equals the file name, then this is omitted entirely from the info line.
Zoom Direction (In or Out) of Each Image
Usually, ArtSaverApp chooses the zoom direction (in or out) itself, usually alternating.
In cases where the image's aspect ratio or size are extreme, it might choose a zoom direction
different from the regular order.
You can, if you want, explicitly choose that direction yourself by pressing the keys
[ or ] while the image is being shown, in order to fix the direction to "zoom in" (i.e.,
start with small image) or to "zoom out" (start with large image), resp.
If you forget the meaning of those keys, you can always look them up by clicking H.
ArtSaverApp will remember these zoom directions across invocations.
However, it will forget them whenever you do a rescan or change the pictures folder!
If you want to fix those zoom directions for a whole set of images,
I recommend to change the options/preferences temporarily so that ArtSaverApp
switches rather quickly from image to image, and so that the cross dissolve duration
is rather short.
Excluding Specific Image Files
If ArtSaverApp's defaults still allow some "small" images to show up in the slide show
(they will probably look very grainy), you can exclude them by adjusting the "Skip images" settings
(see below).
If you want to exclude specific file formats, for instance, all cr2 files,
then you can add this line in the "regex" field at the bottom left:
.*cr2
You can add similar patterns for other formats (one pattern per line).
On Regular Expressions in the "Skip images.." box in ArtSaver's Options
Here are some examples that, hopefully, get you started:
banana
excludes any images if filename contains "banana" anywhere
.*banana.*shake.*
excludes images if filename contains "banana" anywhere,
followed by "shake" anywhere to the right
.*[0-9][0-9].*
excludes images if filename contains two digits in a row anywhere
[tT]umb.*
excludes images if filename starts with the word "thumb" or "Thumb"
For details on the syntax of regex's, see
https://unicode-org.github.io/icu/userguide/strings/regexp.html .
The Order in Which ArtSaver Shows Images
There are two fundamentally different ways, controlled by the options under "Image order":
1. Random order ("Shuffled" on): should be obvious;
2. Sequential order ("Sorted" on): ArtSaverApp starts with the first image in the list, then displays
the second one, etc., unless "Start randomly" is on, in which case it will pick a random index
in the list of images, and then display images in sequential order from there.
Images can be sorted either:
a) "by filename": the list of images is sorted alphabetically (using the complete path); or,
b) "by date": the list is sorted by the EXIF tag DateTimeDigitized (which is displayed as
Create Date in exiftool). The date stored there is taken as-is,
no time zone conversion is done.
Caveat: this option makes the scanning of your image folder(s) much slower!
Scanning 150k images taking 45GB on an external hard drive will take around 15 minutes.
During one run, ArtSaverApp never shows the same image twice, regardless of the setting of
"Shuffled". Between different invocations, however, behavior is different, depending on "Shuffled":
1. Shuffled on: ArtSaverApp forgets which images were shown in the previous run;
2. Sorted on: ArtSaverApp resumes to display the images where it left off in the last run,
unless "Start randomly" is on, in which case it will pick a new position randomly in the
list of images, and then continue sequentially from there.
Feedback, Bug Reports, Requests for Enhancement
Email: gabriel dot zachmann at icloud com
Home page: www.artsaver.de
Or click on the "Feedback" button in the options pane.
Or enter issues directly at Github: https://github.com/GabZach/ArtSaver/issues
By sending feedback, RFE's, donations, or helping find a bug,
you will become eligible for receiving free betas and updates of ArtSaver for eternity.
In case of a bug report, please send a log file!
You can try to use Console:
https://support.apple.com/guide/console/reports-cnsl664be99a/mac
Or, just copy the following as one line into Terminal:
log show --predicate 'subsystem == "de.zach.ArtSaver"' --info --debug > ~/Desktop/Log.txt
Then send me the file Log that appeared on your desktop.
Mailing List
If you subscribe to the ArtSaver mailing list
https://mailman.zfn.uni-bremen.de/cgi-bin/mailman/listinfo/artsaver
you can receive announcements of new versions (and betas).
The mail volume is extremely low, approximately, on average, 1-2 mails per year.
Change Log (Combined for App and Screensaver)
3.3 (July 2023):
New feature:
- Support for sorting by embedded date, as an alternative to sorting by filename
(EXIF tag DateTimeDigitized, a.k.a. CreateDate)
(Caveat: in case of sorting by date, this takes much longer than sorting by filename!
However, there is no faster way - even exiv2 is as slow as my code; see
also the discussion on https://github.com/Exiv2/exiv2/discussions/2609)
Changes:
- Made the code more robust (hopefully) in the case where several monitors have the same name
(unique-ification part)
- Improved the heuristics (hopefully) to decide when to shrink the size of the history,
in order to ease the memory pressure on Mac's with a small RAM.
- Paths of image files are now truncated at the beginning so that only the part after the common
base folder (which the user selected in ArtSaver's settings/options) is shown
Fixed:
- Potential bugs in scanDirectoryByHand: in case a file URL was no longer available, or
mainDirectoryLocation_ was still nil (which could happen after a fresh install?)
(reported by Tom Cunningham; really fixed?)
- Memory leak in case the image list contained just 1 image
- Screen saver (surrogate) mode handles sleeping Mac better (?)
Known Bug:
- On a multiple display setup, the screensaver (in System Settings) sometimes runs only on one
monitor/display, even though macOS (legacyScreenSaver) launches one instance per display.
This seems to be a bug in macOS 13.x . It affects only some users. Nothing I can do about it ..
3.2 (March 2022):
New features:
- Allows for specification of fixed zoom direction for each and every image individually (in or out)
See the manual for more information (only available in the app, not in the screensaver proper)
- ArtSaver Auto Launcher has a new menu item "ArtSaverApp Preferences", which goes directly to
ArtSaverApp's preferences
Changed:
- Should run natively on Apple silicon (M1 chips); the build is now a "universal" build
- Uses system alert sound now, instead of hard-wired "Funk" sound effect
(System Preferences > Sound > Sound Effects allows users to choose the alert sound they prefer)
- Auto Launcher: when paused, icon is greyed out
- Auto Launcher: "Pause" changed to "Pause 2 hours"
- Skip patterns: you can now also use single words w/o any regex special chars (one per line)
- Formatting of date/time should be more user friendly now and use the locale def'ed in System Pref's
- Better random number generator; hopefully, the image sequence is "more random" now
- When run for the first time, ArtSaver/App tries to scan ~/Pictures by default;
it will store the complete list of pictures found therein using Spotlight, and use them until the user
changes the folder
(rm ~/Library/Containers/de.zach.ArtSaverApp to repeat this process)
- Better handling of common prefixes between caption/title and file name
(common prefix is removed from the description line, i.e., second info line)
- Removed keyboard shortcuts in ArtSaver Auto Launcher (never made sense for status item)
- "Rescan" button initiates rescan right-away, no click on "OK" needed any more
- Several "Image gone" error messages in a row will display for shorter time
Fixed:
- Video conference tools are recognized better by the Launcher; FaceTime included
- In the screen saver surrogate mode, interrupt events are (hopefully) better handled,
e.g., Mac sleep/wake, return key, Facetime call
- ArtSaverApp exits fullscreen when its preferences sheet is brought up
- Non-english monitor names caused problems, should be fixed
3.1.4 (Aug 2021):
Changed:
- Uses system alert sound now, instead of hard-wired "Funk" sound effect
(System Preferences > Sound > Sound Effects allows users to choose the alert sound they prefer)
3.1.3 (May 2021):
Fixed:
- Bug in macOS 10.15.0: consequence is that ArtSaver would not open the
folder dialog when clicking "Change" in Settings, for some users
3.1.2 (March 2021):
New features:
- Auto Launcher has a new "Launch Now" menu item
Fixed:
- The management of different preferences/settings for different monitors had stopped working
(probably due to one of the Catalina updates) -> fixed
Changes:
- Auto Launcher will filter out instances of ArtSaverApp in /tmp and in ~/Library/Developer
3.1.1 (Oct 2020):
This version was necessary to be able to modify the text in the app store,
which I needed to modify in order to clarify something.
3.1 (May-Aug 2020):
New features:
- New stand-alone app that contains all the features of the old ArtSaver
(as opposed to the new ArtSaver which cannot have keyboard control any more)
- Handles huge images (50+ MB, 8000+ pixels) much more smoothly
- You can delay the display of the infos at the bottom; good for having quizz games
- When shuffle mode is off, you can tell ArtSaver whether or not to start with a random image
(when it doesn't, ArtSaver keeps track across invocations)
- You can invoke ArtSaverApp in full-screen: open -a ArtSaverApp --args -f
- Added command line flag -s, to run ArtSaverApp in "screensaver surrogate" mode;
in that mode, it will quit when an unknown key is pressed or mouse is moved
- ArtSaverApp now has a helper app, ArtSaver Auto Launcher,
that can launch ArtSaverApp after some idle time (it will prevent the macOS screensaver from
launching, and it will not launch ArtSaver if one of the well-known video conference tools is
running)
- ArtSaver Auto Launcher can/will launch multiple instances of ArtSaverApp, if present
- Additional tags: TIFF ImageDescription, IPTC ObjectName (Title), XMP/IPTCExt PersonInImage
- Delete key can be enabled/disabled (only relevant for regular app)
Fixed:
- Compiles and runs under Catalina (which incurred a LOT of changes under the hood),
BUT! .. see below
- Delete key did not remove the image from the database
- Removed a bug that caused the previous image to flash for a split-second after it had been
faded out
- The screensaver can run simultaneously on multiple monitors, even if they are identical
(the app can have only one window)
- No "flashing" any more (hopefully)
- With lots of huge images, memory pressure could become very high (due to keeping history
of images)
Much alleviated by changing history size dynamically, depending on the amount of unused memory
- Retrieves ArtworkContentDescription IPTC tag, if CaptionAbstract is not present
- Adjusted font size of help text in case of very large fonts for the bottom lines
- Multi-monitor support got broken b/c of API change
Lost features in the screensaver:
- No more key strokes when the screensaver ArtSaver is running (e.g., the arrow keys are gone)
This regression is due to Apple.
In the regular app, ArtSaverApp, keystrokes (arrows, pause, etc.) are still available.
Actually, it is probably for the better; imagine what a malicious screen saver could do, if keystrokes
are possible, and the screensaver continues to run: it could display a screen that *looks* and behaves
like a login screen! you'd enter your password ...
Changes:
- When run for the first time, ArtSaver doesn't scan ~/Pictures any more by default
- Added security-scoped bookmarks for the folders containing the images,
which incurred a large number of more changes in the code internally (necessary for Catalina)
- Long path names are truncated at the beginning; but only, if the path to the image is being
display, too. Also, the caption (EXIF tag) is *not* displayed, if it is equal to the filename.
3.0.1 (Oct 2019):
Bug fix:
- If all flags (path, name, info) were off, ArtSaver would still show some info
- Reduced the chance of the "flashing" of the previous image when the new one is completely
faded in
3.0 (Sep 2016 - 2019):
New features:
- Can trash images while screen saver is running (delete key)
- Can pause zooming while running (command key) [not quite perfect, but maybe good enough]
- Can toggle display of information at bottom of screen during runtime ( I key)
- Can follow aliases (and symbolic links) in the folder tree
(allows for more complex organization, e.g., one root folder pointing to many different other folders);
- Can display additional info of photos, if available; currently, ArtSaver looks for
Description, Keywords, and Location (see Info in Photos.app) [gone]
- Drop shadow behind text
- Can display GPS location, EXIF date, and caption/keywords (IPTC) metadata
- Ken Burns effect
- Rearranged GUI (screen saver options pane)
- Trilinear filtering of images
- Can blank the screen at runtime with the B key
- Can show only path w/o filename (until now, only filename, and file+path were possible)
Lost features:
- Can't access the photo library any more :-( ! (due to Mojave's new security features, which are good)
- Parameter "cycle time" is gone now; I figured it is not really necessary;
now, (cycle time) = 0.5 * (image duration time)
Enhancement of existing features:
- Can use up/down cursor keys (as alternative to left/right) for switching to previous/next key
- When images are displayed randomly, none of them is shown twice until all have been shown at least once
- No limits on image size any more (almost none)
- The "Rescan Now" button also applies to photo albums [defunct]
- Dito for the Automatic Rescan
- In case images are displayed in non-random order, then they are sorted alphabetically
(sorting is done on the complete path)
Changes:
- Use donorbox.org for the donation button
- Replaced iPhoto albums by Photos' albums (Defunct as of 2019)
be sure to right-click on the album and "Download Originals to this Mac"!
It also respects the "Hidden" flag, i.e., photos in the Hidden album are never shown
- Slight changes in the screen saver options dialog
- Uses NSPathControl instead of NSTextField for the images directory
Bug fixes:
- Hot corner for starting the screensaver seems to work again
- Cross-dissolve works again
- When ArtSaver is interrupted (e.g., by the user moving the mouse) and then resumes later,
then it continues in the list of images at the same point where it left off (when randomization is off)
- Chinese file names should work now
- Randomization did not work sometimes (seed was missing)
Under the hood: Replaced a lot of deprecated API methods:
- Text drawing (replaced CGContextShowTextAtPoint et al. by CTLineDraw et al. from Core Text)
- loadNib:owner:
- headermaps
- ModifierKeyFlags
- Replaced Scripting Bridge with MLMediaLibrary, in order to access Photos (now defunct, too)
- Switched from NSLog to os_log(3): NSLog() is deprecated, and os_log provides better
functionality in Console.app and log(1)
- Switched from manual retain/release to ARC (at last)!
- Use CATextLayer for rendering the file name (gets rid of some compiler warnings, too)
- More efficient handling of the EXIF orientation flag
Known bugs:
2.2 (Feb 2011):
New features:
- ArtSaver can handle multiple monitors (screens), i.e., it will store different preferences for each
screen; in particular, this will allow you to display different image lists on different screens.
(For this to work, you must uncheck "Main screen only" in System Preferences / Screen Savers!)
There is a deliberate offset between the two (or more) screens, in order to prevent disk fighting
in the case all screen savers have the same duration per image. (In that case ArtSaver would have
to load the new images at the same time for all screens.)
Keyboard input (pause, forward, backward, show in Finder) goes to all screens simultaneously.
- You can switch cross-dissolve off, and you can change the duration of a cross-dissolve
- ArtSaver can now automatically re-scan the directory / photo album after a user-specified time
- The "skip patterns" are now regular expressions (not file patterns any more!);
this gives you more flexibility
- The "skip patterns" (regexp's) can handle unicode now (i.e., characters from all languages)
- You can switch off the displaying of the image file name's extension (e.g., the ".jpg" suffix)
- General improvements of the user interface of the configuration sheet
- When displaying images in sequential order ("Randomize images" is off), you can now go back
(cursor left) indefinitely
Bug fixes / changes:
- Matching of the skip patterns was buggy
- When presenting images sequentially, ArtSaver "forgot" where it was stopped last time, so it always started
with index 0 (= first image in the list) each run;
now, it continues with the image it displayed during the last run
- Should work under 10.5 again (it does work on my machine with 10.5.8 / PPC G4)
- Improved the part of the UI controlling the options for the displaying of the file names
2.1.1 (May 2010):
Bug fixes:
- paths beginning with "/tmp" were handled incorrectly
- path with UTF8 characters didn't print at all in the log file
2.1 (Nov 2009):
Bug fixes:
- path names with '/' were not handled correctly
- maybe, version 2.0 contained a bug when searching was done by hand
("Use Spotlight" box is off); this should be fixed
- the usual installation via double-click should work now
2.0 (Sep 2009):
New features:
- pause animation (space bar)
- leaf through previously shown images (left/right cursor)
- show image in Finder (return key)
- switching images is now done with cross-fading
- CPU usage is now only 5% (before 60%!); at least on my MacBookPro under 10.5.8 with an Intel
Core 2 Duo and using the GeForce 9400M. This is made possible by utilizing Core Animation,
which entailed a heavy internal restructuring of the code
- correctly observes the EXIF orientation tag
- new control over whether/how many images should be displayed without black border
- non-randomized image picking (always goes through the images in the same order)
- runs under both Snow Leopard (10.6) and Leopard (10.5)
- raised the text line with larger displays
- version number in config sheet is extracted automatically from the Info.plist
Bug fixes:
- New preferences sometimes didn't get saved;
code for preferences handling is much cleaner now.
- Works on PPC again (still needs 10.5 or higher)
1.7 (Mar 2008):
Can use iPhoto albums now. (Still creates a list of images, thus iPhoto does not have to get invoked
during actual screen saver runs, only during configuration.)
Works only under 10.5 (Mac OS X Leopard).
1.6.3 (Feb 2008):
Compiled for Leopard.
Improved handling of error messages, for instance, "Image gone: ..." is
being displayed now for only 3 seconds.
Improved the scanning directory trees for images "by hand", i.e., without using Spotlight.
Version number in config sheet and info.plist
1.6.2 (Jul 2007):
Fixed a bug, which apparently occured very rarely.
Symptoms: ArtSaver worked in Preview mode, but showed a blank screen in full-screen mode
1.6.1 (Jul 2007):
Small images are now displayed at a minimum size of 0.4 * screen-size,
even if the user chooses to have ArtSaver display much smaller images.
1.6 (Jul 2007):
New option to adjust to font size of the image file name.
A 'rescan' button to ease invoking a rescan of the image directory when its contents change often
1.5 (Mar 2007):
You can see the "picture log" in either of two ways:
In a Terminal 'syslog -k Sender ArtSaver';
or, via Apple Menu -> About this Mac -> More Info -> Logs -> system.log
Option to display only the basename of the pictures.
Option to switch the zoom in/out effect off.
Various little things in the source code.
Acknowledgements
I'd like to thank the kind people on comp.sys.mac.programmer.help, in particular, Michael Ash,
Doc O'Leary, David Phillip Oster, Nick Hristov, Uli Kusterer, Patrick Machielse, Matt Neuburg.
I am also extremely grateful to the kind people on the cocoa-dev mailing list (in particular, Douglas Welton,
Shawn Erickson, Graham Cox, Jens Alfke, Nick Zitzman, Quincey Morris, Gary L. Wade,
Richard Charles, David Duncan, Alex Zavatone, Glenn L. Austin, Rob Petrovec,
Steve Mills, Trevor Phillips, Jim Crate, Stephane Sudre, and many more)!
Without them, I could not have implemented some of the features.
Many thanks also to those users that have sent in requests for enhancement or bug reports and helped
with testing new features. In particular, I'd like to thank Jerome Bullard, Lars Gottlieb, Aaron Reitz,
Christian Aubert, Pete Norloff, Doug Gordon, Jay Novello, Jean Devriendt, Bernhard Gantner, David Marriott,
Samphois Pin, Jim Test,
Last, but not least, a huge "thank you" goes to the developer of SaverLab! Without it, developing screen savers
would have been virtually impossible.
Copyright
Gabriel Zachmann, 2005-2077