[PR #137] [MERGED] docs(changelog): cut 0.2.0 #140

Closed
opened 2026-10-31 22:04:57 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/Comfy-Org/comfy-typescript-sdk/pull/137
Author: @mattmillerai
Created: 9/10/2026
Status: ✅ Merged
Merged: 9/10/2026
Merged by: @mattmillerai

Base: main ← Head: matt/release-0.2.0


📝 Commits (1)

  • acc9130 docs(changelog): cut 0.2.0

📊 Changes

1 file changed (+4 additions, -1 deletions)

View changed files

📝 CHANGELOG.md (+4 -1)

📄 Description

ELI-5

This moves everything under ## [Unreleased] in the changelog under a ## [0.2.0] - 2026-09-10 heading, so the next GitHub Release (tag v0.2.0) has a matching changelog section. Nothing else changes: the version is injected from the tag at publish time, so package.json stays a placeholder per CONTRIBUTING.md.

What ships in 0.2.0

  • Asset.getDownloadUrl()
  • comfy.models.run collects a still-running generation on 409 concurrency_limit_exceeded / 504 deadline_exceeded with Retry-After; new retry.collectBudgetMs
  • retryAfter and idempotencyKey on every ComfyError; retryAfter on RouterError
  • Job.getLogs() and Job.urls.logs
  • Default comfy.models.run deadline 10 → 20 minutes

Why 0.2.0 rather than 0.1.10

Two defaults change on the models.run path (collect-instead-of-throw, and the 20-minute deadline). Additive otherwise. Edit the heading in this PR if 0.1.10 is preferred.

Draft release notes for v0.2.0

Release notes (paste into the GitHub Release)

comfy.models.run now collects a generation it already dispatched instead of losing it, uploaded assets get a directly-fetchable URL, and a job's execution log can be read on demand.

Highlights

A generation that outlives the connection is collected, not lost. Comfy answers two failures with a Retry-After that means "the generation your Idempotency-Key already names has not finished — wait, then ask again for that one": a 409 carrying concurrency_limit_exceeded (an earlier attempt of this same call is still in flight, which is what a re-send after a dropped connection meets) and a 504 carrying deadline_exceeded (Comfy stopped holding the connection at its own bound while the provider carried on). Both used to be terminal, so a caller lost a generation that had already been dispatched and paid for. run now waits the interval the server named, re-sends the same key, and resolves with the result: no second dispatch, no second charge, nothing to enable. The collect loop has its own budget, retry.collectBudgetMs (default 20 minutes); collectBudgetMs: 0 switches it off alone, retry: false switches off retries and collection together.

The default comfy.models.run deadline is 20 minutes, up from 10. The deadline covers every attempt of a call, and Comfy's own deadline is 10 minutes — so the old default was exactly spent at the moment a deadline_exceeded 504 arrived, and the collect above could never start under it. Successful calls are unaffected; the deadline is a ceiling, not a wait. Pass timeoutMs: 600_000 for the old bound.

Every ComfyError carries retryAfter and idempotencyKey. The server's Retry-After in seconds (null when none was sent), and the key the failed call went out under — including a key the SDK minted for you, which was previously visible nowhere. Together they are what a manual re-ask needs once the collect budget is spent. RouterError gains retryAfter for the same reason.

Asset.getDownloadUrl(). A directly-fetchable URL for an uploaded asset's bytes, mirroring Output.getDownloadUrl(). On Comfy Cloud it is a short-lived signed URL any fetcher can read until expiresAt, which is what lets a local image be passed to a URL-taking image-to-image model: upload it as an asset, resolve its URL, put the URL in the model's input. Matches Asset.get_download_url() in the Python SDK.

Job.getLogs(). The run's captured execution log via GET /api/v2/jobs/{id}/logs, or null when the job has none — today only a job run on a serverless deployment has one; Comfy Cloud captures none. The text is untrusted workflow output and should be rendered as plain text.

Upgrading

No API removals. Two defaults changed on the comfy.models.run path: a 409/504 carrying Retry-After is now collected rather than thrown, and the default deadline is 20 minutes. If you relied on the previous behaviour, pass retry: { collectBudgetMs: 0 } and/or timeoutMs: 600_000.

Full detail in CHANGELOG.md.

Not in this release

  • #133 (queue submit/subscribe/handle) carries do-not-merge until the router queue routes are deployed to cloud.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/Comfy-Org/comfy-typescript-sdk/pull/137 **Author:** [@mattmillerai](https://github.com/mattmillerai) **Created:** 9/10/2026 **Status:** ✅ Merged **Merged:** 9/10/2026 **Merged by:** [@mattmillerai](https://github.com/mattmillerai) **Base:** `main` ← **Head:** `matt/release-0.2.0` --- ### 📝 Commits (1) - [`acc9130`](https://github.com/Comfy-Org/comfy-typescript-sdk/commit/acc9130753476ed892e842590af048761d08687d) docs(changelog): cut 0.2.0 ### 📊 Changes **1 file changed** (+4 additions, -1 deletions) <details> <summary>View changed files</summary> 📝 `CHANGELOG.md` (+4 -1) </details> ### 📄 Description ## ELI-5 This moves everything under `## [Unreleased]` in the changelog under a `## [0.2.0] - 2026-09-10` heading, so the next GitHub Release (tag `v0.2.0`) has a matching changelog section. Nothing else changes: the version is injected from the tag at publish time, so `package.json` stays a placeholder per CONTRIBUTING.md. ## What ships in 0.2.0 - `Asset.getDownloadUrl()` - `comfy.models.run` collects a still-running generation on `409 concurrency_limit_exceeded` / `504 deadline_exceeded` with `Retry-After`; new `retry.collectBudgetMs` - `retryAfter` and `idempotencyKey` on every `ComfyError`; `retryAfter` on `RouterError` - `Job.getLogs()` and `Job.urls.logs` - Default `comfy.models.run` deadline 10 → 20 minutes ## Why 0.2.0 rather than 0.1.10 Two defaults change on the `models.run` path (collect-instead-of-throw, and the 20-minute deadline). Additive otherwise. Edit the heading in this PR if 0.1.10 is preferred. ## Draft release notes for `v0.2.0` <details><summary>Release notes (paste into the GitHub Release)</summary> `comfy.models.run` now collects a generation it already dispatched instead of losing it, uploaded assets get a directly-fetchable URL, and a job's execution log can be read on demand. ## Highlights **A generation that outlives the connection is collected, not lost.** Comfy answers two failures with a `Retry-After` that means "the generation your `Idempotency-Key` already names has not finished — wait, then ask again for that one": a `409` carrying `concurrency_limit_exceeded` (an earlier attempt of this same call is still in flight, which is what a re-send after a dropped connection meets) and a `504` carrying `deadline_exceeded` (Comfy stopped holding the connection at its own bound while the provider carried on). Both used to be terminal, so a caller lost a generation that had already been dispatched and paid for. `run` now waits the interval the server named, re-sends the same key, and resolves with the result: no second dispatch, no second charge, nothing to enable. The collect loop has its own budget, `retry.collectBudgetMs` (default 20 minutes); `collectBudgetMs: 0` switches it off alone, `retry: false` switches off retries and collection together. **The default `comfy.models.run` deadline is 20 minutes, up from 10.** The deadline covers every attempt of a call, and Comfy's own deadline is 10 minutes — so the old default was exactly spent at the moment a `deadline_exceeded` `504` arrived, and the collect above could never start under it. Successful calls are unaffected; the deadline is a ceiling, not a wait. Pass `timeoutMs: 600_000` for the old bound. **Every `ComfyError` carries `retryAfter` and `idempotencyKey`.** The server's `Retry-After` in seconds (`null` when none was sent), and the key the failed call went out under — including a key the SDK minted for you, which was previously visible nowhere. Together they are what a manual re-ask needs once the collect budget is spent. `RouterError` gains `retryAfter` for the same reason. **`Asset.getDownloadUrl()`.** A directly-fetchable URL for an uploaded asset's bytes, mirroring `Output.getDownloadUrl()`. On Comfy Cloud it is a short-lived signed URL any fetcher can read until `expiresAt`, which is what lets a local image be passed to a URL-taking image-to-image model: upload it as an asset, resolve its URL, put the URL in the model's input. Matches `Asset.get_download_url()` in the Python SDK. **`Job.getLogs()`.** The run's captured execution log via `GET /api/v2/jobs/{id}/logs`, or `null` when the job has none — today only a job run on a serverless deployment has one; Comfy Cloud captures none. The text is untrusted workflow output and should be rendered as plain text. ## Upgrading No API removals. Two defaults changed on the `comfy.models.run` path: a `409`/`504` carrying `Retry-After` is now collected rather than thrown, and the default deadline is 20 minutes. If you relied on the previous behaviour, pass `retry: { collectBudgetMs: 0 }` and/or `timeoutMs: 600_000`. Full detail in [CHANGELOG.md](https://github.com/Comfy-Org/comfy-typescript-sdk/blob/main/CHANGELOG.md). </details> ## Not in this release - #133 (queue submit/subscribe/handle) carries `do-not-merge` until the router queue routes are deployed to cloud. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-31 22:04:57 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Comfy-Org/comfy-typescript-sdk#140
No description provided.