comfy-qa 1.13.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/agent/qa-research.ts +21 -12
package/package.json
CHANGED
package/src/agent/qa-research.ts
CHANGED
|
@@ -604,9 +604,11 @@ function generateSpec(results: ResearchResults, checklist: Checklist): string {
|
|
|
604
604
|
}
|
|
605
605
|
|
|
606
606
|
if (setupLines.length > 0) {
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
607
|
+
// Interleave visual actions with pace() calls so the cursor moves
|
|
608
|
+
// throughout the narration, not just once at the start.
|
|
609
|
+
const interleavedAction = visualLines.length > 0
|
|
610
|
+
? visualLines.map(l => ` ${l}\n await pace();`).join("\n")
|
|
611
|
+
: " await pace();\n await pace();";
|
|
610
612
|
|
|
611
613
|
segments.push(` // ${icon} ${op.id} (${op.type}) — PASS
|
|
612
614
|
.segment(${JSON.stringify(narration)}, {
|
|
@@ -614,17 +616,18 @@ function generateSpec(results: ResearchResults, checklist: Checklist): string {
|
|
|
614
616
|
${setupLines.map(l => ` ${l}`).join("\n")}
|
|
615
617
|
},
|
|
616
618
|
action: async (pace) => {
|
|
617
|
-
${
|
|
619
|
+
${interleavedAction}
|
|
618
620
|
},
|
|
619
621
|
})`);
|
|
620
622
|
} else {
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
623
|
+
// Interleave visual actions with pace() so cursor moves during narration
|
|
624
|
+
const interleaved = visualLines.length > 0
|
|
625
|
+
? visualLines.map(l => ` ${l}\n await pace();`).join("\n")
|
|
626
|
+
: " await pace();\n await pace();";
|
|
624
627
|
|
|
625
628
|
segments.push(` // ${icon} ${op.id} (${op.type}) — PASS
|
|
626
629
|
.segment(${JSON.stringify(narration)}, async (pace) => {
|
|
627
|
-
${
|
|
630
|
+
${interleaved}
|
|
628
631
|
})`);
|
|
629
632
|
}
|
|
630
633
|
} else {
|
|
@@ -664,22 +667,28 @@ import { createVideoScript } from "../lib/demowright/dist/index.mjs";
|
|
|
664
667
|
const SCORECARD_HTML = ${JSON.stringify(scorecardHtml)};
|
|
665
668
|
|
|
666
669
|
test("${slug} QA evidence", async ({ page }) => {
|
|
667
|
-
test.setTimeout(
|
|
670
|
+
test.setTimeout(20 * 60_000);
|
|
668
671
|
|
|
669
672
|
const script = createVideoScript()
|
|
670
673
|
.title(${JSON.stringify(checklist.product + " QA")}, {
|
|
671
674
|
subtitle: "Score: ${results.totalPassed}/${results.totalOperations} (${results.scorePercent}%)",
|
|
672
|
-
durationMs:
|
|
675
|
+
durationMs: 3500,
|
|
673
676
|
})
|
|
674
677
|
${segments.join("\n")}
|
|
675
678
|
|
|
676
|
-
// Render the full scorecard as the last segment
|
|
679
|
+
// Render the full scorecard as the last segment — narration is intentionally
|
|
680
|
+
// long (~15s) so the card stays on screen long enough to read.
|
|
677
681
|
.segment(${JSON.stringify(buildScorecardNarration(results, checklist))}, {
|
|
678
682
|
setup: async () => {
|
|
679
683
|
await page.setContent(SCORECARD_HTML, { waitUntil: "domcontentloaded" });
|
|
680
684
|
await page.waitForTimeout(500);
|
|
681
685
|
},
|
|
682
686
|
action: async (pace) => {
|
|
687
|
+
// Multiple pace() calls distribute the full narration duration
|
|
688
|
+
// across visible card time (so card is held, not rushed to outro)
|
|
689
|
+
await pace();
|
|
690
|
+
await pace();
|
|
691
|
+
await pace();
|
|
683
692
|
await pace();
|
|
684
693
|
},
|
|
685
694
|
})
|
|
@@ -687,7 +696,7 @@ ${segments.join("\n")}
|
|
|
687
696
|
.outro({
|
|
688
697
|
text: "QA Results: ${results.totalPassed}/${results.totalOperations} (${results.scorePercent}%)",
|
|
689
698
|
subtitle: ${JSON.stringify(scoreLines.join(" | "))},
|
|
690
|
-
durationMs:
|
|
699
|
+
durationMs: 5000,
|
|
691
700
|
});
|
|
692
701
|
|
|
693
702
|
// Pre-generate TTS BEFORE navigating — avoids idle time in recording
|