OctoPrint Achievements (v1.11.5, as of 2025-12-06)
This document lists all 36 achievements provided by OctoPrint’s bundled Achievements Plugin, including whether they are hidden or time-based and the core unlocking logic as implemented in the plugin code.
Spoilers ahead – hidden achievements are listed below.
Legend
- Hidden:
Yes = Does not appear in the UI until unlocked.No = Always visible.
- Time-based:
Yes = Depends on date/time or correct timezone settings.No = Purely event/statistics-based.
Basics
| Key | Name | Icon | Hidden | Time-based | Unlock logic (code-level summary) |
|---|
the_wizard | The Wizard | icon | No | No | On server startup: if the instance is no longer in first-run mode (server.firstRun == False) and this achievement is not yet set, it is granted. In practice: complete the OctoPrint first-run setup wizard. |
one_small_step_for_man | That’s One Small Step For (A) Man | icon | No | No | On PRINT_DONE event: first time any print finishes successfully, this is awarded. |
adventurer | The Adventurer | icon | No | No | On PLUGIN_PLUGINMANAGER_INSTALL_PLUGIN event: if the plugin was installed from the repository (payload.from_repo == True), grant this. |
tinkerer | The Tinkerer | icon | No | No | On PLUGIN_PLUGINMANAGER_INSTALL_PLUGIN event: if the plugin was installed from URL or file (payload.from_repo != True), grant this. |
better_safe_than_sorry | Better Safe Than Sorry | icon | No | No | On PLUGIN_BACKUP_BACKUP_CREATED event: when a backup is successfully created, grant this. |
Print Duration
| Key | Name | Icon | Hidden | Time-based | Unlock logic |
|---|
half_marathon | Half Marathon | icon | No | No | On PRINT_DONE: if payload.time > 12 * 60 * 60 (print took more than 12 hours), grant this. |
marathon | Marathon | icon | No | No | On PRINT_DONE: if payload.time > 24 * 60 * 60 (print took more than 24 hours), grant this. |
sprint | Sprint | icon | No | No | On PRINT_DONE: if payload.time < 10 * 60 (print finished in under 10 minutes), grant this. |
achievement_not_found | Achievement Not Found | icon | Yes | No | On PRINT_DONE: when the accumulated finished print duration (stats.print_duration_finished) reaches at least 404 * 60 * 60 seconds (404 hours total), grant this. |
Print Count
| Key | Name | Icon | Hidden | Time-based | Unlock logic |
|---|
cant_get_enough | Can’t Get Enough | icon | No | Yes | On each PRINT_DONE: per-day counter prints_today is tracked. When the number of finished prints on the same calendar date (in the configured timezone) reaches 10 or more, this is granted. |
the_manufacturer_i | The Manufacturer | icon | No | No | On PRINT_DONE: when total prints_finished >= 10, grant this (first tier). |
the_manufacturer_ii | The Manufacturer II | icon | Yes | No | On PRINT_DONE: when prints_finished >= 100, grant this (second tier). |
the_manufacturer_iii | The Manufacturer III | icon | Yes | No | On PRINT_DONE: when prints_finished >= 1000, grant this (third tier). |
Date / Holiday Specific
| Key | Name | Icon | Hidden | Time-based | Unlock logic |
|---|
happy_birthday_foosel | Happy Birthday, foosel | icon | Yes | Yes | On PRINT_STARTED: if the current date is March 21st, grant this. |
happy_birthday_octoprint | Happy Birthday, OctoPrint | icon | Yes | Yes | On PRINT_STARTED: if the current date is December 25th, grant this. |
spooky | Spooky | icon | Yes | Yes | On PRINT_STARTED: if the current date is October 31st, grant this. |
santas_little_helper | Santa’s Little Helper | icon | Yes | Yes | On PRINT_STARTED: if the current date is between December 1st and 24th (inclusive), grant this. |
Weekday / Weekend Specific
| Key | Name | Icon | Hidden | Time-based | Unlock logic |
|---|
tgif | TGIF | icon | No | Yes | On PRINT_STARTED: if now.weekday() == 4 (Friday in Python’s weekday()), grant this. |
weekend_warrior | Weekend Warrior | icon | No | Yes | On PRINT_STARTED with now.weekday() >= 5 (Saturday or Sunday): the plugin tracks date_last_weekend_print and consecutive_weekend_prints. If there was also a weekend print in the previous weekend (based on date math in the code), increment the streak; when the streak reaches 4, this achievement is granted. Effectively: at least one print on four consecutive weekends. |
Time-of-Day Specific
| Key | Name | Icon | Hidden | Time-based | Unlock logic |
|---|
early_bird | Early Bird | icon | Yes | Yes | On PRINT_STARTED: if 03:00 ≤ local hour < 07:00, grant this. |
night_owl | Night Owl | icon | Yes | Yes | On PRINT_STARTED: if 23:00 ≤ hour or hour < 03:00 (late night), grant this. |
File Management
| Key | Name | Icon | Hidden | Time-based | Unlock logic |
|---|
clean_house_i | Clean House | icon | Yes | No | On FILE_REMOVED with payload.operation == "remove": increment files_deleted; when files_deleted >= 100, grant this (first tier). |
clean_house_ii | Clean House II | icon | Yes | No | Same logic; granted once files_deleted >= 500. |
clean_house_iii | Clean House III | icon | Yes | No | Same logic; granted once files_deleted >= 1000. |
heavy_chonker | Heavy Chonker | icon | No | No | On FILE_ADDED with payload.operation == "add": if the uploaded file’s size (file_manager.get_size()) is greater than 500 MiB (> 500 * 1024 * 1024 bytes), grant this. |
the_collector_i | The Collector | icon | Yes | No | On FILE_ADDED (operation == "add"): increment files_uploaded; when files_uploaded >= 100, grant this (first tier). |
the_collector_ii | The Collector II | icon | Yes | No | Same logic; granted once files_uploaded >= 500. |
the_collector_iii | The Collector III | icon | Yes | No | Same logic; granted once files_uploaded >= 1000. |
the_organizer | The Organizer | icon | Yes | No | On FOLDER_ADDED event: creating any folder in the filesystem grants this. |
Mishaps (Cancels / Fails / Pauses)
| Key | Name | Icon | Hidden | Time-based | Unlock logic |
|---|
all_beginnings_are_hard | All Beginnings Are Hard | icon | No | No | In the handler for PRINT_FAILED or PRINT_CANCELLED, the code always executes the “cancel” block (due to how the condition is written). Practically: the first time a print is cancelled or fails, this is granted. |
one_of_those_days | Must Be One Of Those Days | icon | Yes | Yes | In the same cancel/fail block: for each such job on a given calendar day, it increments prints_cancelled_today and consecutive_prints_cancelled_today. When consecutive_prints_cancelled_today >= 10 on the same day, this is granted. |
so_close | So Close | icon | Yes | No | In the “cancel” logic: if the cancelled/failed print’s payload.progress > 95 (job terminated at >95% progress), grant this. |
hang_in_there | Hang In There! | icon | Yes | No | On PRINT_PAUSED: keep a _pause_counter for the current print; when the same print has been paused 10 or more times, this is granted. |
Miscellaneous / Hardware / Behavior
| Key | Name | Icon | Hidden | Time-based | Unlock logic |
|---|
crossover_episode | What Is This, A Crossover Episode? | icon | Yes | No | In firmware_info_hook: when the printer’s reported firmware name contains "klipper" (case-insensitive), grant this. In practice: connect to a printer running Klipper. |
mass_production | Mass Production | icon | Yes | No | On PRINT_DONE: track file_last_print (origin:path:lastmodified) and consecutive_prints_of_same_file. If the same file (with same last-modified timestamp) is printed five times in a row, grant this. |
what_could_possibly_go_wrong | What Could Possibly Go Wrong? | icon | Yes | No | On PRINT_STARTED: call external get_throttled() helper (from the Pi Support plugin); if it returns a dict with "current_undervoltage" true (active undervoltage condition), grant this. Effectively: start a print while the system reports an undervoltage problem. |
Summary
- Total achievements: 36
- Visible (non-hidden): 17
- Hidden: 19
- Time-based (date/time dependent): Marked
Yes above; these rely on the configured plugin timezone and local time.