{"record":{"id":"58af05761dcedb53","repo":"invoke-ai/InvokeAI","slug":"queue-user-is-not-authorized-to-save-videos","errorCode":null,"errorMessage":"Queue user is not authorized to save videos","messagePattern":"Queue user is not authorized to save videos","errorType":"exception","errorClass":"PermissionError","httpStatus":null,"severity":"error","filePath":"invokeai/app/services/shared/invocation_context.py","lineNumber":404,"sourceCode":"        self._util.signal_progress(\"Saving video\")\n\n        metadata_ = None\n        if metadata:\n            metadata_ = metadata.model_dump_json()\n        elif isinstance(self._data.invocation, WithMetadata) and self._data.invocation.metadata:\n            metadata_ = self._data.invocation.metadata.model_dump_json()\n\n        board_id_ = None\n        if board_id:\n            board_id_ = board_id\n        elif isinstance(self._data.invocation, WithBoard) and self._data.invocation.board:\n            board_id_ = self._data.invocation.board.board_id\n\n        if self._services.configuration.multiuser:\n            user = self._services.users.get(self._data.queue_item.user_id)\n            # See ImagesInterface.save: deactivated accounts must not save outputs.\n            if user is None or not user.is_active:\n                raise PermissionError(\"Queue user is not authorized to save videos\")\n            if board_id_ is not None:\n                board = self._services.boards.get_dto(board_id_)\n                if (\n                    not user.is_admin\n                    and board.user_id != self._data.queue_item.user_id\n                    and board.board_visibility != BoardVisibility.Public\n                ):\n                    raise PermissionError(\"Queue user is not authorized to save videos to this board\")\n\n        workflow_ = None\n        if self._data.queue_item.workflow:\n            workflow_ = self._data.queue_item.workflow.model_dump_json()\n\n        graph_ = None\n        if self._data.queue_item.session.graph:\n            graph_ = self._data.queue_item.session.graph.model_dump_json()\n\n        return self._services.videos.create(","sourceCodeStart":386,"sourceCodeEnd":422,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/app/services/shared/invocation_context.py#L386-L422","documentation":"VideosInterface.save throws PermissionError in multiuser mode when the queue item's user is missing or deactivated. Just like images, video outputs cannot be persisted by accounts that no longer hold queue-time privileges.","triggerScenarios":"An invocation calls videos.save(source_path, width, height, board_id...) while configuration.multiuser is true and users.get(queue_item.user_id) is None or is_active=False.","commonSituations":"Video generations are long; an admin deactivates the submitting user mid-render and the final save step fails; batch jobs spanning account cleanup.","solutions":["Reactivate the account before the video job finishes","Cancel the user's queued items prior to deactivation","Run the job under an active user account","Catch PermissionError around videos.save and skip/defer saving"],"exampleFix":"# before\ncontext.videos.save(path, w, h)  # raises if user deactivated\n# after\ntry:\n    context.videos.save(path, w, h)\nexcept PermissionError:\n    logger.warning(\"output discarded: queue user deactivated\")","handlingStrategy":"try-catch","validationCode":"cfg = services.configuration\nuser = services.users.get(queue_item.user_id)\nif cfg.multiuser and (user is None or not user.is_active):\n    raise SkipSave(\"cannot save video: queue user deactivated\")","typeGuard":"def can_save_video(services, queue_item) -> bool:\n    if not services.configuration.multiuser:\n        return True\n    user = services.users.get(queue_item.user_id)\n    return user is not None and user.is_active","tryCatchPattern":"try:\n    context.videos.save(path, width, height, board_id=board_id)\nexcept PermissionError:\n    logger.warning(\"video save rejected: user lacks privileges\")","preventionTips":["Finish or cancel video jobs before deactivating accounts","Handle PermissionError around videos.save in custom nodes","Verify board write rights before passing board_id","Test node save logic with multiuser enabled"],"tags":["permissions","multiuser","invokeai","video-save"],"backgroundTag":"permission-denied","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}