Nodes/ComfyUI-CheckpointHandpickerSuite/Checkpoint Status Tagger
ComfyUI Node

Checkpoint Status Tagger

Tag checkpoints keep-or-delete without deleting a single file

By ruminar·Created 3 months ago·Updated 6 days ago· 3
Checkpoint Status Tagger
      ckpt_name_str
      hps_tab_id

      This is the "what do I keep and what do I nuke" node, and the suite is careful to keep those two things far apart. Checkpoint Status Tagger takes the name of a checkpoint (ckpt_name_str, pulled from the Cycler or List Selector) and stamps it with one of five review statuses: 👑 god!, 💛 favorite, 👍 nice, ✔ keep, and 🗑 delete. It has no outputs - it's a pure output node whose job is updating a status database and reflecting it back into the UI (the node title shows the current status, which is a nice touch).

      Statuses are global and stored on disk in data/checkpoint_statuses.json inside the pack folder, so they survive restarts and - because they're files, not browser state - they show up in every tab. Any tab can refresh its Selector list and see the icons. This is the part of the suite that makes the whole "handpicking" loop work: batch-generate with the Cycler, review with ImageDir Preview, then hit a status button as you go.

      The statuses and their weird rules

      The tiers are self-explanatory - god! is your hall of fame, keep is "works, stays", nice is a maybe. Two behaviors are worth knowing up front because they're deliberate:

      • There's no none button. You clear a status by pressing the active status again, which toggles it off. Slightly surprising the first time, easy once you get it.
      • delete can only be set from none. If a checkpoint is already tagged something else, you can't jump straight to delete - you have to toggle it off first. Annoying? A little. But it's a speed bump on purpose, so you don't trash a checkpoint you'd marked 👑 two minutes ago.

      And here's the part that matters: delete never deletes anything. It's a reservation. The suite writes a script instead - delete_reserved_checkpoints.py under ComfyUI/output/CheckpointHandpickerSuite/delete_scripts/ - that asks for confirmation before touching files when you actually run it. So you can spend an afternoon marking a third of your models for deletion, sleep on it, and the only thing that happened is a script appeared. That review-first safety model is the whole design philosophy of the pack.

      How it fits a workflow

      The straightforward wiring: Cycler's ckpt_name_str → Tagger's ckpt_name_str, so as the Cycler advances, the Tagger follows and you mark while the batch runs. In manual review, the List Selector drives it instead - either through Sync with ImageDir Preview, or through the DirectLink mode (external review on a tablet or shared folder), where the Tagger labels whatever's currently selected in the Selector.

      Tags don't only decorate the UI, they feed the Cycler: the Cycler's status filter can restrict rotation to, say, favorites, or exclude everything marked delete. That's the loop coming full circle - you curate, then you generate only from the curated set. There's also a separate CheckpointTagExportImport node (same pack) to back up or migrate tags between machines; the Tagger just owns the statuses.

      Install

      Standard one-pack install, zero extra dependencies:

      cd ComfyUI/custom_nodes
      git clone https://github.com/ruminar/ComfyUI-CheckpointHandpickerSuite.git
      

      Restart ComfyUI. No model downloads, no pip step.

      Realistic take

      The safety rails (confirm-to-delete script, delete-only-from-none) make this the right node for the job if you're drowning in checkpoints and afraid of the trash can. The one thing it's not is a file manager - the actual deletion still happens when you run the script, and image deletion is ImageDir Preview's job. Tagger just keeps score.

      CategoryHandpickerSuite

      Inputs (2)

      NameTypeDefaultDescription
      ckpt_name_strSTRING
      hps_tab_idoptSTRING

      Outputs (0)

      No outputs