diff --git a/browser_tests/tests/recordAudio.spec.ts b/browser_tests/tests/recordAudio.spec.ts new file mode 100644 index 0000000000..cc0ac3684f --- /dev/null +++ b/browser_tests/tests/recordAudio.spec.ts @@ -0,0 +1,28 @@ +import { expect } from '@playwright/test' + +import { comfyPageFixture as test } from '../fixtures/ComfyPage' + +test.beforeEach(async ({ comfyPage }) => { + await comfyPage.setSetting('Comfy.UseNewMenu', 'Disabled') +}) + +test.describe('Record Audio Node', () => { + test('should add a record audio node and take a screenshot', async ({ + comfyPage + }) => { + // Open the search box by double clicking on the canvas + await comfyPage.doubleClickCanvas() + await expect(comfyPage.searchBox.input).toHaveCount(1) + + // Search for and add the RecordAudio node + await comfyPage.searchBox.fillAndSelectFirstNode('RecordAudio') + await comfyPage.nextFrame() + + // Verify the RecordAudio node was added + const recordAudioNodes = await comfyPage.getNodeRefsByType('RecordAudio') + expect(recordAudioNodes.length).toBe(1) + + // Take a screenshot of the canvas with the RecordAudio node + await expect(comfyPage.canvas).toHaveScreenshot('record_audio_node.png') + }) +}) diff --git a/browser_tests/tests/recordAudio.spec.ts-snapshots/record-audio-node-chromium-linux.png b/browser_tests/tests/recordAudio.spec.ts-snapshots/record-audio-node-chromium-linux.png new file mode 100644 index 0000000000..3a838d19c7 Binary files /dev/null and b/browser_tests/tests/recordAudio.spec.ts-snapshots/record-audio-node-chromium-linux.png differ diff --git a/src/extensions/core/uploadAudio.ts b/src/extensions/core/uploadAudio.ts index d6bec005a2..cd2ff97e1e 100644 --- a/src/extensions/core/uploadAudio.ts +++ b/src/extensions/core/uploadAudio.ts @@ -253,7 +253,7 @@ app.registerExtension({ audio.setAttribute('name', 'media') const audioUIWidget: DOMWidget = node.addDOMWidget(inputName, /* name=*/ 'audioUI', audio) - audioUIWidget.options.canvasOnly = true + audioUIWidget.options.canvasOnly = false let mediaRecorder: MediaRecorder | null = null let isRecording = false @@ -376,10 +376,12 @@ app.registerExtension({ mediaRecorder.stop() } }, - { serialize: false, canvasOnly: true } + { serialize: false, canvasOnly: false } ) recordWidget.label = t('g.startRecording') + // Override the type for Vue rendering while keeping 'button' for LiteGraph + recordWidget.type = 'audiorecord' const originalOnRemoved = node.onRemoved node.onRemoved = function () { diff --git a/src/lib/litegraph/src/types/widgets.ts b/src/lib/litegraph/src/types/widgets.ts index 02111acef1..8d77c79e90 100644 --- a/src/lib/litegraph/src/types/widgets.ts +++ b/src/lib/litegraph/src/types/widgets.ts @@ -79,7 +79,6 @@ export type IWidget = | ISelectButtonWidget | ITextareaWidget | IAssetWidget - | IAudioRecordWidget export interface IBooleanWidget extends IBaseWidget { type: 'toggle' @@ -228,11 +227,6 @@ export interface ITextareaWidget extends IBaseWidget { value: string } -export interface IAudioRecordWidget extends IBaseWidget { - type: 'audiorecord' - value: string -} - export interface IAssetWidget extends IBaseWidget> { type: 'asset' diff --git a/src/renderer/extensions/vueNodes/widgets/composables/useAudioRecordWidget.ts b/src/renderer/extensions/vueNodes/widgets/composables/useAudioRecordWidget.ts deleted file mode 100644 index efa11a43b4..0000000000 --- a/src/renderer/extensions/vueNodes/widgets/composables/useAudioRecordWidget.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { LGraphNode } from '@/lib/litegraph/src/litegraph' -import type { IAudioRecordWidget } from '@/lib/litegraph/src/types/widgets' -import type { - AudioRecordInputSpec, - InputSpec as InputSpecV2 -} from '@/schemas/nodeDef/nodeDefSchemaV2' -import type { ComfyWidgetConstructorV2 } from '@/scripts/widgets' - -export const useAudioRecordWidget = (): ComfyWidgetConstructorV2 => { - return (node: LGraphNode, inputSpec: InputSpecV2): IAudioRecordWidget => { - const { - name, - default: defaultValue = '', - options = {} - } = inputSpec as AudioRecordInputSpec - - const widget = node.addWidget('audiorecord', name, defaultValue, () => {}, { - serialize: true, - ...options - }) as IAudioRecordWidget - - return widget - } -} diff --git a/src/schemas/nodeDef/nodeDefSchemaV2.ts b/src/schemas/nodeDef/nodeDefSchemaV2.ts index f77c59a800..09983d115e 100644 --- a/src/schemas/nodeDef/nodeDefSchemaV2.ts +++ b/src/schemas/nodeDef/nodeDefSchemaV2.ts @@ -152,13 +152,6 @@ const zTextareaInputSpec = zBaseInputOptions.extend({ .optional() }) -const zAudioRecordInputSpec = zBaseInputOptions.extend({ - type: z.literal('AUDIORECORD'), - name: z.string(), - isOptional: z.boolean().optional(), - options: z.record(z.unknown()).optional() -}) - const zCustomInputSpec = zBaseInputOptions.extend({ type: z.string(), name: z.string(), @@ -174,7 +167,6 @@ const zInputSpec = z.union([ zColorInputSpec, zFileUploadInputSpec, zImageInputSpec, - zAudioRecordInputSpec, zImageCompareInputSpec, zMarkdownInputSpec, zTreeSelectInputSpec, @@ -230,7 +222,6 @@ export type GalleriaInputSpec = z.infer export type SelectButtonInputSpec = z.infer export type TextareaInputSpec = z.infer export type CustomInputSpec = z.infer -export type AudioRecordInputSpec = z.infer export type InputSpec = z.infer export type OutputSpec = z.infer diff --git a/src/scripts/widgets.ts b/src/scripts/widgets.ts index 97fd3f829e..dd75081af1 100644 --- a/src/scripts/widgets.ts +++ b/src/scripts/widgets.ts @@ -6,7 +6,6 @@ import type { IStringWidget } from '@/lib/litegraph/src/types/widgets' import { useSettingStore } from '@/platform/settings/settingStore' -import { useAudioRecordWidget } from '@/renderer/extensions/vueNodes/widgets/composables/useAudioRecordWidget' import { useBooleanWidget } from '@/renderer/extensions/vueNodes/widgets/composables/useBooleanWidget' import { useChartWidget } from '@/renderer/extensions/vueNodes/widgets/composables/useChartWidget' import { useColorWidget } from '@/renderer/extensions/vueNodes/widgets/composables/useColorWidget' @@ -305,6 +304,5 @@ export const ComfyWidgets: Record = { CHART: transformWidgetConstructorV2ToV1(useChartWidget()), GALLERIA: transformWidgetConstructorV2ToV1(useGalleriaWidget()), SELECTBUTTON: transformWidgetConstructorV2ToV1(useSelectButtonWidget()), - TEXTAREA: transformWidgetConstructorV2ToV1(useTextareaWidget()), - AUDIO_RECORD: transformWidgetConstructorV2ToV1(useAudioRecordWidget()) + TEXTAREA: transformWidgetConstructorV2ToV1(useTextareaWidget()) }