This page explains the SFW93A format in detail. It also explains several different ways to convert the SFW93A format to .jpg and other formats.
The SFW93A format is a Seattle FilmWorks slightly reformatted JPEG image, where the reformatting consists of:
The first 6 bytes of a file in this format are: SFW93A. This is a rarely seen, short-lived, original manifestation of the SFW format that appears to be very low resolution (320 x 200 pixels). It's been seen on Seattle FilmWorks PICTURES ON DISK! 3.5 inch diskettes dated 1994.
The SFW93A format files usually have a filetype of .#nn (eg, .#00, .#01, .#02, ..., .#24, etc), though you may also encounter files that have been renamed like ".#00.sfw", or have been renamed as ".sfw" where the 2 digits that originally came after the "#" are moved in front of the dot (eg, "28048871_24.sfw").
Nord's sfwjpg (circa 2016-04 or later) (Vista, Win7, Win8, Win8.1, Win10), XnView (PC, Mac, Linux, etc), and PhotoWorks (in both its PC and Mac form) are the only known public programs which can directly convert this SFW93A file format. See this nutshell of the (circa 2016-04 or later) Nord's sfwjpg ability to convert an entire directory of SFW93A images. It's quite easy. See this concise hint for how to convert SFW93A by using XnView. See this description for 2 different ways to convert SFW93A by using PhotoWorks. But also, the SFW93A format can easily enough be converted manually using a hex editor (like this), or with Nord's HexDump and a text editor (like this). If all the above approaches fail, then the EZPOD.EXE and EZSFW.EXE programs (see here) on the Seattle FilmWorks diskettes might possibly be used as a fallback, though I do not recommend them.
I first heard about the SFW93A format in the PMView Pro shareware documentation on their Seattle FilmWorks (SFW) help page, explored briefly using the PhotoWorks software and by peeking inside podw.exe using IDA freeware [ie, IDA v5.0 freeware, not the more capable IDA v7.7 (or higher) freeware that the link shows], and finally (as of 2015-01) gleaned the SFW93A format internals after Ryan Finnin Day graciously provided an entire roll of such images inside a directory whose name was in the form "nnnnnnnn.ROL", where nnnnnnnn are the digits of the roll #. The filenames in that directory had the general form of "nnnnnnnn.#nn", where "nn" is the image # (except for the first file, which I suspect Ryan had renamed).
It was originally uncertain to me if Ryan's .ROL directory's contents were a direct copy of such a directory on the original Seattle FilmWorks supplied 3.5" diskette, since Ryan no longer had that original diskette. After examining the three (3) PICTURES ON DISK! diskettes that Helmut Jurgensen graciously sent me in 2016-05, I could see that Ryan's .ROL directory contents were indeed a direct copy, except that he had renamed the first file to include an .sfw suffix.
To give you a concrete example, here's the filenames I saw in directory \28048871.ROL:
So far, from analyzing these images, from the original code analysis with IDA, from experimenting with PhotoWorks and other image oriented software, and from examining Helmut's SFW93A images, I've concluded:
The SFW93 string does exist in podw.exe, but only as SFW93A. So I assume there are no other SFW93x variants.
The .#?? in the PhotoWorks pulldown menu for Files of type -- which can be seen when accessing the Files / Add Images function after a new or existing album is opened -- are presumed to be in SFW93A format. The '??' are digits.
The very-JFIF-like image inside the SFW93A format file begins at offset 0x1E (30).
Correction:
Previously (on 2013-01-25), I had inaccurately published
at jonesrh .sfw conversion portal
that the SFW93A JFIF SOI marker began at offset 0x18 (24).
I misinterpreted something in the disassembly by IDA.
The correct offset is 0x1E (30).
Thanks, Ryan, for sending the SFW93A examples
and making this correction possible.
And, thanks, Helmut, for supplying some more SFW93A examples
which affirm the corrected, 0x1E (30) interpretation.
The SFW93A format image does not mangle the JPEG/JFIF markers. It uses standard JFIF markers for: SOI, APP0, COM, DQT, DHT, SOF0, SOS, EOI. [Apparently, Seattle FilmWorks introduced JFIF marker mangling with the later SFW94A format.]
However, the 5 bytes in the SFW93A APP0 block that follow the length (and contain JFIF\0 in a common .jpg file) are not a null-terminated (implied ASCII) identifier of the company name or trademark (as the JFIF standard suggests), but instead are some sort of binary encoding. The values that I've seen so far (in this single roll of images) are hex "00 57 00 3E EC" and hex "00 65 00 3E EC". In Ryan's roll, the even numbered images used "00 57 00 3E EC" and the odd numbered images used "00 65 00 3E EC". That did not correlate with which image was horizontally vs. vertically positioned.
Also, the SFW93A COM field is not in ASCII, but instead seems to be some sort of binary encoding which also includes that same 5-byte signature that the SFW93A APP0 block used, along with other (apparently) binary data which I don't comprehend.
Only one image is included. No thumbnails are included in the SFW93A format image.
The 10 bytes which immediately follow the SFW93A magic id are a representation of the numerical digits used in the roll # and the image # (not those digits' ASCII encodings). Those digits could be used to construct the filename and filetype. For example, hex dumps of bytes at offset 0x06 - 0x0D in each SFW93A file show the following association:
hexadecimal representation filename.filetype ----------------------------- -------- -------- 02 08 00 04 08 08 07 01 00 01 28048871.#01 02 08 00 04 08 08 07 01 00 02 28048871.#02 . . 02 08 00 04 08 08 07 01 00 09 28048871.#09 02 08 00 04 08 08 07 01 01 00 28048871.#10 02 08 00 04 08 08 07 01 01 01 28048871.#11 . . 02 08 00 04 08 08 07 01 01 09 28048871.#19 02 08 00 04 08 08 07 01 02 00 28048871.#20 . . 02 08 00 04 08 08 07 01 02 04 28048871.#24
The structure of the 14 bytes from after the image #, starting at offset 16 (hex 10) and ending just before offset 30 (hex 1E), where the SOI / APP0 markers (FF D8 FF E0) begin, is not understood.
The DQT table is not one that I've seen before.
The Huffman table included seems to be the same one used by Lipman/Nord's sfwjpg.
How to convert a roll of SFW93A files using Nord's sfwjpg
If you have a directory of .#nn (or .sfw) files in SFW93A format,
you can use Nord's sfwjpg to convert the images faster
than any other method. Nord's sfwjpg is very easy to setup, and
it's very easy to use.
Nord's sfwjpg will convert automatically at a 75% quality.
Most often, that will not show any visually detectable loss
(since the SFW93A images are already at such a low resolution --
320 x 200).
The steps to use Nord's sfwjpg to convert an entire roll of SFW93A format images is:
Display Nord's SFWJPG - Seattle Filmworks to JPG conversion (Windows) page.
Click one of the 2 video links provided on that page.
Follow the steps in Nord's sfwjpg video to get the sfwjpg.exe program into the directory where the SFW93A images reside.
Issue the following CMD Prompt command from that directory of SFW93A images:
If any of the SFW93A format files have previously been renamed with the.sfw filetype, then also issue the following CMD Prompt command:
That's probably the easiest, quickest way to convert an entire directory of SFW93A format images to .jpg.
Added benefit
Item 5 also serves the dual purpose of probably being the easiest,
quickest way to convert an entire directory of (compressed) SFW94A format
images -- the vast bulk of .sfw images -- to .jpg.
How to convert a roll of SFW93A files using XnView
If you have a directory of .#nn (or .sfw) files in SFW93A format,
you can use XnView to display and convert the images probably faster
than any other method (except Nord's sfwjpg).
XnView will convert automatically at a
high quality which will not show any visually detectable loss.
The steps to use XnView to convert a roll of SFW93A format images is:
Use XnView's Browser window to open the directory of SFW93A format .#nn or .sfw files.
Open one of the .#nn or .sfw files.
Use XnView's Tool / View in Hex mode function to see if the file begins with SFW93A.
Exit that Hex mode listing by pressing the Esc key.
If that file began with SFW93A, then its probably safe to assume all the .#nn or .sfw files in that directory are SFW93A format. In that case, continue:
Double-click open a .#nn or .sfw file.
Click File / Save As.
Add a suffix of _nn to the filename (just before the suggested .jpg).
For example, if you had opened file 28048871.#01, then add suffix _01 so the filename looks like 28048871_01.jpg.
Click Save.
Repeat steps 5-8 for each .#nn and .sfw file which is in SFW93A format.
That's probably the second quickest way to convert an entire directory of SFW93A format images to .jpg (unless you can figure out how to automate that sequence with XnView's Batch facility). Furthermore, it will be seamlessly performed at a 90% quality level, so you'll likely not be able to visually detect any loss of quality. XnView's quality level is much better than the PhotoWorks Batch Convert 75% quality level (which can not be increased).
How to convert a roll of SFW93A files using PhotoWorks for Windows
Even though the PhotoWorks programs for the PC and the Mac
are two good ways to read and convert SFW93A format files,
you should first prepare a directory (containing such
SFW93A format files) for PhotoWorks
by renaming each of the files so the image #
is appended to the roll #. Otherwise, PhotoWorks will
not recognize the images as being uniquely named.
You might as well change the filetype to .sfw at the same time.
For example, you might do something like renaming similar
to the following example, where the roll # was 28048871:
original new filename.filetype filename.filetype -------- -------- ----------- -------- 28048871.#01 28048871_01.sfw 28048871.#02 28048871_02.sfw 28048871.#09 28048871_09.sfw 28048871.#10 28048871_10.sfw 28048871.#11 28048871_11.sfw 28048871.#19 28048871_19.sfw 28048871.#20 28048871_20.sfw 28048871.#24 28048871_24.sfw
You could do that manually, eg, using CMD or Windows Explorer, or you could automate it a bit using a PowerShell script similar to the following:
# # rename_sfw93a_rrrrrrrr_hnn_to_rrrrrrrr_nn_sfw.ps1 -- # # Rename SFW93A images rrrrrrrr.#nn to rrrrrrrr_nn.sfw. # echo "Directory before renaming..." dir echo "Rename SFW93A images rrrrrrrr.#nn to rrrrrrrr_nn.sfw..." gci *.#[0-9][0-9] | % { ren $_.FullName "$($_.BaseName)_$($_.Name.substring($($_.Name.length)-2,2)).sfw" } echo "Directory after renaming..." dir
Then run PhotoWorks and follow a sequence similar to the following example:
Wait for the splash screen to disappear or make it go away immediately by clicking on it.
When the Album Wizard appears, click Using images from your computer, then OK, then Next.
When "Album Wizard - Step 2 of 5" appears, type a description for the album. For example, you might type the roll #, its date or a range of dates, and the general subject matter.
Click Next.
Select a thumbnail size, then click Next.
When the "Add Images" dialog box appears, browse to the folder which contains your renamed SFW93A images (in which the image # is appended to the roll #), select each of the images using standard keyboard combinations that select multiple items at a time: eg, Ctrl-A, Shift-cursor keys, Ctrl-cursor keys, single click, etc, then click Open.
When the "Album Wizard - Step 4 of 5" page box appears, verify all the images are in the list, then click Finish.
The entire album of image thumbnails should appear.
At this point, you can follow the next step to quickly convert these images to commonly readable .jpg files using the PhotoWorks' Batch Convert function:
Select all the images using Ctrl-A or one of the other multi-item keyboard selection mechanisms, then click Batch / File Format Convert, then on the Batch Conversion dialog box, choose your format (eg, .BMP, .JPG, or one of the others), browse to your chosen destination directory, then click OK.
The problem with that approach when you choose .JPG as the output format is that you'll lose significant resolution during the conversion. It might be better to choose .BMP, then use another image processing tool before finally converting to .jpg format.
But another way to use PhotoWorks to save to .jpg format without losing much visually detectable resolution is to save each image individually. That way you can control the saved resolution. I'd suggest saving them at the 85% to 90% quality level. Then afterwards you can send the resultant images through jpegcrop (or some other similar tool) to losslessly rotate and/or crop the edges, without losing any more resolution.
To perform the resolution (ie, quality level) controlled, individual image .jpg save in PhotoWorks, do the following steps beginning while the Album window is open and all the image thumbnails are visible (ie, after step 8 above):
Open an image by double-clicking it.
Click File, then Save As/Convert To.
When the "Save As..." dialog box occurs, select the JPEG (*.JPG) item in the "List files of type:" pulldown menu.
Locate the desired destination folder and double-click on it.
Click Options >>.
Change the quality to 90 %. The easiest way to do that is to move the slider all the way to the right, then clicking once to the left of the slider button.
In the "Filename" box, optionally change ".JPG" to
".jpg".
[The change to lower case seems to work only
at this late stage.]
Click OK.
Then repeat steps 10-17 for each of the SFW93A format images.
How to manually convert a SFW93A file to jpg using a hex editor
Even though the XnView program and
the
PhotoWorks programs for the PC and the Mac
are probably the best way to read and convert a SFW93A format
file (with the possible exception of a program supplied on the
original Seattle FilmWorks diskettes along with the SFW93A format
images), some people might not have the proper hardware/software
to run XnView or PhotoWorks. There is a fallback mechanism for
those folks. A SFW93A format file can also be manually
converted to a JPEG/JFIF .jpg file fairly easily using
a hex editor followed by some file renaming.
Use the following sequence:
Open one of the SFW93A format .#nn image files in a hex editor.
Edit the 5-byte signature in the APP0 segment, starting at byte 36 (ie, hex offset 0x24), immediately after the APP0 segment's length, ie, immediately after the "FF D8 FF E0 00 10" that begins at offset 30 (hex 1E).
Change the bytes after the "00 10" to 4A 46 49 46 00, which equates to "JFIF\0", the standard APP0 signature in a JPEG/JFIF .jpg file.
Verify that what precedes "JFIF\0" is "FF D8 FF E0 00 10".
Verify that what succeeds "JFIF\0" is "01 01 00 00 01 00 01 00 00".
Delete the first 30 bytes (ie, hex 1E bytes), thereby leaving the JFIF signature "FF D8 FF E0" as the first 4 bytes of the file.
Close the hex editor and save the editing changes.
Suffix the filename with the image # and rename the filetype to .jpg. For example, rename "28048871.#01" to "28048871_01.jpg" or rename "28048871.#24" to "28048871_24.jpg". The renaming is similar to that described above, except the resultant filetype is .jpg (instead of .sfw), since your hex editing has already effected the conversion to JPEG/JFIF format.
How to manually convert a SFW93A file to jpg using Nord's hexdump and a text editor
Joe Nord's HexDump
utility can be used to fairly quickly, manually, losslessly
convert SFW93A format .#nn and .sfw images to .jpg.
It is another variant of the hex editor method just mentioned.
However, I think Joe Nord's HexDump is easier to use than a typical
hex editor.
Probably the best way to understand how to do this is to review Using Nord's HEXDUMP to see SFW signatures in a hex dump, then imitating its example, adapt its example for each of the image files in your particular roll's directory.