Skip to content

fix: stabilize flaky screenshot tests that rely on search box timings#9426

Merged
christian-byrne merged 3 commits intomainfrom
ci/fix-flaky-screenshots-2
Mar 5, 2026
Merged

fix: stabilize flaky screenshot tests that rely on search box timings#9426
christian-byrne merged 3 commits intomainfrom
ci/fix-flaky-screenshots-2

Conversation

@christian-byrne
Copy link
Contributor

@christian-byrne christian-byrne commented Mar 5, 2026

Summary

Fixes flaky screenshot test that was identified during the PR #9400 snapshot update, where baselines regenerated without any code changes affecting them.

Root cause: fillAndSelectFirstNode('KSampler') selected nth(0) from the autocomplete dropdown, but search result ordering is non-deterministic when the search box opens via link release with filter chips. Sometimes 'Preview Image' appeared as the first result instead of 'KSampler', causing a completely different node to be added.

Fix: Added an exact: true option to fillAndSelectFirstNode that uses an aria-label selector to click the specific matching result instead of blindly selecting the first item.

┆Issue is synchronized with this Notion page by Unito

…eview

Two flaky screenshot tests were identified during the PR #9400 snapshot
update, where baselines regenerated without any code changes affecting them:

1. added-node-no-connection (nodeSearchBox.spec.ts):
   Root cause: fillAndSelectFirstNode('KSampler') selected nth(0) from
   the dropdown, but search result ordering is non-deterministic when the
   search box opens via link release (with filter chips). Sometimes
   'Preview Image' appeared first instead of 'KSampler'.
   Fix: Add exact:true option that uses aria-label selector to click the
   specific matching result instead of blindly selecting the first item.

2. no-workflow-webp (loadWorkflowInMedia.spec.ts):
   Root cause: Dropping no_workflow.webp (no embedded workflow) creates a
   LoadImage node and uploads the file. The image preview then loads
   asynchronously via /view API. The screenshot was taken before the
   upload and preview load completed, causing the preview to sometimes
   show the image and sometimes show a black/empty area.
   Fix: Wait for the upload response and subsequent /view response before
   taking the screenshot.

Both baselines are deleted for CI regeneration.

Fixes #4658

Amp-Thread-ID: https://ampcode.com/threads/T-019cbc87-ce1f-7338-93c7-d0677a632805
@christian-byrne christian-byrne requested a review from a team as a code owner March 5, 2026 06:00
@christian-byrne christian-byrne added the New Browser Test Expectations New browser test screenshot should be set by github action label Mar 5, 2026
@dosubot dosubot bot added the size:M This PR changes 30-99 lines, ignoring generated files. label Mar 5, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 5, 2026

📝 Walkthrough

Walkthrough

This change addresses flaky Playwright tests by introducing an exact-match selection option to the ComfyNodeSearchBox fixture method and adding deterministic rendering waits for specific file upload scenarios. The modifications enhance test stability through alternative node selection logic and proper async handling.

Changes

Cohort / File(s) Summary
Node Selection Enhancement
browser_tests/fixtures/components/ComfyNodeSearchBox.ts
Extended fillAndSelectFirstNode method signature to accept optional exact boolean parameter. When exact: true, selects the first list item with aria-label matching the node name; otherwise retains previous suggestionIndex-based selection behavior.
Test Suite Updates
browser_tests/tests/nodeSearchBox.spec.ts
Updated method call to fillAndSelectFirstNode to pass exact: true option, enabling exact-match node selection in the node search box test flow.
Workflow Loading Stabilization
browser_tests/tests/loadWorkflowInMedia.spec.ts
Added conditional handling for no_workflow.webp during drag-and-drop operations that waits for /view response after upload and flushes a frame before proceeding, ensuring deterministic image preview rendering.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Poem

🐰 Hops of joy through tests so fleet,
Exact matches make debugging sweet,
No more flakes upon the scene,
Our workflows render crisp and clean! 🎉

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The PR addresses two of the four flaky tests identified in #4658 (animated webp image test and implicit search/node selection improvements) with targeted code fixes.
Out of Scope Changes check ✅ Passed All changes are directly scoped to fixing the two identified flaky tests: updating fillAndSelectFirstNode signature and adding proper wait conditions for preview loading.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check ✅ Passed The title accurately describes the main purpose of the PR: stabilizing flaky screenshot tests related to search box timings. It directly relates to the core changes across both test files.
Description check ✅ Passed The description includes the required summary section, explains the root cause and fixes for both test flakiness issues, and references issue #4658. However, the 'Changes' section with 'What' and 'Breaking' subsections is missing, and 'Review Focus' is not clearly delineated.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch ci/fix-flaky-screenshots-2

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link

github-actions bot commented Mar 5, 2026

🎭 Playwright: ✅ 547 passed, 0 failed · 6 flaky

📊 Browser Reports
  • chromium: View Report (✅ 534 / ❌ 0 / ⚠️ 6 / ⏭️ 10)
  • chromium-2x: View Report (✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • chromium-0.5x: View Report (✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • mobile-chrome: View Report (✅ 10 / ❌ 0 / ⚠️ 0 / ⏭️ 0)

@github-actions
Copy link

github-actions bot commented Mar 5, 2026

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 03/05/2026, 07:43:42 AM UTC

Links

@github-actions
Copy link

github-actions bot commented Mar 5, 2026

📦 Bundle: 4.49 MB gzip ⚪ 0 B

Details

Summary

  • Raw size: 21.1 MB baseline 21.1 MB — ⚪ 0 B
  • Gzip: 4.49 MB baseline 4.49 MB — ⚪ 0 B
  • Brotli: 3.47 MB baseline 3.47 MB — ⚪ 0 B
  • Bundles: 228 current • 228 baseline

Category Glance
Vendor & Third-Party ⚪ 0 B (8.86 MB) · Other ⚪ 0 B (7.92 MB) · Data & Services ⚪ 0 B (2.73 MB) · Graph Workspace ⚪ 0 B (919 kB) · Panels & Settings ⚪ 0 B (436 kB) · Views & Navigation ⚪ 0 B (72.4 kB) · + 5 more

App Entry Points — 18 kB (baseline 18 kB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-BdMJdxji.js 18 kB 18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Graph Workspace — 919 kB (baseline 919 kB) • ⚪ 0 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-C92EQHrC.js 919 kB 919 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Views & Navigation — 72.4 kB (baseline 72.4 kB) • ⚪ 0 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudAuthTimeoutView-DuHyAlyi.js 4.96 kB 4.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudForgotPasswordView-BFgpmVb0.js 5.6 kB 5.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudLayoutView-Bmozeulu.js 6.47 kB 6.47 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudLoginView-YBAMNfzb.js 11.5 kB 11.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSignupView-DW5GuovV.js 9.41 kB 9.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSorryContactSupportView-DwQRNUxH.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSubscriptionRedirectView-CLblpI5d.js 4.8 kB 4.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSurveyView-AX3nJfhH.js 15.5 kB 15.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-CTBdQNLF.js 296 B 296 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserCheckView-CWNJmqfC.js 8.41 kB 8.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserSelectView-CbF9S229.js 4.5 kB 4.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Panels & Settings — 436 kB (baseline 436 kB) • ⚪ 0 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/AboutPanel-BQNpwboB.js 9.79 kB 9.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudRemoteConfig-DQE7NFEM.js 1.48 kB 1.48 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/config-Dim-BcsI.js 996 B 996 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ExtensionPanel-BjuZKAl6.js 9.42 kB 9.42 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/KeybindingPanel-B2IgTA1y.js 12.3 kB 12.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LegacyCreditsPanel-BpYr5BOg.js 20.7 kB 20.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/refreshRemoteConfig-CC0jxlLa.js 1.14 kB 1.14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SecretsPanel-B5Oda_Le.js 21.5 kB 21.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ServerConfigPanel-CL-Z_ily.js 6.49 kB 6.49 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Az4QGSr7.js 38.5 kB 38.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Bc1kL5ht.js 27.8 kB 27.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BxoUe5GJ.js 28.7 kB 28.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-ClhpchbB.js 34.2 kB 34.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-D9qrBXiF.js 30.5 kB 30.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DXfL5vCm.js 23.9 kB 23.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-jzj0F3XL.js 28.8 kB 28.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-KcouHUkA.js 27.9 kB 27.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-MfieTybP.js 32.4 kB 32.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-V6oR26kh.js 24.5 kB 24.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-YUrYiWmR.js 29.9 kB 29.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionPanel-C8J8R_x4.js 18.7 kB 18.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserPanel-nF6spd3u.js 6.21 kB 6.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
User & Accounts — 16.1 kB (baseline 16.1 kB) • ⚪ 0 B

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-BgRgzpcV.js 357 B 357 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auth-DHFz-Tk1.js 3.4 kB 3.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/firebaseAuthStore-m6ICVm0M.js 831 B 831 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/PasswordFields-C2IR8Uml.js 4.51 kB 4.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SignUpForm-CyH3IX4R.js 3.01 kB 3.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UpdatePasswordContent-DTJaYv27.js 2.41 kB 2.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspaceProfilePic-KL8Hs2yn.js 1.57 kB 1.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Editors & Dialogs — 779 B (baseline 779 B) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-CV6kO47Y.js 779 B 779 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
UI Components — 47 kB (baseline 47 kB) • ⚪ 0 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/Button-D-9gIyaN.js 3.08 kB 3.08 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-Cx_Hg1jw.js 1.11 kB 1.11 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudFeedbackTopbarButton-DbHDjDl3.js 1.64 kB 1.64 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyQueueButton-1TjSizl-.js 836 B 836 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyQueueButton-Cj1NVdhW.js 8.02 kB 8.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/FormSearchInput-y8BSEeZq.js 3.73 kB 3.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ScrubableNumberInput-BS8_8a5j.js 5.95 kB 5.95 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscribeButton-wDVrac-D.js 2.34 kB 2.34 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-D1EvgBfE.js 7.39 kB 7.39 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-BQCZ8iNl.js 1.17 kB 1.17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useTerminalTabs-CWmN8S-A.js 9.89 kB 9.89 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-DGB_HZfA.js 1.84 kB 1.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Data & Services — 2.73 MB (baseline 2.73 MB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/api-Dc0rJuP0.js 689 kB 689 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/audioService-D4LD9M2_.js 1.73 kB 1.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/bootstrapStore-DOqLifRE.js 2.08 kB 2.08 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/dialogService-Cohi-daT.js 1.91 MB 1.91 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/dialogService-OiIez2Ks.js 768 B 768 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/extensionStore-zzzTD1RX.js 13 kB 13 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/keybindingService--KkX5R7y.js 6.52 kB 6.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/load3dService-C0y215vU.js 91 kB 91 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/releaseStore-DoKNPx9A.js 803 B 803 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/releaseStore-Dw3ZBSj6.js 7.96 kB 7.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/serverConfigStore-BJqmVNuT.js 2.32 kB 2.32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settingStore-DSqzumwg.js 787 B 787 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/userStore-CHcgV0kx.js 1.85 kB 1.85 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/workflowDraftStore-CC5CnXpC.js 779 B 779 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
Utilities & Hooks — 56.6 kB (baseline 56.6 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/_plugin-vue_export-helper-ralzwvFM.js 315 B 315 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/audioUtils-BR5jA8sx.js 858 B 858 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-BJSyqxym.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/envUtil-CC-l-L9z.js 466 B 466 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-Cddas8Zl.js 1.56 kB 1.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SkeletonUtils-CsnHjXS0.js 133 B 133 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/subscriptionCheckoutUtil-vH59w3RE.js 2.53 kB 2.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useCopyToClipboard-BIA0IAgt.js 944 B 944 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useCurrentUser-DJ4KkkFm.js 765 B 765 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useErrorHandling-CXcNDU4T.js 1.5 kB 1.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useExternalLink-jZrPYEpq.js 1.66 kB 1.66 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useFeatureFlags-B_mbjf4Y.js 4.14 kB 4.14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useLoad3d-DvVsETUX.js 14.6 kB 14.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useLoad3d-uYvIdnoD.js 902 B 902 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useLoad3dViewer-BPuDEsKc.js 881 B 881 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useLoad3dViewer-D5szegsR.js 14.1 kB 14.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useWorkspaceSwitch-EGfbgOj6.js 1.25 kB 1.25 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useWorkspaceUI-pckIkPLr.js 3 kB 3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Vendor & Third-Party — 8.86 MB (baseline 8.86 MB) • ⚪ 0 B

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-axios-Cp6hch1I.js 70.7 kB 70.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-chart-l-KY-tZQ.js 399 kB 399 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-firebase-BvMr43CG.js 836 kB 836 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-i18n-DccD0mxo.js 133 kB 133 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-markdown-D5S6AC80.js 103 kB 103 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-BSv7ubBF.js 1.52 MB 1.52 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-D2gQvLCc.js 1.73 MB 1.73 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-C-tDe-KL.js 399 kB 399 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-sentry-SQwstEKc.js 182 kB 182 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-ueviNA60.js 1.8 MB 1.8 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-BnYkbQDM.js 634 kB 634 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-core-CmHHRvL9.js 311 kB 311 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vueuse-cYXYo6hi.js 121 kB 121 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-XVeHlCL4.js 374 kB 374 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-yjs-CP_4YO8u.js 143 kB 143 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-zod-DcCUUPIi.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 7.92 MB (baseline 7.92 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/AnimationControls-Bal5YgT5.js 4.61 kB 4.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ApiNodesSignInContent-Djz4Lsh2.js 2.69 kB 2.69 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/AudioPreviewPlayer-v0oLn5q5.js 11 kB 11 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-Bt3L7FBS.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/BaseViewTemplate-BU8wYnsH.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CancelSubscriptionDialogContent-ltxvZanU.js 4.84 kB 4.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/changeTracker-BSWMrSJA.js 9.44 kB 9.44 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/changeTracker-C_IKqIdA.js 800 B 800 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudBadges-C1Ga24_Q.js 1.41 kB 1.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudRunButtonWrapper-BCuvcglG.js 1.72 kB 1.72 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudSessionCookie-Co5Wv4Gu.js 3.14 kB 3.14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudSubscription-CHVX3pph.js 1.37 kB 1.37 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-CoSPG7JX.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-CXepDPJT.js 910 B 910 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-32T5PqF_.js 19 kB 19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Ak-xav7X.js 17.7 kB 17.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-B7yDR3IF.js 16.2 kB 16.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BfgrmbF3.js 16.3 kB 16.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BKiowuzF.js 17.1 kB 17.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C2ScMdCP.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CIaXr_da.js 16.3 kB 16.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CQ_1hcIQ.js 15.2 kB 15.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-D9CRAR5X.js 17.7 kB 17.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DgrxZ384.js 16.9 kB 16.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Dm6gdG1p.js 15.4 kB 15.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/constants-CobilG8q.js 579 B 579 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/core-B0x7HTRs.js 73.7 kB 73.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CreateWorkspaceDialogContent-BQulXGFv.js 5.57 kB 5.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CurrentUserPopoverWorkspace-7a_ifcI5.js 20.5 kB 20.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/DeleteWorkspaceDialogContent-C-Tg-jQ0.js 4.28 kB 4.28 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/EditWorkspaceDialogContent-BzfDR3bC.js 5.37 kB 5.37 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/FreeTierDialogContent-Baub9gls.js 5.43 kB 5.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/GlobalToast-DEgp05XN.js 2.91 kB 2.91 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/graphHasMissingNodes-ew9rG8so.js 761 B 761 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/groupNode-HnfrgGHw.js 71.8 kB 71.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-DjENuXF_.js 199 B 199 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-J1VFb2ee.js 535 kB 535 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/InviteMemberDialogContent-D42IcC7B.js 7.43 kB 7.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/InviteMemberUpsellDialogContent-7ZKiD9Ug.js 3.87 kB 3.87 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LeaveWorkspaceDialogContent-DRPkckG6.js 4.11 kB 4.11 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/load3d-Aivlyh7X.js 14.8 kB 14.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3D-CZfofZHL.js 1.11 kB 1.11 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3D-DotUmh2q.js 16.2 kB 16.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3DConfiguration-CGsr_twf.js 6.27 kB 6.27 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3DControls-D53zoqY7.js 30.9 kB 30.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3dViewerContent-DIrCLJjO.js 23 kB 23 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3dViewerContent-DOmb1zO2.js 1.04 kB 1.04 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-a_fD2A1w.js 151 kB 151 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bi1XfdpF.js 188 kB 188 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BJQ0M9Yj.js 210 kB 210 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BvVDOLZZ.js 150 kB 150 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BZLcIBqp.js 173 kB 173 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CjbGas6Z.js 132 kB 132 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CZaOv97H.js 133 kB 133 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D6nxp_Jl.js 153 kB 153 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-dKpvLPCH.js 181 kB 181 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-dXT40Jsi.js 158 kB 158 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-WPbnhfZ5.js 155 kB 155 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-BotMyBoW.js 1.83 kB 1.83 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-CYQWGi0z.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-BtjDuXDA.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaOtherTop-zVBVTwFf.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaTextTop-Dutn8gKk.js 1.01 kB 1.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-BCrt1-Bx.js 2.78 kB 2.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nightlyBadges-C7BzK5UE.js 1.04 kB 1.04 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-46r0KRED.js 451 kB 451 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BrUpuJ60.js 396 kB 396 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-C5Naq7UG.js 364 kB 364 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CenyYNO8.js 450 kB 450 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CN3CzRXx.js 404 kB 404 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Cz73oY7a.js 368 kB 368 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-D22mZTDT.js 400 kB 400 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Dh2PHfFx.js 391 kB 391 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DJ0GsBGj.js 399 kB 399 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DJKCo7UK.js 416 kB 416 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-FjSUW2rw.js 491 kB 491 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeTemplates-Bx5RXa22.js 9.34 kB 9.34 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/onboardingCloudRoutes-BM2KCfHj.js 5.47 kB 5.47 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Popover-iM3e9lB4.js 3.65 kB 3.65 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Preview3d-BS1nMCr2.js 4.89 kB 4.89 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-CfoCr2qV.js 1.39 kB 1.39 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/RemoveMemberDialogContent-nhxVnn05.js 4.09 kB 4.09 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/RevokeInviteDialogContent-DRIJAV0A.js 4 kB 4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-DLICfi3-.js 1.97 kB 1.97 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/saveMesh-BGCfKxo9.js 3.42 kB 3.42 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SelectValue-DxkQ0lz2.js 8.95 kB 8.95 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SignInContent-mDhf_3ZU.js 18.9 kB 18.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/signInSchema-D-cpFzst.js 1.53 kB 1.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-D4A5BM3I.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-KRN59wM5.js 251 B 251 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscribeToRun-BuDyBzlH.js 2.06 kB 2.06 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionBenefits-BxBbqnOZ.js 2.01 kB 2.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionPanelContentWorkspace-DzRW6i32.js 963 B 963 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionPanelContentWorkspace-zx_u2or2.js 22 kB 22 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionRequiredDialogContent-1GVXuDio.js 25.7 kB 25.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionRequiredDialogContentWorkspace-NtmJ_mXN.js 46.4 kB 46.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/telemetry-zZf2dHJ2.js 226 B 226 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/tierBenefits-B2gVO42n.js 3.66 kB 3.66 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/types-DT3N7am7.js 204 B 204 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ValueControlPopover-C87PpkNf.js 4.96 kB 4.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/VideoPlayOverlay-d1kDZ1Hw.js 1.35 kB 1.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-DIRwAHBY.js 3.01 kB 3.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-Dx4DYlRd.js 3.19 kB 3.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-ThP4bP1R.js 283 B 283 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-CYz6jd2F.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-C4yd_6Zg.js 2.9 kB 2.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetCurve-C3tuuOR3.js 9.36 kB 9.36 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-tNR6Ubxu.js 3.61 kB 3.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-HFijaR80.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCrop-C9MoqAHr.js 22.2 kB 22.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputNumber-CoBMnrOe.js 18.8 kB 18.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-W9vcgWMp.js 1.86 kB 1.86 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-S6xnM-i1.js 1.98 kB 1.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLegacy-B_kTGB3T.js 787 B 787 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-BqPoJLFX.js 2.93 kB 2.93 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetPainter-maJecfEz.js 32.9 kB 32.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-C6ZYch5M.js 1.1 kB 1.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetRecordAudio-CqXSm56S.js 17.4 kB 17.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetSelect-BivbrUvS.js 58.3 kB 58.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-aCGogL4R.js 5.07 kB 5.07 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-9dIESGMI.js 6.8 kB 6.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-DYLaC2lj.js 393 B 393 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetWithControl-DzFgMq7m.js 4.14 kB 4.14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspacePanelContent-DOhvT1c-.js 29.3 kB 29.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

@github-actions
Copy link

github-actions bot commented Mar 5, 2026

⚡ Performance Report

ℹ️ Collecting baseline variance data (0/5 runs). Significance will appear after 2 main branch runs.

Metric Baseline PR Δ
canvas-idle: style recalcs 124 124 -1%
canvas-idle: layouts 0 0 +0%
canvas-idle: task duration 411ms 415ms +1%
canvas-mouse-sweep: style recalcs 175 179 +2%
canvas-mouse-sweep: layouts 12 12 -3%
canvas-mouse-sweep: task duration 888ms 946ms +7%
dom-widget-clipping: style recalcs 41 43 +7%
dom-widget-clipping: layouts 0 0 +0%
dom-widget-clipping: task duration 353ms 371ms +5%
subgraph-dom-widget-clipping: style recalcs 74 74 +0%
subgraph-dom-widget-clipping: layouts 0 0 -100%
subgraph-dom-widget-clipping: task duration 413ms 430ms +4%
subgraph-idle: style recalcs 123 122 -1%
subgraph-idle: layouts 1 0 -50%
subgraph-idle: task duration 413ms 410ms -1%
subgraph-mouse-sweep: style recalcs 162 156 -4%
subgraph-mouse-sweep: layouts 16 16 +0%
subgraph-mouse-sweep: task duration 835ms 747ms -11%
Raw data
{
  "timestamp": "2026-03-05T07:46:52.601Z",
  "gitSha": "3c5f98cd9d6d876f3f2acaa2f1b76f4649546de7",
  "branch": "ci/fix-flaky-screenshots-2",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2023.727000000008,
      "styleRecalcs": 124,
      "styleRecalcDurationMs": 19.24,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 401.971,
      "heapDeltaBytes": -2647348
    },
    {
      "name": "canvas-idle",
      "durationMs": 2038.7960000000476,
      "styleRecalcs": 124,
      "styleRecalcDurationMs": 21.112000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 423.348,
      "heapDeltaBytes": -3867552
    },
    {
      "name": "canvas-idle",
      "durationMs": 2024.3189999999913,
      "styleRecalcs": 123,
      "styleRecalcDurationMs": 22.990000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 418.92400000000004,
      "heapDeltaBytes": -3083772
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2094.102000000021,
      "styleRecalcs": 188,
      "styleRecalcDurationMs": 57.813,
      "layouts": 12,
      "layoutDurationMs": 3.6500000000000004,
      "taskDurationMs": 1093.573,
      "heapDeltaBytes": -2542164
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1890.5749999999557,
      "styleRecalcs": 173,
      "styleRecalcDurationMs": 57.024,
      "layouts": 12,
      "layoutDurationMs": 3.6769999999999996,
      "taskDurationMs": 865.388,
      "heapDeltaBytes": -1592068
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1913.3469999999875,
      "styleRecalcs": 176,
      "styleRecalcDurationMs": 60.68899999999999,
      "layouts": 12,
      "layoutDurationMs": 4.2540000000000004,
      "taskDurationMs": 878.211,
      "heapDeltaBytes": -1186064
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 563.33699999999,
      "styleRecalcs": 42,
      "styleRecalcDurationMs": 12.466,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 348.75999999999993,
      "heapDeltaBytes": 7745916
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 601.2910000000034,
      "styleRecalcs": 44,
      "styleRecalcDurationMs": 13.113000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 382.682,
      "heapDeltaBytes": 7648148
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 595.7500000000095,
      "styleRecalcs": 44,
      "styleRecalcDurationMs": 13.402000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 382.6120000000001,
      "heapDeltaBytes": 7656632
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 596.5860000000021,
      "styleRecalcs": 73,
      "styleRecalcDurationMs": 15.412,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 424.682,
      "heapDeltaBytes": -7753932
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 597.5050000000124,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 15.605999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 429.16700000000003,
      "heapDeltaBytes": -7811884
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 632.974000000047,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 19.565999999999995,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 436.81000000000006,
      "heapDeltaBytes": 14453068
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2022.5560000000087,
      "styleRecalcs": 124,
      "styleRecalcDurationMs": 23.055,
      "layouts": 1,
      "layoutDurationMs": 0.26700000000000007,
      "taskDurationMs": 402.52700000000004,
      "heapDeltaBytes": -2006176
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1991.5639999999826,
      "styleRecalcs": 120,
      "styleRecalcDurationMs": 22.011000000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 401.046,
      "heapDeltaBytes": -2097780
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1999.5890000000145,
      "styleRecalcs": 121,
      "styleRecalcDurationMs": 22.826999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 426.424,
      "heapDeltaBytes": -2463588
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1716.4429999999697,
      "styleRecalcs": 156,
      "styleRecalcDurationMs": 48.251000000000005,
      "layouts": 16,
      "layoutDurationMs": 4.529,
      "taskDurationMs": 743.614,
      "heapDeltaBytes": -4005460
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1741.6410000000155,
      "styleRecalcs": 157,
      "styleRecalcDurationMs": 48.986000000000004,
      "layouts": 16,
      "layoutDurationMs": 4.657,
      "taskDurationMs": 747.549,
      "heapDeltaBytes": -5316912
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1683.9650000000006,
      "styleRecalcs": 154,
      "styleRecalcDurationMs": 48.675,
      "layouts": 16,
      "layoutDurationMs": 4.388000000000001,
      "taskDurationMs": 750.016,
      "heapDeltaBytes": -3958568
    }
  ]
}

@christian-byrne
Copy link
Contributor Author

/update-playwright

@dosubot dosubot bot added size:S This PR changes 10-29 lines, ignoring generated files. and removed size:M This PR changes 30-99 lines, ignoring generated files. labels Mar 5, 2026
@github-actions
Copy link

github-actions bot commented Mar 5, 2026

Updating Playwright Expectations

Copy link
Member

@benceruleanlu benceruleanlu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: loadWorkflowInMedia.spec.ts wasn't modified here but was mentioned in the PR description. There are no new snapshots here. Stabilization LGTM.

@christian-byrne
Copy link
Contributor Author

christian-byrne commented Mar 5, 2026

Note: loadWorkflowInMedia.spec.ts wasn't modified here but was mentioned in the PR description. There are no new snapshots here. Stabilization LGTM.

Good point, thank you. Update the PR descript/title.


@coderabbitai this was the part of the PR description I removed, we didn't end up doing it in this PR:

2. no-workflow-webp (loadWorkflowInMedia.spec.ts)

Root cause: Dropping no_workflow.webp (which has no embedded workflow) creates a LoadImage node and uploads the file. The image preview then loads asynchronously via the /view API. The screenshot was taken before the upload and preview load completed, causing the preview to sometimes show the loaded image and sometimes show a black/empty area.

Fix: Wait for the upload response and the subsequent /view response before taking the screenshot, ensuring the image preview always renders before comparison.

Can you make a followup/tracking Issue to do this later and assign it to me?

@christian-byrne christian-byrne changed the title fix: stabilize flaky screenshot tests for search results and image preview fix: stabilize flaky screenshot tests that rely on search box timings Mar 5, 2026
@christian-byrne christian-byrne merged commit bab1d34 into main Mar 5, 2026
31 checks passed
@christian-byrne christian-byrne deleted the ci/fix-flaky-screenshots-2 branch March 5, 2026 23:28
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 5, 2026

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
gh issue create \
  --repo Comfy-Org/ComfyUI_frontend \
  --title "fix: stabilize no-workflow-webp flaky screenshot test in loadWorkflowInMedia.spec.ts" \
  --body "## Summary

This is a follow-up tracking issue for a fix that was scoped out of PR `#9426`.

## Root Cause

Dropping \`no_workflow.webp\` (which has no embedded workflow) creates a LoadImage node and uploads the file. The image preview then loads asynchronously via the \`/view\` API. The screenshot is taken before the upload and preview load completes, causing the preview to sometimes show the loaded image and sometimes show a black/empty area.

## Proposed Fix

Wait for the upload response and the subsequent \`/view\` response before taking the screenshot in \`loadWorkflowInMedia.spec.ts\`, ensuring the image preview always renders before comparison.

## References

- Deferred from: `#9426` (https://github.com/Comfy-Org/ComfyUI_frontend/pull/9426)
- Related flaky test tracking issue: `#4658`
- Requested by: `@christian-byrne`

## Acceptance Criteria

- [ ] The \`no-workflow-webp\` test in \`browser_tests/tests/loadWorkflowInMedia.spec.ts\` no longer flakes due to timing/async upload race conditions.
- [ ] Screenshot is only taken after the \`/view\` API response confirms the image preview has loaded." \
  --assignee christian-byrne

Length of output: 57


@christian-byrne: Done! I've created the follow-up tracking issue here: #9450

It's assigned to you and includes:

  • The root cause (async /view API race condition in loadWorkflowInMedia.spec.ts)
  • The proposed fix (wait for upload + /view responses before screenshotting)
  • Backlinks to PR #9426 and the related flaky test issue #4658
  • Acceptance criteria checklist

🧠 Learnings used
Learnt from: Myestery
Repo: Comfy-Org/ComfyUI_frontend PR: 7422
File: .github/workflows/pr-update-playwright-expectations.yaml:131-135
Timestamp: 2025-12-12T23:02:37.473Z
Learning: In the `.github/workflows/pr-update-playwright-expectations.yaml` workflow in the Comfy-Org/ComfyUI_frontend repository, the snapshot update process is intentionally scoped to only add and update snapshot images. Deletions of snapshot files are handled explicitly outside this workflow and should not be suggested as part of this automation.

Learnt from: DrJKL
Repo: Comfy-Org/ComfyUI_frontend PR: 7415
File: browser_tests/tests/mobileBaseline.spec.ts:17-22
Timestamp: 2025-12-13T05:54:35.779Z
Learning: In browser_tests tests for the Comfy-Org/ComfyUI_frontend repository, the `comfyPage.loadWorkflow()` method already handles all necessary synchronization and waiting. No additional `await comfyPage.nextFrame()` call is needed before taking screenshots after loading a workflow.

Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-02-23T21:34:45.361Z
Learning: Applies to browser_tests/**/*.spec.ts : Follow Playwright best practices described in the Playwright documentation

Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/AGENTS.md:0-0
Timestamp: 2026-02-07T03:16:24.649Z
Learning: Applies to browser_tests/**/*.spec.ts : Follow Playwright best practices documented in `docs/guidance/playwright.md` for test files

Learnt from: christian-byrne
Repo: Comfy-Org/ComfyUI_frontend PR: 8951
File: src/platform/workflow/management/stores/workflowStore.ts:301-301
Timestamp: 2026-03-05T23:21:41.380Z
Learning: In src/platform/workflow/management/stores/workflowStore.ts, `createTemporary()` and `createNewTemporary()` intentionally inject a UUID `id` into workflow data via `ensureWorkflowId()` to give workflows stable identity for sharing. This is a known behavioral change introduced in PR `#8951`. Extensions relying on serialized content matching their input may be silently affected.

Learnt from: DrJKL
Repo: Comfy-Org/ComfyUI_frontend PR: 7415
File: browser_tests/tests/mobileBaseline.spec.ts:7-15
Timestamp: 2025-12-13T05:34:22.209Z
Learning: In Playwright tests in the Comfy-Org/ComfyUI_frontend repository, the `toPass()` assertion method implements incremental backoff during retries, so increasing the timeout value (e.g., to 5000ms) is sufficient for handling async operations without being overly aggressive.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

New Browser Test Expectations New browser test screenshot should be set by github action size:S This PR changes 10-29 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[test] Fix flaky playwright tests in CI

2 participants