invoke-ai/InvokeAI · error · ImageMoveQueueActive

Cannot start image move while queue work is active

Error message

Cannot start image move while queue work is active

What it means

_assert_no_active_queue_work blocks image move operations while the session queue has pending or in-progress work, raising ImageMoveQueueActive. Moving files mid-generation would corrupt images referenced by running queue items.

Source

Thrown at invokeai/app/services/image_moves/image_moves_default.py:134

            self._refresh_finished_future_locked()
            return self._build_background_status_locked()

    def is_maintenance_active(self) -> bool:
        with self._future_lock:
            self._refresh_finished_future_locked()
            is_running = self._future is not None and not self._future.done()
            operation_reserved = self._future_operation is not None
        return operation_reserved or is_running or self._get_active_job_id() is not None

    def _assert_no_active_queue_work(self) -> None:
        session_queue = self._session_queue
        if session_queue is None and self._invoker is not None:
            session_queue = getattr(self._invoker.services, "session_queue", None)
        if session_queue is None:
            return
        queue_status = session_queue.get_queue_status(DEFAULT_QUEUE_ID)
        if queue_status.pending > 0 or queue_status.in_progress > 0:
            raise ImageMoveQueueActive("Cannot start image move while queue work is active")

    def _start_background_operation(
        self,
        operation: ImageMoveBackgroundOperation,
        target,
        require_idle_queue: bool = False,
    ) -> ImageMoveBackgroundStatus:
        with self._future_lock:
            self._refresh_finished_future_locked()
            if self._future_operation is not None or (self._future is not None and not self._future.done()):
                raise ImageMoveJobAlreadyRunning("An image move job is already running")
            active_job_id = self._get_active_job_id()
            if operation != "recovery" and active_job_id is not None:
                raise ImageMoveJobAlreadyRunning("An image move job is already active")
            self._last_background_error = None
            self._future_operation = operation

        try:

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Wait for the queue to drain: poll get_queue_status until pending==0 and in_progress==0, then retry
  2. Cancel or clear pending queue items before starting the move
  3. Start the image move when the server is idle (e.g. before user sessions begin)

Example fix

// before
service.start_background_move_all(target, require_idle_queue=True)  # raises while queue busy
// after
status = invoker.services.session_queue.get_queue_status(DEFAULT_QUEUE_ID)
if status.pending == 0 and status.in_progress == 0:
    service.start_background_move_all(target, require_idle_queue=True)
Defensive patterns

Strategy: retry

Validate before calling

def queue_is_idle(session_queue, queue_id=DEFAULT_QUEUE_ID) -> bool:
    s = session_queue.get_queue_status(queue_id)
    return s.pending == 0 and s.in_progress == 0
assert queue_is_idle(invoker.services.session_queue)

Try / catch

from invokeai.app.services.image_moves.image_moves_common import ImageMoveQueueActive
for attempt in range(20):
    try:
        service.start_background_move_all(target, require_idle_queue=True)
        break
    except ImageMoveQueueActive:
        time.sleep(30)  # wait for queue to drain

Prevention

When it happens

Trigger: Calling start_background_move_all with require_idle_queue=True (or recovery flows) while queue_status.pending or in_progress > 0 for the default queue.

Common situations: Trying to move/consolidate images while a generation batch is running; scheduling maintenance during active processing; server still finishing queued jobs after startup.

Related errors


AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29). Data as JSON: /api/errors/a666c53fdcb7c18b. Report an issue: GitHub.