diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py
index 1815ed904e6d79b3f50e5ed0e25007f22dd4e60a..5c620c8798ef108f106accef0c6e7988a76807f7 100755
--- a/io_scene_gltf2/__init__.py
+++ b/io_scene_gltf2/__init__.py
@@ -15,7 +15,7 @@
 bl_info = {
     'name': 'glTF 2.0 format',
     'author': 'Julien Duroure, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin SchmithĂĽsen, Jim Eckerlein, and many external contributors',
-    "version": (1, 3, 11),
+    "version": (1, 3, 12),
     'blender': (2, 90, 0),
     'location': 'File > Import-Export',
     'description': 'Import-Export as glTF 2.0',
diff --git a/io_scene_gltf2/blender/com/gltf2_blender_conversion.py b/io_scene_gltf2/blender/com/gltf2_blender_conversion.py
index 574e26e594d85e75c6aa8b019f3e03091fddccdf..c8d2dc8f7b6889c0a8d7028115f371a1a3efbc52 100755
--- a/io_scene_gltf2/blender/com/gltf2_blender_conversion.py
+++ b/io_scene_gltf2/blender/com/gltf2_blender_conversion.py
@@ -12,8 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from mathutils import Matrix, Quaternion
-from math import sqrt, sin, cos
+from math import sin, cos
 
 def texture_transform_blender_to_gltf(mapping_transform):
     """
diff --git a/io_scene_gltf2/blender/com/gltf2_blender_extras.py b/io_scene_gltf2/blender/com/gltf2_blender_extras.py
index 6cf220e61e02c9ec2f291f1f6394feae47701886..6474e3f0b6187682f67d4afe4f61f5fd468ece5d 100644
--- a/io_scene_gltf2/blender/com/gltf2_blender_extras.py
+++ b/io_scene_gltf2/blender/com/gltf2_blender_extras.py
@@ -89,5 +89,5 @@ def set_extras(blender_element, extras, exclude=[]):
 
         try:
             blender_element[custom_property] = value
-        except TypeError as e:
+        except TypeError:
             print('Error setting property %s to value of type %s' % (custom_property, type(value)))
diff --git a/io_scene_gltf2/blender/com/gltf2_blender_math.py b/io_scene_gltf2/blender/com/gltf2_blender_math.py
index b3f13f653418a5cafa9b4d5b12ad929f39efa8cb..72eb124ad91dc170b7a4310da22a0bf8252fdaae 100755
--- a/io_scene_gltf2/blender/com/gltf2_blender_math.py
+++ b/io_scene_gltf2/blender/com/gltf2_blender_math.py
@@ -12,7 +12,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import bpy
 import typing
 import math
 from mathutils import Matrix, Vector, Quaternion, Euler
@@ -171,6 +170,7 @@ def round_if_near(value: float, target: float) -> float:
     """If value is very close to target, round to target."""
     return value if abs(value - target) > 2.0e-6 else target
 
+
 def scale_rot_swap_matrix(rot):
     """Returns a matrix m st. Scale[s] Rot[rot] = Rot[rot] Scale[m s].
     If rot.to_matrix() is a signed permutation matrix, works for any s.
@@ -183,6 +183,7 @@ def scale_rot_swap_matrix(rot):
             m[i][j] = abs(m[i][j])  # discard sign
     return m
 
+
 def nearby_signed_perm_matrix(rot):
     """Returns a signed permutation matrix close to rot.to_matrix().
     (A signed permutation matrix is like a permutation matrix, except
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_extract.py b/io_scene_gltf2/blender/exp/gltf2_blender_extract.py
index e546b0631dee7c1ba7f177c0d8fb9f44041520cf..35f31c50a4c70dda5a473a78c4500e9991382c1c 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_extract.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_extract.py
@@ -24,7 +24,6 @@ from . import gltf2_blender_export_keys
 from ...io.com.gltf2_io_debug import print_console
 from ...io.com.gltf2_io_color_management import color_srgb_to_scene_linear
 from io_scene_gltf2.blender.exp import gltf2_blender_gather_skins
-import bpy
 
 #
 # Globals
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_accessors.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_accessors.py
index 2fe992bc5657bbe83c07808e78d2c0ac116c6fbf..58cbe1588c3c18884ab5061dc74a23eebefbc984 100644
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_accessors.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_accessors.py
@@ -13,14 +13,10 @@
 # limitations under the License.
 
 
-import typing
-
-import bpy
 from io_scene_gltf2.blender.exp.gltf2_blender_gather_cache import cached
 from io_scene_gltf2.io.com import gltf2_io
 from io_scene_gltf2.io.com import gltf2_io_constants
 from io_scene_gltf2.io.exp import gltf2_io_binary_data
-from . import gltf2_blender_export_keys
 
 
 @cached
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_animation_sampler_keyframes.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_animation_sampler_keyframes.py
index 6fa5a11d2a8faa4a3ee3f3a9a509f39d5ffccd22..822aa6a19c25b7d00df281e52b0265f75a445dfc 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_animation_sampler_keyframes.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_animation_sampler_keyframes.py
@@ -19,7 +19,6 @@ import typing
 from io_scene_gltf2.blender.exp.gltf2_blender_gather_cache import cached, bonecache
 from io_scene_gltf2.blender.com import gltf2_blender_math
 from io_scene_gltf2.blender.exp import gltf2_blender_get
-from io_scene_gltf2.blender.exp import gltf2_blender_extract
 from io_scene_gltf2.blender.exp.gltf2_blender_gather_drivers import get_sk_drivers, get_sk_driver_values
 from . import gltf2_blender_export_keys
 from io_scene_gltf2.io.com import gltf2_io_debug
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_cameras.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_cameras.py
index c99263921a48a00873391ec8daa03c06fdd0c1af..585f0be36a42650b3f3c67d16787b3c7952b82df 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_cameras.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_cameras.py
@@ -12,7 +12,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from . import gltf2_blender_export_keys
 from io_scene_gltf2.blender.exp.gltf2_blender_gather_cache import cached
 from ..com.gltf2_blender_extras import generate_extras
 from io_scene_gltf2.io.com import gltf2_io
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_drivers.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_drivers.py
index b176ca45c391161f1f6b9fd57e6b9b02b504c3a8..c0bc2cc619de098cdfebf4ed5e000590169ccf0c 100644
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_drivers.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_drivers.py
@@ -13,8 +13,6 @@
 # limitations under the License.
 
 
-from io_scene_gltf2.blender.exp import gltf2_blender_gather_nodes
-from io_scene_gltf2.blender.com import gltf2_blender_conversion
 from io_scene_gltf2.blender.exp.gltf2_blender_gather_cache import skdriverdiscovercache, skdrivervalues
 from io_scene_gltf2.blender.com.gltf2_blender_data_path import get_target_object_path
 
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py
index bd801430a2abce98e32b158fb65c3516f18d1857..69ebcb662319c412f7f7e1986ae4a2ff4bde0e12 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py
@@ -11,12 +11,10 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-import re
 
 import bpy
 import typing
 import os
-import numpy as np
 
 from . import gltf2_blender_export_keys
 from io_scene_gltf2.io.com import gltf2_io
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_joints.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_joints.py
index f7eed77f3806d92e49ebea86031c472316a549ca..d5ecc8da6a4e798d5544153928e8343048b6e13b 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_joints.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_joints.py
@@ -17,7 +17,6 @@ import mathutils
 from . import gltf2_blender_export_keys
 from io_scene_gltf2.blender.exp.gltf2_blender_gather_cache import cached
 from io_scene_gltf2.io.com import gltf2_io
-from io_scene_gltf2.io.com import gltf2_io_debug
 from io_scene_gltf2.blender.exp import gltf2_blender_extract
 from io_scene_gltf2.blender.com import gltf2_blender_math
 from io_scene_gltf2.blender.exp import gltf2_blender_gather_skins
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_material_normal_texture_info_class.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_material_normal_texture_info_class.py
index b554717b2dd6611d6f470989ba0cbd44c0604de3..e0b9be214ddeb4c01754d756105a305eaa3a05b4 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_material_normal_texture_info_class.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_material_normal_texture_info_class.py
@@ -18,7 +18,6 @@ from io_scene_gltf2.blender.exp.gltf2_blender_gather_cache import cached
 from io_scene_gltf2.io.com import gltf2_io
 from io_scene_gltf2.blender.exp import gltf2_blender_gather_texture
 from io_scene_gltf2.blender.exp import gltf2_blender_search_node_tree
-from io_scene_gltf2.blender.exp import gltf2_blender_export_keys
 from io_scene_gltf2.blender.exp import gltf2_blender_get
 from io_scene_gltf2.io.com.gltf2_io_extensions import Extension
 from io_scene_gltf2.io.exp.gltf2_io_user_extensions import export_user_extensions
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_pbr_metallic_roughness.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_pbr_metallic_roughness.py
index e774bfefdb271f519532fb3108c37e9d54fae697..ebef6597e1ea83a8d0c9cd1fe6a058c287576d4e 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_pbr_metallic_roughness.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_pbr_metallic_roughness.py
@@ -13,7 +13,6 @@
 # limitations under the License.
 
 import bpy
-from mathutils import Color
 
 from io_scene_gltf2.io.com import gltf2_io
 from io_scene_gltf2.blender.exp import gltf2_blender_gather_texture_info, gltf2_blender_search_node_tree
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_pbrSpecularGlossiness.py b/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_pbrSpecularGlossiness.py
index 7669d986ca8f4bf2bd71191f1dae37e8aebb8254..ce5e1aed0c87372fbbd2051bc2417288898ffec7 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_pbrSpecularGlossiness.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_pbrSpecularGlossiness.py
@@ -12,7 +12,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import bpy
 from ...io.com.gltf2_io import TextureInfo
 from .gltf2_blender_pbrMetallicRoughness import \
     base_color, emission, normal, occlusion, make_output_nodes, make_settings_node
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_unlit.py b/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_unlit.py
index f1a8fefee539f471a4e44cf6a2407967b16aca8b..cd0a8568f78a5ab75ba7c286384f182b7ce5c405 100644
--- a/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_unlit.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_unlit.py
@@ -12,7 +12,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import bpy
 from .gltf2_blender_pbrMetallicRoughness import base_color, make_output_nodes
 
 
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_animation.py b/io_scene_gltf2/blender/imp/gltf2_blender_animation.py
index f01e5ee9f807afa92d3098a1abf8a190817ef39a..9358154238548bbb170cdeee52e83cf1b3eccce9 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_animation.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_animation.py
@@ -12,8 +12,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import bpy
-
 from .gltf2_blender_animation_node import BlenderNodeAnim
 from .gltf2_blender_animation_weight import BlenderWeightAnim
 from .gltf2_blender_animation_utils import simulate_stash, restore_animation_on_object
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_animation_weight.py b/io_scene_gltf2/blender/imp/gltf2_blender_animation_weight.py
index 5ce4532e787512c30ecfc05183721ef2b5ed6ae0..1bf67213c7760b24a7f105a09bec9c3d3812940b 100644
--- a/io_scene_gltf2/blender/imp/gltf2_blender_animation_weight.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_animation_weight.py
@@ -16,7 +16,7 @@ import json
 import bpy
 
 from ...io.imp.gltf2_io_binary import BinaryData
-from .gltf2_blender_animation_utils import simulate_stash, make_fcurve
+from .gltf2_blender_animation_utils import make_fcurve
 
 
 class BlenderWeightAnim():
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_gltf.py b/io_scene_gltf2/blender/imp/gltf2_blender_gltf.py
index e00e244984cebedcd1d6bd49a1102d753cbd2613..efa7f003b42e7c2b7e376f06b18b174909bbba1a 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_gltf.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_gltf.py
@@ -121,7 +121,7 @@ class BlenderGlTF():
 
         # Dispatch animation
         if gltf.data.animations:
-            for node_idx, node in enumerate(gltf.data.nodes):
+            for node in gltf.data.nodes:
                 node.animations = {}
 
             track_names = set()
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_mesh.py b/io_scene_gltf2/blender/imp/gltf2_blender_mesh.py
index adf052817e91a36c44fc95a037eeaf5a02235ac2..7914a41bd357d21fedea86eec109be7adebfdf40 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_mesh.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_mesh.py
@@ -14,12 +14,10 @@
 
 import bpy
 import bmesh
-from mathutils import Vector
 
 from ..com.gltf2_blender_extras import set_extras
 from .gltf2_blender_material import BlenderMaterial
 from .gltf2_blender_primitive import BlenderPrimitive
-from ...io.imp.gltf2_io_binary import BinaryData
 
 
 class BlenderMesh():
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_primitive.py b/io_scene_gltf2/blender/imp/gltf2_blender_primitive.py
index 956880550be8dfb3e5b4c1f56f3a586764b4bed3..d544778cacd30d43fe797a99bad12e31956fe52b 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_primitive.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_primitive.py
@@ -15,7 +15,6 @@
 import bpy
 from mathutils import Vector, Matrix
 
-from .gltf2_blender_material import BlenderMaterial
 from ...io.imp.gltf2_io_binary import BinaryData
 from ...io.com.gltf2_io_color_management import color_linear_to_srgb
 from ...io.com import gltf2_io_debug
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_scene.py b/io_scene_gltf2/blender/imp/gltf2_blender_scene.py
index 1bc3fe0bfa2a1eff0a3581f2bda45fc026893a71..6119eb950589d03fa385e9d407e19c0c7862082a 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_scene.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_scene.py
@@ -13,8 +13,7 @@
 # limitations under the License.
 
 import bpy
-from math import sqrt
-from mathutils import Quaternion
+
 from .gltf2_blender_node import BlenderNode
 from .gltf2_blender_animation import BlenderAnimation
 from .gltf2_blender_vnode import VNode, compute_vnodes
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_texture.py b/io_scene_gltf2/blender/imp/gltf2_blender_texture.py
index 58d101d015a149eee639dd9b24746775da02d902..9dc012a2b7b1c75408e98ed2bca86d1f6b638376 100644
--- a/io_scene_gltf2/blender/imp/gltf2_blender_texture.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_texture.py
@@ -13,10 +13,10 @@
 # limitations under the License.
 
 import bpy
+
 from .gltf2_blender_image import BlenderImage
 from ..com.gltf2_blender_conversion import texture_transform_gltf_to_blender
 from io_scene_gltf2.io.com.gltf2_io import Sampler
-from io_scene_gltf2.io.com.gltf2_io_debug import print_console
 from io_scene_gltf2.io.com.gltf2_io_constants import TextureFilter, TextureWrap
 
 def texture(
diff --git a/io_scene_gltf2/io/exp/gltf2_io_export.py b/io_scene_gltf2/io/exp/gltf2_io_export.py
index 07cf8820b83bc5f3b545e73bb0da96f39f92fa3a..54181206201c032d69dbf86b2328940a2740c9b2 100755
--- a/io_scene_gltf2/io/exp/gltf2_io_export.py
+++ b/io_scene_gltf2/io/exp/gltf2_io_export.py
@@ -103,16 +103,14 @@ def save_gltf(gltf, export_settings, encoder, glb_buffer):
         file.write(struct.pack("I", length_gltf))
         file.write('JSON'.encode())
         file.write(gltf_data)
-        for i in range(0, spaces_gltf):
-            file.write(' '.encode())
+        file.write(b' ' * spaces_gltf)
 
         # Chunk 1 (BIN)
         if length_bin > 0:
             file.write(struct.pack("I", length_bin))
             file.write('BIN\0'.encode())
             file.write(binary)
-            for i in range(0, zeros_bin):
-                file.write('\0'.encode())
+            file.write(b'\0' * zeros_bin)
 
         file.close()
 
diff --git a/io_scene_gltf2/io/imp/gltf2_io_binary.py b/io_scene_gltf2/io/imp/gltf2_io_binary.py
index 9057c17cb39559ca24b06682c3523bde998765df..7cfcbc40e7aa94b4840496123401314f63ee83b6 100755
--- a/io_scene_gltf2/io/imp/gltf2_io_binary.py
+++ b/io_scene_gltf2/io/imp/gltf2_io_binary.py
@@ -13,7 +13,6 @@
 # limitations under the License.
 
 import struct
-import base64
 
 from ..com.gltf2_io import Accessor
 
diff --git a/io_scene_gltf2/io/imp/gltf2_io_gltf.py b/io_scene_gltf2/io/imp/gltf2_io_gltf.py
index 88ba53565e97efed303d1b14c35aaad4e8dc7567..640e552a0f43ba32058c2afff6ad93e85ad8e5ac 100755
--- a/io_scene_gltf2/io/imp/gltf2_io_gltf.py
+++ b/io_scene_gltf2/io/imp/gltf2_io_gltf.py
@@ -18,7 +18,7 @@ import logging
 import json
 import struct
 import base64
-from os.path import dirname, join, isfile, basename
+from os.path import dirname, join, isfile
 from urllib.parse import unquote