Sailfish 7.1 & 4.2 Release Notes

10 February 2013

The following are release notes for

  • Sailfish 7.1 for Replicator 1s & 2s
  • Sailfish 4.2 for Thing-o-Matics & Cupcakes
  • ReplicatorG 40r5 - Sailfish

As per the Sailfish Installation Guide, the Sailfish firmware may be obtained using ReplicatorG and pointing the download URL at

The download URL is set via the Advanced section of RepG's Preferences menu. Distributions of ReplicatorG 40r5 - Sailfish can be found as downloads of Thingiverse Thing 32084.

New for all machines

Excepting the first item listed, the following are new in Sailfish across all machines,

  1. Replicator 2: Replicator 2s are now supported. See "Usage on the Replicator 2" for additional details. While the firmware should also work with the Replicator 2X, that has not been tested yet and should therefore be considered experimental.
  2. SD card folders: Even works for bots without LCD displays! See "SD card folder support" for additional information.
  3. Refined acceleration planner: This code has been available as a beta download since early December 2012. MBI, in incorporating Sailfish into their own firmware, has already release this refinement in their 7.0 firmware release.
  4. MBI's new dualstrusion system: The new dualstrusion system introduced in ReplicatorG 40 and also used by MakerWare is now supported without the need to change the toolhead offset values in EEPROM. Sailfish now supports both the old and new systems using either the old or new EEPROM toolhead offset values. I.e., there's no need to change your toolhead offsets when switching between the two systems. However, it is helpful to change the X Home Offset by 16.5 mm since the toolhead centering is different between the two systems. The firmware setting associated with this new support is named "Toolhead Offset System" and can be changed from either the LCD display or ReplicatorG 40r5 - Sailfish:
    • LCD display, Replicators: Utilities > General Settings > Tool Offset Sys
    • LCD display, Gen 4 electronics: Build Settings > Toolhead System
    • RepG 40r5 - Sailfish: use Machine > Onboard Preferences. Look under the "Acceleration (Misc)" tab for Replicators and the "Misc" tab for other bots.

    The settings for this option are "OLD" and "NEW". The OLD system is the dualstrusion system used in RepG 39 and earlier in which G10, G54, and G55 commands are used in the GCode produced by RepG. The NEW system is that used by RepG 40 and MakerWare. See "A brief history of the toolhead offsets" below for a more detailed description of these two systems.
  5. Updated ReplicatorG: ReplicatorG 40r5 - Sailfish contains "Sailfish" machine definitions for all bots now. It also contains a Replicator specific driver, "mightysailfish", to prevent further issues with MBI changing the "mightyboard" driver. See "New in ReplicatorG 40r5 - Sailfish" for further information.
  6. Long filenames: SD card file names of up to 64 bytes are supported for builds from SD card when using the LCD display. This is the maximum length allowed by the FAT-16 file system used on the SD cards. As an aside, note that MBI recently reduced their maximum length from 26 bytes + ".x3g" down to 19 bytes + ".x3g". Would seem to be the "cut off your nose to spite your face" approach to addressing any concerns about filenames being longer than the LCD's display width. Sailfish has always dealt with this issue by auto-scrolling long file names in the display. Note also that owing to limitations of the s3g protocol used to communicate between RepG and the bot, file names longer than 26 + 4 cannot be supported. This only impacts printing from an SD card via ReplicatorG's "Build from SD" menu.
  7. Speed control: Adjust the print speed while printing. See "Speed control" for details.

As regards support for both the old and new dualstrusion systems, you do not need to change your toolhead offset settings unless you were using large negative values in order to coerce Sailfish 7.0 or earlier to work with the new system (e.g., -33.0 mm). If you had typical values — either small values in the neighborhood of -1.0 to 1.0 mm or large values with the X toolhead offset near +33.0 mm and a possibly small Y toolhead offset — then you do not need to change your toolhead offsets. Sailfish will automatically adjust them to the currently selected system. The nozzle calibration script will also correctly work with either styles of offsets. However, in an effort to save code space, only one nozzle calibration script is supplied. It requires that the Toolhead Offset System be set to NEW in order to run. If you prefer to use the old system, that's okay: just set the Toolhead Offset System to NEW, run the script, and then change it back to OLD. As the scripts each consume 4.7K of program space, the savings is significant (in as much as there's only 124K of program space and only 6K free at this point).

Additional new features specific to individual bots are presented in the next two sections.

New for the Replicator 1 and 2

  1. Replicator 2: As mentioned above, the Replicator 2 is now supported. The firmware should in work with a Replicator 2X as well, but that is untested at this point and should be considered experimental.
  2. Build stats "ticker": For Replicator 2's, the free space on the LCD display whilst building is used for a crawling ticker display of the ongoing build statistics: current Z position, filament used, time spent so far, and estimated time remaing. The Thing-o-Matic acceleration stats are not shown as they require computation time which is in shorter supply on the Replicators owing to their increased micro-stepping. This additional display space is available on the Replicator 2 as it only has one heater — the extruder — to display.
  3. Extruder Hold: This feature which is already available for bots with 3mm extruders is now available for Replicators and is enabled by default. Extruder Hold prevents slight, unwanted filament retractions when using GCode that disables the extruder's stepper motor before travel moves with a M103 command. RepG 39/40 with SF-50 seems to like to do this: put in M103 commands before every travel move. When the extruder's stepper motor is disabled, the pinch gear free wheels and the filament can back out. Extruder Hold can be set via the LCD display or from RepG's Onboard Preference's "Acceleration (Misc)" tab. When printing dualstrusion prints, you may want to disable this setting as it will, in all likelihood, result in additional oozing from the idle extruder.
  4. Bot statistics: The "Bot Statistics" item from MBI's firmware has been added to the Utilities menu. It also displays the filament usage odometers.
  5. Usability: Some minor usability tweaks through the re-arrangement of some items in the Utilities and General Settings menus. Note also that the filament load and unload menus are now presented in the order of unload then load — a more natural workflow.
  6. Nozzle calibration: The nozzle calibration script has been updated and works for both the Replicator 1 and 2X. It does require that the Toolhead Offset System be set to "NEW". However, it will work with either style of toolhead offset settings stored in EEPROM. If you prefer to use the "OLD" Toolhead Offset System, then simply switch back to it after running the nozzle calibration script.
  7. Long build names (fix): Long build names no longer wrap onto the second line of the LCD display.
  8. Build pause, cancel, etc. menu (fix): scrolling between screens in the build pause, cancel, etc. menu didn't behave correctly. This has been corrected.
  9. Line count (fix): The line count display in the Build Stats screen would often show nothing. This was a bug in the MBI firmware as well in which the wrong routine was being used to format the value for presentation on the LCD display. It's now corrected in Sailfish.

To change onboard preferences, Replicator 1 and 2 users of Sailfish should use "ReplicatorG 40r5 - Sailfish" and select a machine type with "Sailfish" in the name (e.g., "Replicator 2 (Sailfish)"). The Sailfish firmware works with x3g files from MakerWare. It's only when inspecting or changing onboard preferences — EEPROM settings — that ReplicatorG 40r5 - Sailfish is necessary. And yes, ReplicatorG 39 - Sailfish also works fine for changing onboard preferences in Replicators 1 or 2. However, that version of RepG does not know about the Extruder Hold or Toolhead Offset System settings.

New for Thing-o-Matics and Cupcakes

  1. Dualstrusion and Pause @ ZPos: Pause @ ZPos is now supported for both extruders and not just Tool 0. Previously, it would only unload and load filament from Tool 0. That has been corrected to unload and load filament for the currently active extruder.
  2. Builds from RepG: When printing from an SD card with a bot which lacks a Gen 4 LCD display, the bot will return to a "ready" state once the print is finished. RepG users do not need to tell the bot to reset from RepG; the bot will be ready for more printing.
  3. Filament load & unloading speeds: Whilst using Pause @ ZPos, the filament speed was not computed correctly. It is now correctly computed. Note, however, that the speed is not the output rate of plastic from the extruder, but rather the input rate of filament into the extruder. So a low value of 3 mm/s results in nearly 34 mm/s of output plastic for a 1.75 mm extruder. The bot itself does not have the necessary information to convert input rates to output rates: that requires knowledge of the extruder geometry. Something that is known to RepG but not to the bot itself.

New in ReplicatorG 40r5 - Sailfish

  1. New icon: A new icon courtesy of Greg. Thanks Greg!
  2. New driver: A new Sailfish driver for Replicators has been added, "mightysailfish". When using ReplicatorG 40r5 - Sailfish, select a machine type with "Sailfish" in it.
  3. Fixed EERPOM read/write issues: Changes by MBI which could write incorrect values to EEPROM on Replicators running Sailfish have been fixed. It is safe to use this version of RepG with Replicators.
  4. New machine types: Added ToM + Mk6 and ToM + ABP machine types to the Sailfish machine types. And, of course, Replicator machine types were also added in support of the new driver mentioned previously.
  5. Fixed start.gcode: Cleaned up the MBI supplied start.gcode files and samples built with them. A number of the start.gcode files in the sample slicing profile alteration directories were (1) for the wrong bot, or (2) contained a syntax error, or both.

Note that ReplicatorG 40r5 - Sailfish this is a version of ReplicatorG 0040 and ReplicatorG 0040 implements MBI's new dualstrusion system. If you wish to continue using the old dualstrusion system, then use ReplicatorG 39 - Sailfish for slicing and only use ReplicatorG 40r5 - Sailfish for setting onboard preferences.

SD card folder support

From RepG or from the LCD display, you can navigate to folders on your SD cards. In either case, if you reset the bot or remove the SD card, your folder context will be lost and you will start again in the top level folder on the SD card.

From RepG, use the "Build from SD" menu. Select a folder in the listing presented by RepG and "build" it. The build will finish instantly: this is normal. (Actually, RepG will state that it completed in "1 minute", but that dialog comes up immediately.) If you again use "Build from SD", you will see a new directory listing showing the contents of the folder you selected. To move back up to the parent folder, "build" the folder named ".." which is the way the SD card's file system represents "return to the parent folder".

From the LCD display, folders are indicated by a solid black triangle appearing just before the folder's name. To move into a folder, just select it. You will now see a listing of the contents of that folder. To return to the parent folder, select the ".." folder which also shows a "return" arrow.

When saving or restoring EEPROM with the SD card, the dump file will be placed in or read from the current directory. You can therefore use the "Print from SD" menu to navigate to a desired directory and then exit that menu. Then call up the EEPROM menu in order to save a dump file to that directory or read one from it.

WARNING: If your SD card hardware is malfunctioning such that the tiny switch which detects whether or not a card is inserted, then this new Sailfish firmware will not allow you to use your SD card. HOWEVER, there is a workaround you may use while you wait for replacement hardware: use the "r866b" variant of the firmware. That firmware is available in the firmware upload screen as "for bots with broken SD card hardware". It uses the older SD card handling logic which is less sensitive to this hardware problem. However, it also does not provide folder support. Further information on this topic may be found at,

Speed control

For all bots capable of having an LCD display, two versions of the firmwares are now distributed: one with a speed control menu and one without. If you wish to experiment with this new feature, install the firmware revision with "s" appended to its name (e.g., "r860s"). No special gcode or firmware settings are required to enable speed control. You just need to install the firmware which contains it.

The speed control can be used while printing to either increase or decrease the printing speed. To access the speed control, use the normal button press to call up the cancel, pause, etc. menu list. The speed control menu then lets you adjust a multiplicative scaling factor by which to multiply (scale) all feedrates, be they printing, travel, or extrusion only. A factor less than 1 slows things down, while a factor larger than 1 speeds up the print. The permitted range is 0.1 to 5.0. The bot will apply the maximum per axis feedrates to prevent your bot from running too fast. However, the maximum allowed X and Y feedrates are in excess of 200 mm/s. You likely do not want your travel speeds exceeding 200 mm/s; otherwise, skipped steps may result. Consequenly, be conservative when speeding up printing.

Note that Sailfish normally prints beautifully even at very high feedrates in excess of 120 mm/s. Issues that other firmwares may have with blobbing when rapidly printing fine, small detail are not nearly as signficiant with Sailfish owing to its much faster acceleration planner which prevents the stepper interrupt from having to idle waiting for more planned segments. As such, this speed control has arguably less value with Sailfish as it might with other firmwares. However, it is available for folks who wish to use it.

Why is this supplied as a separate firmware? Jetty and Dan are still a little unsure of its utility and it has not necessarily seen the same rigorous level of testing as the rest of Sailfish. It was implemented late in the development cycle of this release. While it was actually very simple to implement and testing has not indicated any problems, it should not be considered as stable or mature as the rest of Sailfish.

Usage on the Replicator 2

Installing Sailfish on a Replicator 2 or 2X is essentially no different than installing it on a Replicator 1. The only difference is that Replicator 2 and 2X owners should ignore any directions to press the (non-existent) "reset" button when loading the firmware to their bot. Otherwise, follow the directions at

Replicator 2X owners wishing to try Sailfish should, after installing Sailfish, navigate to the "General Settings" item of the "Utilities" menu via their bot's LCD display. Within the general settings, set the extruder count to 2 and also indicate that a heated build platform (HBP) is installed. Those are two different items in the general settings menu.

A brief history of the toolhead offsets

This history tersely presents the old and new dualstrusion systems from MBI. When printing with dualstrusion, the bot needs to move the extruder carriage to the left or right when switching from one extruder to the other. The distance it needs to move is the distance between the two extruder nozzles. In theory, the "ideal" distance between them is 33.0 mm for a Replicator 1 and 35.0 mm for a Replicator 2X. However, there's often slight variations of as much as 0.5 mm.

In the old dualstrusion system, the ideal distance between the extruders was accounted for in the gcode produced by RepG. Gcode coordinates for printing with one extruder are to the left or right of the other extruder by the ideal distance. The variations from the ideal were then handled by the bot which stored in EEPROM the calibrated variations referred to as "toolhead offsets". In the new dualstrusion system, RepG and MakerWare and the gcode they produce does not account for the spacing between the extruder nozzles. Instead, the bot knows the total spacing: ideal plus or minus the variations. The bot then accounts for the total spacing when switching between extruders.

RepG 29 (11 December 2011; MBI 5.x firmwares)

  1. Each toolhead moved one-half the ideal toolhead offset of 33.0 mm in gcode,
  2. G10 P1 X-16.5 ( X coordinates += -16.5 mm after a G54 command issued )
    G10 P2 X+16.5 ( X coordinates += +16.5 mm after a G55 command issued )

  3. No extra handling in the firmware.

This early usage was done to kick start experimentation of dualstrusion. It supported folks using Thing-o-Matics with no modifications to the 3.1 firmware.

RepG 33, 34 (27 February, 13 March 2012; MBI 5.x firmwares)

  1. Each tool head moved one-half the ideal toolhead offset of 33.0 mm in gcode,

    G10 P1 X-16.5 ( X coordinates += -16.5 mm after a G54 command issued )
    G10 P2 X+16.5 ( X coordinates += +16.5 mm after a G55 command issued )

  2. In firmware, the deviations from the ideal offset are stored in EEPROM. The X axis deviation is referred to as "x-deviation".
  3. In firmware, the deviations are split between each toolhead,
    Tool 0 in use: X coordinates += + x-deviation / 2
    Tool 1 in use: X coordinates += − x-deviation / 2

With this toolhead offset system, when moving to X = 0, the actual position is

Tool 0 in use: -16.5 mm + x-deviation / 2
Tool 1 in use: +16.5 mm - x-deviation / 2

The difference between those to values is the actual calibrated distance between the two extruder nozzles along the X axis,

total-X-offset = 33.0 mm - x-deviation

And, from the above, we can now judge the meaning of positive and negative valued x-deviations:

x-deviation > 0 means that the nozzles are closer together than the ideal 33.0 mm
x-deviation < 0 means that the nozzles are farther apart than the ideal 33.0 mm

RepG 37, 39 (22 June, 3 October 2012; MBI 5.5 firmware)

  1. Tool 1 moved the entire ideal offset in gcode,

    G10 P1 X0 ( X coordinates unchanged after a G54 command issued )
    G10 P2 X33.0 ( X coordinates += 33.0 mm after a G55 command issued )

  2. In firmware, the deviations from the ideal offset are stored in EEPROM. The X axis deviation is referred to as "x-deviation".
  3. In firmware, the deviations are split between each toolhead,
    Tool 0 in use: X coordinates += + x-deviation / 2
    Tool 1 in use: X coordinates += − x-deviation / 2

With this toolhead offset system, when moving to X = 0, the actual position is

Tool 0 in use: -16.5 mm + x-deviation / 2
Tool 1 in use: +16.5 mm - x-deviation / 2

The difference between those to values is the actual calibrated distance between the two extruder nozzles along the X axis,

total-X-offset = 33.0 mm - x-deviation

And, from the above, we can now judge the meaning of positive and negative valued x-deviations:

x-deviation > 0 means that the nozzles are closer together than the ideal 33.0 mm
x-deviation < 0 means that the nozzles are farther apart than the ideal 33.0 mm

RepG 40 (9 November 2012; MBI 6.0 firmware)

With RepG 40, MBI has changed the toolhead offset system to no longer burden the slicer and gcode with knowledge of toolhead offsets. Unfortunately, MBI also introduced an error in their code to convert the EEPROM toolhead offset x-deviation value to the new system.

In the new system,

  1. Gcode no longer tracks toolhead offsets: the G10, G54, and G55 commands are no longer used.
  2. In firmware, the total toolhead offsets are stored in EEPROM. The X axis offset is referred to as "x-offset"
  3. In firmware, the total toolhead offset is put onto Tool 1
    Tool 0 in use: X coordinates remain unchanged
    Tool 1 in use: X coordinates += x-offset

So, when moving to X = 0, the actual position is

Tool 0 in use: 0.0 mm
Tool 1 in use: 0.0 mm + x-offset

In this new system, the distance along the X axis between the two extruders is therefore,

new-total-X-offset = x-offset

Fine so far. However, MBI included in their 6.x and 7.x firmware, code to automatically convert the old systems x-deviation stored in EEPROM to the x-offset value. Here's the calculation they coded,

x-offset = 33.0 mm + x-deviation

But, unfortunately, that's wrong. Recall that when the nozzles are farther apart than 33.0 mm, x-deviation is negative! Therefore, the above calculation produces an x-offset which is less than 33.0 mm when x-deviation is negative. That's wrong: it should compute a value larger than 33.0 mm. The correct calculation — the calculation which Sailfish uses and MBI should have used — is

x-offset = 33.0 mm - x-deviation

And that's exactly the form we arrived at in the prior analyses of RepG 34 - 39. Additionally, this can be demonstrated when doing dualstrusion prints with MBI's 5.5 and then 6.2 firmwares. Dan happens to have nozzles with significant offsets in both X and Y (about 0.6 mm for both). A very nicely aligned print done with 5.5 then comes out with visible misalignment with 6.2 and its incorrect auto-conversion of the toolhead offsets. The sign error in the conversion gives a result off by twice the offset or ~1.2 mm. That's visually significant. Correction of the 6.2 firmware to compute the total offsets correctly then resulted in correctly aligned prints.

Sailfish therefore implements the correct conversion. Also, unlike the MBI firmware, it doesn't change the offsets stored in EEPROM. It just converts the offsets at run time as necessary.