Anlas Tracker βοΈπ π π
How Much Are You Actually Spending on NovelAI? This Node Shows the Meter
- trigger
- anlas_int
- anlas_string
NovelAI doesn't run on your GPU, and it isn't free either. Every GenerateNAID call burns Anlas, NovelAI's per-generation credit, and it's easy to lose track of the tab when the meter is a website you have to tab out to. The Anlas Tracker node puts that meter on your canvas: one wire to a text-display node and you can see your remaining balance sitting right next to your workflow.
This is a genuinely thin utility node - a readout, not a tool. It sits in the NovelAI/utils category and does exactly one job: check your balance and hand it to you as both a number and a string. If that sounds trivial, that's sort of the point. The GenerateNAID node already prints your Anlas before and after every generation to the console where you launched ComfyUI ([NovelAI] Anlas (pre-gen): 10000), but the console is out of sight when you're buried in a graph. The tracker makes the burn visible in the workflow itself.
How it works
Under the hood it's a single authenticated request to NovelAI's API - GET https://api.novelai.net/user/data with the same token the rest of the pack uses - and it reads your balance from the subscription.trainingStepsLeft field. Funny detail: NovelAI's API still calls Anlas "training steps left," a name left over from before they reworked their credit system. The node just reads it and prints [NovelAI] Current Anlas Balance: ... to the console on top of returning it.
If the request fails, it doesn't crash your workflow. It prints a Failed to fetch Anlas balance line and returns (0, "Error fetching Anlas") so your graph keeps running - which means a zero on the display is either a real empty balance or a token problem. Worth knowing before you panic about being broke.
Inputs and outputs
There's exactly one input, and it's optional: trigger, typed as *, which means you can plug anything into it. It exists for one reason - execution order. If you want the balance read after a generation so you can watch it tick down, wire the GenerateNAID node's output into trigger and the tracker will run after it.
The two outputs are the whole node:
anlas_int(INT) - the raw number, if you want to format it yourself or feed it into some logicanlas_string(STRING) - already formatted, e.g.10000 Anlas
The README's example wires anlas_string into the Show Text node from WAS Node Suite, which is the easiest way to see it. If you don't have WAS installed, any text-display node that takes a STRING will do.
Install and setup
Part of the ComfyUI_NAIDGenerator pack, so there's no separate install. Either search "ComfyUI_NAIDGenerator" in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/bedovyy/ComfyUI_NAIDGenerator
Then restart ComfyUI. The dependencies are light (python-dotenv, argon2-cffi) and there are no model files to download - the model never touches your machine, it lives on NovelAI's servers. The one thing you must have is a token in a .env file in your ComfyUI root folder:
NAI_ACCESS_TOKEN=<YOUR_ACCESS_TOKEN>
You get a persistent token from User Settings > Account > Get Persistent API Token on the NovelAI site. This is the most common stumbling block with the whole pack - people drop the .env somewhere else, get a 401, and blame the node. It goes in ComfyUI/.env, next to main.py, not inside custom_nodes.
If the tracker shows Error fetching Anlas while the rest of the pack generates fine, it's usually a transient network blip or a token that just expired - a persistent API token from the site outlasts the 30-day session tokens, so it's worth switching to one.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| triggeropt | * | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| anlas_int | INT | β |
| anlas_string | STRING | β |