diff --git a/src/components/composer/NodeHighDefinitionPanel.tsx b/src/components/composer/NodeHighDefinitionPanel.tsx index dbba416e..eddc70d2 100644 --- a/src/components/composer/NodeHighDefinitionPanel.tsx +++ b/src/components/composer/NodeHighDefinitionPanel.tsx @@ -2,24 +2,34 @@ import { useCallback, useMemo } from "react"; import { Button, Select } from "antd"; -import { ArrowUpOutlined } from "@ant-design/icons"; +import { ArrowUpOutlined, ThunderboltFilled } from "@ant-design/icons"; import { PopiModelSelect } from "@/components/nodes/PopiModelSelect"; import { useModelStore } from "@/store/modelStore"; import { useWorkflowStore } from "@/store/workflowStore"; import type { SmartImageNodeData, WorkflowNode } from "@/types"; -import { buildHighDefinitionParameters, chooseHighDefinitionModel, HIGH_DEFINITION_BATCH_SIZE, HIGH_DEFINITION_RESOLUTION, HIGH_DEFINITION_SUBTYPE } from "@/utils/highDefinitionNodes"; +import { buildHighDefinitionParameters, chooseHighDefinitionModel, HIGH_DEFINITION_BATCH_SIZE, HIGH_DEFINITION_MODEL_MODE, HIGH_DEFINITION_SCALE, HIGH_DEFINITION_SUBTYPE } from "@/utils/highDefinitionNodes"; import { toSelectedModel } from "@/utils/selectedModel"; interface NodeHighDefinitionPanelProps { node: WorkflowNode; } -const RESOLUTION_OPTIONS = [ - { label: "4K", value: "4K" }, +const SCALE_OPTIONS = [ + { label: "2", value: 2 }, + { label: "4", value: 4 }, + { label: "6", value: 6 }, ]; -function readResolution(parameters: Record | undefined): string { - return typeof parameters?.resolution === "string" && parameters.resolution ? parameters.resolution : HIGH_DEFINITION_RESOLUTION; +const MODEL_MODE_OPTIONS = [ + { label: "通用", value: HIGH_DEFINITION_MODEL_MODE }, +]; + +function readScale(parameters: Record | undefined): number { + return typeof parameters?.scale === "number" && Number.isFinite(parameters.scale) ? parameters.scale : HIGH_DEFINITION_SCALE; +} + +function readModelMode(parameters: Record | undefined): string { + return typeof parameters?.modelMode === "string" && parameters.modelMode ? parameters.modelMode : HIGH_DEFINITION_MODEL_MODE; } export function NodeHighDefinitionPanel({ node }: NodeHighDefinitionPanelProps) { @@ -33,7 +43,8 @@ export function NodeHighDefinitionPanel({ node }: NodeHighDefinitionPanelProps) [data.selectedModel, highDefinitionModels] ); const parameters = buildHighDefinitionParameters(data.parameters); - const resolution = readResolution(parameters); + const scale = readScale(parameters); + const modelMode = readModelMode(parameters); const updateParameters = useCallback((patch: Record) => { updateNodeData(node.id, { @@ -61,24 +72,15 @@ export function NodeHighDefinitionPanel({ node }: NodeHighDefinitionPanelProps)
event.stopPropagation()} > -
-
-

高清放大

-
- + ))} +
+ ), [handleCaptureFrame, hasLoadedFrame, isCaptureLoading, isRunning]); + + return ( +
setIsHovered(true)} + onMouseLeave={() => setIsHovered(false)} + onDoubleClickCapture={preventVideoDoubleClick} + onDoubleClick={preventVideoDoubleClick} + > +