ATH-MaaS/Pixelle-Video · error · FileNotFoundError

尾帧图片不存在: {last_image_path}

Error message

尾帧图片不存在: {last_image_path}

What it means

generate_video validates the optional last_image_path (used for first/last-frame video generation) and raises FileNotFoundError if the file does not exist. Raised only when a last frame was supplied but is missing on disk.

Source

Thrown at pixelle_video/services/api_services/video_dashscope.py:182

            reference_image_paths: 可选参考图片列表(r2v)
            reference_video_paths: 可选参考视频列表(r2v)
            reference_audio_path: 可选参考音频/音色路径(r2v)
            audio_path: 可选驱动音频本地路径(wan2.7)

        Returns:
            video_url: 远端视频 URL

        Raises:
            FileNotFoundError: 输入图片不存在
            RuntimeError: API 调用或下载失败
        """
        if VideoSynthesis is None:
            raise RuntimeError("dashscope package not installed. Run: pip install dashscope")

        if image_path and not os.path.exists(image_path):
            raise FileNotFoundError(f"输入图片不存在: {image_path}")
        if last_image_path and not os.path.exists(last_image_path):
            raise FileNotFoundError(f"尾帧图片不存在: {last_image_path}")
        if first_clip_path and not os.path.exists(first_clip_path):
            raise FileNotFoundError(f"输入视频片段不存在: {first_clip_path}")
        if reference_image_path and not os.path.exists(reference_image_path):
            raise FileNotFoundError(f"参考图片不存在: {reference_image_path}")
        for ref_image_path in reference_image_paths or []:
            if ref_image_path and not os.path.exists(ref_image_path):
                raise FileNotFoundError(f"参考图片不存在: {ref_image_path}")
        for ref_video_path in reference_video_paths or []:
            if ref_video_path and not os.path.exists(ref_video_path):
                raise FileNotFoundError(f"参考视频不存在: {ref_video_path}")
        if reference_audio_path and not os.path.exists(reference_audio_path):
            raise FileNotFoundError(f"参考音频不存在: {reference_audio_path}")
        if audio_path and not os.path.exists(audio_path):
            raise FileNotFoundError(f"驱动音频不存在: {audio_path}")

        logger.info(f"DashscopeVideoClient: model={model}, prompt={prompt[:60]}...")

        if self._is_text_to_video_model(model):

View on GitHub (pinned to 848b054e4f)

Solutions

  1. Verify the file exists with os.path.exists(last_image_path) before the call and fix the path
  2. Regenerate the last-frame image if it was produced by an earlier step
  3. Use pathlib to build paths consistently across platforms
  4. Pass None if you do not actually intend last-frame mode

Example fix

// before
client.generate_video(prompt, image_path='a.png', last_image_path='end.png')  # FileNotFoundError
// after
if not os.path.exists('end.png'):
    generate_end_frame('end.png')  # create it first
client.generate_video(prompt, image_path='a.png', last_image_path='end.png')
Defensive patterns

Strategy: validation

Validate before calling

import os
if last_image_path and not os.path.isfile(last_image_path):
    raise FileNotFoundError(f'尾帧图片不存在: {last_image_path}')

Type guard

def is_existing_file(path) -> bool:
    return isinstance(path, str) and os.path.isfile(path)

Try / catch

try:
    video = client.generate_video(prompt, image_path='a.png', last_image_path='end.png')
except FileNotFoundError as e:
    logging.error(f'Last-frame image missing: {e}')
    video = None

Prevention

When it happens

Trigger: generate_video(..., last_image_path='end.png', ...) with a non-existent end-frame file; stale path after a temp directory cleanup.

Common situations: First/last-frame workflows where the end image was deleted or written with a different name; temp files cleaned between steps; typo in filename; cross-OS path separators in shared config.

Understand the failure class

Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.

Related errors


AI-assisted analysis of ATH-MaaS/Pixelle-Video@848b054e4f (2026-08-30). Data as JSON: /api/errors/b41c9b52db718546. Report an issue: GitHub.