mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-03-10 03:37:33 +08:00
feat: add text preview support to jobs API
Amp-Thread-ID: https://ampcode.com/threads/T-019c0be0-9fc6-71ac-853a-7c7cc846b375 Co-authored-by: Amp <amp@ampcode.com>
This commit is contained in:
parent
e721e24136
commit
be336adb08
@ -20,7 +20,7 @@ class JobStatus:
|
|||||||
|
|
||||||
|
|
||||||
# Media types that can be previewed in the frontend
|
# Media types that can be previewed in the frontend
|
||||||
PREVIEWABLE_MEDIA_TYPES = frozenset({'images', 'video', 'audio', '3d'})
|
PREVIEWABLE_MEDIA_TYPES = frozenset({'images', 'video', 'audio', '3d', 'text'})
|
||||||
|
|
||||||
# 3D file extensions for preview fallback (no dedicated media_type exists)
|
# 3D file extensions for preview fallback (no dedicated media_type exists)
|
||||||
THREE_D_EXTENSIONS = frozenset({'.obj', '.fbx', '.gltf', '.glb', '.usdz'})
|
THREE_D_EXTENSIONS = frozenset({'.obj', '.fbx', '.gltf', '.glb', '.usdz'})
|
||||||
@ -75,6 +75,23 @@ def normalize_outputs(outputs: dict) -> dict:
|
|||||||
normalized[node_id] = normalized_node
|
normalized[node_id] = normalized_node
|
||||||
return normalized
|
return normalized
|
||||||
|
|
||||||
|
# Text preview truncation limit (1024 characters) to prevent preview_output bloat
|
||||||
|
TEXT_PREVIEW_MAX_LENGTH = 1024
|
||||||
|
|
||||||
|
|
||||||
|
def _create_text_preview(value: str) -> dict:
|
||||||
|
"""Create a text preview dict with optional truncation.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict with 'content' and optionally 'truncated' flag
|
||||||
|
"""
|
||||||
|
if len(value) <= TEXT_PREVIEW_MAX_LENGTH:
|
||||||
|
return {'content': value}
|
||||||
|
return {
|
||||||
|
'content': value[:TEXT_PREVIEW_MAX_LENGTH],
|
||||||
|
'truncated': True
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def _extract_job_metadata(extra_data: dict) -> tuple[Optional[int], Optional[str]]:
|
def _extract_job_metadata(extra_data: dict) -> tuple[Optional[int], Optional[str]]:
|
||||||
"""Extract create_time and workflow_id from extra_data.
|
"""Extract create_time and workflow_id from extra_data.
|
||||||
@ -221,23 +238,43 @@ def get_outputs_summary(outputs: dict) -> tuple[int, Optional[dict]]:
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
for item in items:
|
for item in items:
|
||||||
normalized = normalize_output_item(item)
|
if not isinstance(item, dict):
|
||||||
if normalized is None:
|
# Handle text outputs (non-dict items like strings or tuples)
|
||||||
continue
|
normalized = normalize_output_item(item)
|
||||||
|
if normalized is None:
|
||||||
|
# Not a 3D file string — check for text preview
|
||||||
|
if media_type == 'text':
|
||||||
|
count += 1
|
||||||
|
if preview_output is None:
|
||||||
|
if isinstance(item, tuple):
|
||||||
|
text_value = item[0] if item else ''
|
||||||
|
else:
|
||||||
|
text_value = str(item)
|
||||||
|
text_preview = _create_text_preview(text_value)
|
||||||
|
enriched = {
|
||||||
|
**text_preview,
|
||||||
|
'nodeId': node_id,
|
||||||
|
'mediaType': media_type
|
||||||
|
}
|
||||||
|
if fallback_preview is None:
|
||||||
|
fallback_preview = enriched
|
||||||
|
continue
|
||||||
|
# normalize_output_item returned a dict (e.g. 3D file)
|
||||||
|
item = normalized
|
||||||
|
|
||||||
count += 1
|
count += 1
|
||||||
|
|
||||||
if preview_output is not None:
|
if preview_output is not None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if isinstance(normalized, dict) and is_previewable(media_type, normalized):
|
if is_previewable(media_type, item):
|
||||||
enriched = {
|
enriched = {
|
||||||
**normalized,
|
**item,
|
||||||
'nodeId': node_id,
|
'nodeId': node_id,
|
||||||
}
|
}
|
||||||
if 'mediaType' not in normalized:
|
if 'mediaType' not in item:
|
||||||
enriched['mediaType'] = media_type
|
enriched['mediaType'] = media_type
|
||||||
if normalized.get('type') == 'output':
|
if item.get('type') == 'output':
|
||||||
preview_output = enriched
|
preview_output = enriched
|
||||||
elif fallback_preview is None:
|
elif fallback_preview is None:
|
||||||
fallback_preview = enriched
|
fallback_preview = enriched
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user