Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/workflows/build-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,12 @@ jobs:
run: |
uv run --locked --extra dev pytest tests/comfy_cli/command/test_jobs_pid_alive.py -v

- name: Test model upload and resume
env:
PYTHONPATH: ${{ github.workspace }}
run: |
uv run --locked --extra dev pytest tests/comfy_cli/command/test_assets_library.py tests/comfy_cli/command/test_model_upload_resume.py

- name: Test e2e
env:
PYTHONPATH: ${{ github.workspace }}
Expand Down
26 changes: 26 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,32 @@ history.

## [Unreleased]

### Changed

- Both `comfy assets library upload` and `comfy model upload` request resumable
model uploads up to 25 GB. Dropped connections retry from storage's held
bytes. Running the command again continues a saved upload for the same file,
account, workspace and folder while its session remains valid. Sessions expire
no later than seven days after creation; the server can expire them earlier.
A paused upload reports whether its session was saved for a later run. Older
servers keep the single-PUT upload. File approval, block checks and the final stored-hash
check still apply. The final storage check no longer stops after fifteen
minutes. The retired `asset_upload_timeout` error code stays discoverable
for compatibility with older versions. The task id is reported before the
storage wait. Refused resumable sessions are discarded and restarted once;
certificate verification and invalid CA-bundle failures stop immediately
without transport exception text.
HTTP timeouts and transient TLS interruptions query the held bytes and retry.
A closed progress pipe or stream does not stop task polling or the final
stored-hash check, including when Rich converts the pipe failure to an exit.
Legacy single-PUT storage addresses
retain HTTP compatibility. Certificate verification and invalid CA-bundle
errors on that path also stop immediately with fixed TLS guidance.
Both paths recognize certificate failures wrapped by an HTTPS proxy while
retaining retries for temporary proxy failures.
- `comfy build push` shares the upload progress reporter. A broken pipe or
closed progress stream now mutes its progress instead of ending the push.

### Added

- The `comfy-run-on-cloud` agent skill, installed with the other bundled
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -444,7 +444,9 @@ the bisect tool can help you pinpoint the custom node that causes the issue.

`comfy model upload <FILE> --type <FOLDER> --where cloud ?[--dry-run] ?[--workspace <ID>] ?[--expected-sha256 <SHA256>] ?[--yes]`

- Puts one local `.safetensors` file (up to 2 GB) into your Comfy Cloud model library, so a workflow run on Comfy Cloud can load it. `--type` is the model folder, e.g. `loras` or `checkpoints`; `comfy model list-folders --where cloud` lists them.
- Puts one local `.safetensors` file (up to 25 GB on servers with resumable uploads) into your Comfy Cloud model library, so a workflow run on Comfy Cloud can load it. `--type` is the model folder, e.g. `loras` or `checkpoints`; `comfy model list-folders --where cloud` lists them.
- Uploads use 64 MiB pieces when the server supports them. A dropped connection retries from the bytes storage holds. If the command stops, run it again with the same file, model folder, account and workspace to continue while its saved session remains valid. Sessions expire no later than seven days after creation; the server can expire them earlier. A paused upload tells you whether its session was saved. Without saved state, a rerun starts a new upload. The CLI hashes the file again before resuming. Older servers keep using one PUT and enforce their own size limit. Upload sessions are credentials, kept in a private `model-uploads` directory under the CLI config folder and removed after completion.
- After 30 minutes without progress, the command exits with the held byte count. The final check on Comfy Cloud can take longer than fifteen minutes; the command waits until it ends. It reports the task id before waiting. In JSON mode, the `upload_storing` event goes to stderr; in streaming mode it goes to stdout. If the wait is interrupted, the id identifies the task at Cloud's `GET /api/tasks/<task_id>` endpoint.
- Only the file you name is uploaded, and only the bytes hashed before the upload: each block is checked against its hash before it is sent. The upload succeeds only once Comfy Cloud's hash of the stored file matches your file's.
- `--dry-run` uploads nothing. It reports the file's `sha256` and whether Comfy Cloud already has the file.
- The output's `loader_path` is the value a loader node takes for the model on Comfy Cloud, as Comfy Cloud's record of the model gives it. It is null for a dry run that would upload, or when Comfy Cloud gives none.
Expand Down
Loading
Loading