{"record":{"id":"7b16157c4a80df38","repo":"bevyengine/bevy","slug":"the-asset-has-already-been-extracted","errorCode":null,"errorMessage":"The asset has already been extracted","messagePattern":"The asset has already been extracted","errorType":"exception","errorClass":"AssetExtractionError","httpStatus":null,"severity":"error","filePath":"crates/bevy_render/src/render_asset.rs","lineNumber":34,"sourceCode":"use core::sync::atomic::{AtomicUsize, Ordering};\nuse thiserror::Error;\n\n#[derive(Debug, Error)]\npub enum PrepareAssetError<E: Send + Sync + 'static> {\n    #[error(\"Failed to prepare asset\")]\n    RetryNextUpdate(E),\n    #[error(\"Failed to build bind group: {0}\")]\n    AsBindGroupError(AsBindGroupError),\n}\n\n/// The system set during which we extract modified assets to the render world.\n#[derive(SystemSet, Clone, PartialEq, Eq, Debug, Hash)]\npub struct AssetExtractionSystems;\n\n/// Error returned when an asset due for extraction has already been extracted\n#[derive(Debug, Error)]\npub enum AssetExtractionError {\n    #[error(\"The asset has already been extracted\")]\n    AlreadyExtracted,\n    #[error(\"The asset type does not support extraction. To clone the asset to the renderworld, use `RenderAssetUsages::default()`\")]\n    NoExtractionImplementation,\n}\n\n/// Describes how an asset gets extracted and prepared for rendering.\n///\n/// In the [`ExtractSchedule`] step the [`RenderAsset::SourceAsset`] is transferred\n/// from the \"main world\" into the \"render world\".\n///\n/// After that in the [`RenderSystems::PrepareAssets`] step the extracted asset\n/// is transformed into its GPU-representation of type [`RenderAsset`].\npub trait RenderAsset: Send + Sync + 'static + Sized {\n    /// The representation of the asset in the \"main world\".\n    type SourceAsset: Asset + Clone;\n\n    /// Specifies all ECS data required by [`RenderAsset::prepare_asset`].\n    ///","sourceCodeStart":16,"sourceCodeEnd":52,"githubUrl":"https://github.com/bevyengine/bevy/blob/396ca727080776bd313bb892423b7d94e03b81b4/crates/bevy_render/src/render_asset.rs#L16-L52","documentation":"AssetExtraExtractionError: an asset due for extraction to the render world had already been extracted in this frame — its extra data was claimed twice. Indicates duplicate extraction of the same asset (e.g. an asset processed by two extraction passes); each asset must be extracted once.","triggerScenarios":"Thrown at crates/bevy_render/src/render_asset.rs:34 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Avoid queuing the same asset for extraction twice","Ignore the error — the asset is already present in the render world"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"396ca727080776bd313bb892423b7d94e03b81b4","analyzedAt":"2026-08-20T16:12:39.808Z","contentChangedAt":"2026-08-20T16:12:39.808Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}