diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
index 7d5656476..3440a67e5 100644
--- a/docs/CONTRIBUTING.md
+++ b/docs/CONTRIBUTING.md
@@ -53,7 +53,7 @@ Github has made it easy to separate issues from discussions. Generally speaking,
    * Optionally assign a reviewer on the right of the screen - otherwise a member of the SLEAP developer team will self-assign themselves.
 8) If the reviewer requests changes, repeat steps 3-5 and `Re-request review`.
 9) Once the reviewer signs off they will squash + merge the PR into the `develop` branch.
-   * New feautures will be available on the `main` branch when a new release of SLEAP is released.
+   * New features will be available on the `main` branch when a new release of SLEAP is released.
 
 ## Style Guides
 
diff --git a/docs/guides/cli.md b/docs/guides/cli.md
index cd65a316d..d3a4d5d07 100644
--- a/docs/guides/cli.md
+++ b/docs/guides/cli.md
@@ -100,7 +100,7 @@ optional arguments:
                         Path to output directory where the frozen model will be exported to.
                         Defaults to a folder named 'exported_model'.
   -r, --ragged RAGGED
-                        Keep tensors ragged if present. If ommited, convert
+                        Keep tensors ragged if present. If omitted, convert
                         ragged tensors into regular tensors with NaN padding.
   -n, --max_instances MAX_INSTANCES
                         Limit maximum number of instances in multi-instance models.
diff --git a/docs/guides/gui.md b/docs/guides/gui.md
index 88cf3f656..9199f1bd1 100644
--- a/docs/guides/gui.md
+++ b/docs/guides/gui.md
@@ -98,7 +98,7 @@ Note that many of the menu command have keyboard shortcuts which can be configur
 
 "**Evaluate Metrics for Trained Models...**" provides you with information to evaluate all of your trained models. For example, you can see the recall and precision of predictions on frames with ground truth validation data (i.e., data withheld when training).
 
-"**Visualize Model Outputs...**" allows you to select a trained model and see the intermediate inference data plotted on the frame image. In particular, looking at the confidence maps used to predict each node can be helpful for understanding why and where your model isn't preforming well.
+"**Visualize Model Outputs...**" allows you to select a trained model and see the intermediate inference data plotted on the frame image. In particular, looking at the confidence maps used to predict each node can be helpful for understanding why and where your model isn't performing well.
 
 "**Add Instances from All Predictions on Current Frame**" converts ever predicted instance on the current frame into a user editable instance (which allows you to make corrections and/or use it for training).
 
diff --git a/docs/installation.md b/docs/installation.md
index eea65cc31..60d46f940 100644
--- a/docs/installation.md
+++ b/docs/installation.md
@@ -241,7 +241,7 @@ Although you do not need Mambaforge installed to perform a `pip install`, we rec
    The pypi distributed package of SLEAP ships with the following extras:
    - **pypi**: For installation without an mamba environment file. All dependencies come from PyPI.
    - **jupyter**: This installs all *pypi* and jupyter lab dependencies.
-   - **dev**: This installs all *jupyter* dependencies and developement tools for testing and building docs.
+   - **dev**: This installs all *jupyter* dependencies and development tools for testing and building docs.
    - **conda_jupyter**: For installation using a mamba environment file included in the source code. Most dependencies are listed as conda packages in the environment file and only a few come from PyPI to allow jupyter lab support.
    - **conda_dev**: For installation using [a mamba environment](https://github.com/search?q=repo%3Atalmolab%2Fsleap+path%3Aenvironment*.yml&type=code) with a few PyPI dependencies for development tools.
    ```
@@ -315,11 +315,11 @@ python -c "import sleap; sleap.system_summary()"
     GPUs: 2/2 available
       Device: /physical_device:GPU:0
              Available: True
-            Initalized: False
+            Initialized: False
          Memory growth: None
       Device: /physical_device:GPU:1
              Available: True
-            Initalized: False
+            Initialized: False
          Memory growth: None
 
 SLEAP uses TensorFlow for GPU acceleration. To directly check if TensorFlow is detecting your GPUs:
diff --git a/docs/notebooks/Interactive_and_realtime_inference.ipynb b/docs/notebooks/Interactive_and_realtime_inference.ipynb
index 4a3b612a2..2018ff393 100644
--- a/docs/notebooks/Interactive_and_realtime_inference.ipynb
+++ b/docs/notebooks/Interactive_and_realtime_inference.ipynb
@@ -99,7 +99,7 @@
             "GPUs: 1/1 available\n",
             "  Device: /physical_device:GPU:0\n",
             "         Available: True\n",
-            "        Initalized: False\n",
+            "        Initialized: False\n",
             "     Memory growth: True\n"
           ]
         },
diff --git a/docs/notebooks/Interactive_and_resumable_training.ipynb b/docs/notebooks/Interactive_and_resumable_training.ipynb
index f30f036f3..11ed3c2e8 100644
--- a/docs/notebooks/Interactive_and_resumable_training.ipynb
+++ b/docs/notebooks/Interactive_and_resumable_training.ipynb
@@ -101,7 +101,7 @@
             "GPUs: 1/1 available\n",
             "  Device: /physical_device:GPU:0\n",
             "         Available: True\n",
-            "        Initalized: False\n",
+            "        Initialized: False\n",
             "     Memory growth: None\n"
           ]
         }
@@ -207,7 +207,7 @@
         "cfg.data.labels.training_labels = TRAINING_SLP_FILE\n",
         "cfg.data.labels.validation_fraction = 0.1\n",
         "\n",
-        "# Preprocesssing and training parameters.\n",
+        "# Preprocessing and training parameters.\n",
         "cfg.data.instance_cropping.center_on_part = \"thorax\"\n",
         "cfg.optimization.augmentation_config.rotate = True\n",
         "cfg.optimization.epochs = 10  # This is the maximum number of training rounds.\n",
diff --git a/docs/notebooks/Training_and_inference_on_an_example_dataset.ipynb b/docs/notebooks/Training_and_inference_on_an_example_dataset.ipynb
index b0211bbca..519fee208 100644
--- a/docs/notebooks/Training_and_inference_on_an_example_dataset.ipynb
+++ b/docs/notebooks/Training_and_inference_on_an_example_dataset.ipynb
@@ -376,7 +376,7 @@
       "GPUs: 1/1 available\n",
       "  Device: /physical_device:GPU:0\n",
       "         Available: True\n",
-      "        Initalized: False\n",
+      "        Initialized: False\n",
       "     Memory growth: True\n",
       "INFO:sleap.nn.training:\n",
       "INFO:sleap.nn.training:Initializing trainer...\n",
@@ -768,7 +768,7 @@
       "GPUs: 1/1 available\n",
       "  Device: /physical_device:GPU:0\n",
       "         Available: True\n",
-      "        Initalized: False\n",
+      "        Initialized: False\n",
       "     Memory growth: True\n",
       "INFO:sleap.nn.training:\n",
       "INFO:sleap.nn.training:Initializing trainer...\n",
@@ -1052,7 +1052,7 @@
       "GPUs: 1/1 available\n",
       "  Device: /physical_device:GPU:0\n",
       "         Available: True\n",
-      "        Initalized: False\n",
+      "        Initialized: False\n",
       "     Memory growth: True\n",
       "\n",
       "Video: dataset/drosophila-melanogaster-courtship/20190128_113421.mp4\n",
diff --git a/pypi_requirements.txt b/pypi_requirements.txt
index 33f419c9c..c6875a682 100644
--- a/pypi_requirements.txt
+++ b/pypi_requirements.txt
@@ -3,7 +3,7 @@
 # setup.py, the packages in requirements.txt will also be installed when running 
 # pip install sleap[pypi].
 
-# These are also distrubuted through conda and not pip installed when using conda.
+# These are also distributed through conda and not pip installed when using conda.
 attrs>=21.2.0,<=21.4.0
 cattrs==1.1.1
 # certifi>=2017.4.17,<=2021.10.8
diff --git a/sleap/config/training_editor_form.yaml b/sleap/config/training_editor_form.yaml
index eabfc3940..51105ccc0 100644
--- a/sleap/config/training_editor_form.yaml
+++ b/sleap/config/training_editor_form.yaml
@@ -616,7 +616,7 @@ augmentation:
   name: optimization.augmentation_config.gaussian_noise_stddev
   type: double
 - default: false
-  help: If True, gamma constrast adjustment will be applied to the image. This scales
+  help: If True, gamma contrast adjustment will be applied to the image. This scales
     all pixel values by `x ** gamma` where `x` is the pixel value in the [0, 1] range.
     Values in [0, 255] are first scaled to [0, 1]. See `imgaug.augmenters.contrast.GammaContrast`.
   label: Contrast
diff --git a/sleap/gui/app.py b/sleap/gui/app.py
index 41d696f0c..d6a5363b3 100644
--- a/sleap/gui/app.py
+++ b/sleap/gui/app.py
@@ -175,7 +175,7 @@ def __init__(
         self._initialize_gui()
 
         if reset:
-            print("Reseting GUI state and preferences...")
+            print("Resetting GUI state and preferences...")
             prefs.reset_to_default()
         elif len(prefs["window state"]) > 0:
             print("Restoring GUI state...")
@@ -1481,7 +1481,7 @@ def _show_learning_dialog(self, mode: str):
             return
 
         if self._child_windows.get(mode, None) is None:
-            # Re-use existing dialog widget.
+            # Reuse existing dialog widget.
             self._child_windows[mode] = LearningDialog(
                 mode,
                 self.state["filename"],
diff --git a/sleap/gui/commands.py b/sleap/gui/commands.py
index dd7553097..a5d213416 100644
--- a/sleap/gui/commands.py
+++ b/sleap/gui/commands.py
@@ -1074,7 +1074,7 @@ def _try_save(context, labels: Labels, filename: str):
 
         except Exception as e:
             message = (
-                f"An error occured when attempting to save:\n {e}\n\n"
+                f"An error occurred when attempting to save:\n {e}\n\n"
                 "Try saving your project with a different filename or in a different "
                 "format."
             )
@@ -2068,7 +2068,7 @@ def try_and_skip_if_error(func, *args, **kwargs):
                     etype=type(e), value=e, tb=e.__traceback__
                 )
                 logger.warning(
-                    f"Recieved the following error while replacing skeleton:\n"
+                    f"Received the following error while replacing skeleton:\n"
                     f"{''.join(tb_str)}"
                 )
 
diff --git a/sleap/gui/learning/dialog.py b/sleap/gui/learning/dialog.py
index d9f872fda..4981043be 100644
--- a/sleap/gui/learning/dialog.py
+++ b/sleap/gui/learning/dialog.py
@@ -459,7 +459,7 @@ def update_loaded_config(
                 editor GUI tab.
 
         Returns:
-            A `ScopedKeyDict` with the loaded config values overriden by the corresponding
+            A `ScopedKeyDict` with the loaded config values overridden by the corresponding
             ones from the `tab_cfg_key_val_dict`.
         """
         # Serialize training config
diff --git a/sleap/gui/learning/runners.py b/sleap/gui/learning/runners.py
index ca60c4127..2d0195ada 100644
--- a/sleap/gui/learning/runners.py
+++ b/sleap/gui/learning/runners.py
@@ -791,7 +791,7 @@ def waiting_item(**kwargs):
             if gui:
                 QtWidgets.QMessageBox(
                     text=(
-                        "An error occcured during inference. Your command line "
+                        "An error occurred during inference. Your command line "
                         "terminal may have more information about the error."
                     )
                 ).exec_()
diff --git a/sleap/gui/overlays/tracks.py b/sleap/gui/overlays/tracks.py
index 361585719..d370eef77 100644
--- a/sleap/gui/overlays/tracks.py
+++ b/sleap/gui/overlays/tracks.py
@@ -42,7 +42,7 @@ class TrackTrailOverlay(BaseOverlay):
     max_node_count: Optional[int] = None
 
     def __attrs_post_init__(self):
-        """Initialize the shade options attribute after initalizing the instance."""
+        """Initialize the shade options attribute after initializing the instance."""
 
         self.shade_options = self.get_shade_options()
 
diff --git a/sleap/gui/widgets/video.py b/sleap/gui/widgets/video.py
index 502ea388e..7e729a888 100644
--- a/sleap/gui/widgets/video.py
+++ b/sleap/gui/widgets/video.py
@@ -1172,11 +1172,11 @@ def wheelEvent(self, event):
                 pass
 
     def keyPressEvent(self, event):
-        """Custom event hander, disables default QGraphicsView behavior."""
+        """Custom event handler, disables default QGraphicsView behavior."""
         event.ignore()  # Kicks the event up to parent
 
     def keyReleaseEvent(self, event):
-        """Custom event hander, disables default QGraphicsView behavior."""
+        """Custom event handler, disables default QGraphicsView behavior."""
         event.ignore()  # Kicks the event up to parent
 
 
diff --git a/sleap/gui/widgets/views.py b/sleap/gui/widgets/views.py
index ec3477ed2..e50aeac71 100644
--- a/sleap/gui/widgets/views.py
+++ b/sleap/gui/widgets/views.py
@@ -93,7 +93,7 @@ def toggle_button_callback(self, checked: bool):
         for child in self.content_area.findChildren(QWidget):
             child.setVisible(checked)
 
-        # Collapse combo box (otherwise, visiblity opens combo)
+        # Collapse combo box (otherwise, visibility opens combo)
         if checked:
             combo = self.content_area.findChild(QComboBox)
             combo.hidePopup()
diff --git a/sleap/instance.py b/sleap/instance.py
index c14038552..f3150502e 100644
--- a/sleap/instance.py
+++ b/sleap/instance.py
@@ -12,7 +12,7 @@
 * `Instance` (`PredictedInstance`) can be associated with a `Track`
 
 * A `PointArray` (or `PredictedPointArray`) contains zero or more
-  `Point` objects (or `PredictedPoint` objectss), ideally as many as
+  `Point` objects (or `PredictedPoint` objects), ideally as many as
   there are in the associated :class:`Skeleton` although these can get
   out of sync if the skeleton is manipulated.
 """
@@ -91,7 +91,7 @@ def numpy() -> np.ndarray:
 
 
 # This turns PredictedPoint into an attrs class. Defines comparators for
-# us and generaly makes it behave better. Crazy that this works!
+# us and generally makes it behave better. Crazy that this works!
 Point = attr.s(these={name: attr.ib() for name in Point.dtype.names}, init=False)(Point)
 
 
@@ -157,7 +157,7 @@ def from_point(cls, point: Point, score: float = 0.0) -> "PredictedPoint":
 
 
 # This turns PredictedPoint into an attrs class. Defines comparators for
-# us and generaly makes it behave better. Crazy that this works!
+# us and generally makes it behave better. Crazy that this works!
 PredictedPoint = attr.s(
     these={name: attr.ib() for name in PredictedPoint.dtype.names}, init=False
 )(PredictedPoint)
@@ -212,7 +212,7 @@ def __array_finalize__(self, obj):
         """
         Override :method:`np.recarray.__array_finalize__()`.
 
-        Overide __array_finalize__ on recarray because it converting the
+        Override __array_finalize__ on recarray because it converting the
         dtype of any np.void subclass to np.record, we don't want this.
         """
         pass
@@ -1191,7 +1191,7 @@ def make_instance_cattr() -> cattr.Converter:
 
     #### UNSTRUCTURE HOOKS
 
-    # JSON dump cant handle NumPy bools so convert them. These are present
+    # JSON dump can't handle NumPy bools so convert them. These are present
     # in Point/PredictedPoint objects now since they are actually custom numpy dtypes.
     converter.register_unstructure_hook(np.bool_, bool)
 
diff --git a/sleap/io/dataset.py b/sleap/io/dataset.py
index 3d8ab0d21..a20f3e0c8 100644
--- a/sleap/io/dataset.py
+++ b/sleap/io/dataset.py
@@ -1883,7 +1883,7 @@ def to_dict(self, skip_labels: bool = False) -> Dict[str, Any]:
             skip_labels: If True, skip labels serialization and just do the metadata.
 
         Returns:
-            A dict containing the followings top level keys:
+            A dict containing the following top level keys:
             * version - The version of the dict/json serialization format.
             * skeletons - The skeletons associated with these underlying
               instances.
@@ -2621,7 +2621,7 @@ def video_callback(
             Args:
                 video_list: A list of serialized `Video` objects stored as nested
                     dictionaries.
-                new_paths: A list of paths where we'll autimatically try to find the
+                new_paths: A list of paths where we'll automatically try to find the
                     missing videos.
                 context: A dictionary containing a "changed_on_load" key with a boolean
                     value. Used externally to determine if any filenames were updated.
diff --git a/sleap/io/video.py b/sleap/io/video.py
index 39de1972f..b7366f7e4 100644
--- a/sleap/io/video.py
+++ b/sleap/io/video.py
@@ -657,7 +657,7 @@ def matches(self, other):
         Check if attributes match.
 
         Args:
-            other: The instance to comapare with.
+            other: The instance to compare with.
 
         Returns:
             True if attributes match, False otherwise
@@ -1537,7 +1537,7 @@ def make_specific_backend(backend_class, kwargs):
 
     @staticmethod
     def cattr():
-        """Return a cattr converter for serialiazing/deserializing Video objects.
+        """Return a cattr converter for serializing/deserializing Video objects.
 
         Returns:
             A cattr converter.
@@ -1605,7 +1605,7 @@ def fixup_path(
         elif os.path.exists(os.path.basename(path)):
             return os.path.basename(path)
 
-        # Special case: this is an ImgStore path! We cant use
+        # Special case: this is an ImgStore path! We can't use
         # basename because it will strip the directory name off
         elif path.endswith("metadata.yaml"):
 
diff --git a/sleap/nn/architectures/resnet.py b/sleap/nn/architectures/resnet.py
index bc6833ddb..dee2735b4 100644
--- a/sleap/nn/architectures/resnet.py
+++ b/sleap/nn/architectures/resnet.py
@@ -326,7 +326,7 @@ def backbone_fn(x: tf.Tensor, current_stride: int) -> tf.Tensor:
 def tile_channels(X: tf.Tensor) -> tf.Tensor:
     """Tile single channel to 3 channel tensor.
 
-    This functon is useful to replicate grayscale single-channel images into 3-channel
+    This function is useful to replicate grayscale single-channel images into 3-channel
     monochrome RGB images.
 
     Args:
diff --git a/sleap/nn/config/optimization.py b/sleap/nn/config/optimization.py
index cd43136b7..2eaecad50 100644
--- a/sleap/nn/config/optimization.py
+++ b/sleap/nn/config/optimization.py
@@ -33,7 +33,7 @@ class AugmentationConfig:
             See `imgaug.augmenters.arithmetic.AdditiveGaussianNoise`.
         gaussian_noise_mean: Mean of the distribution to sample from.
         gaussian_noise_stddev: Standard deviation of the distribution to sample from.
-        contrast: If True, gamma constrast adjustment will be applied to the image.
+        contrast: If True, gamma contrast adjustment will be applied to the image.
             This scales all pixel values by `x ** gamma` where `x` is the pixel value in
             the [0, 1] range. Values in [0, 255] are first scaled to [0, 1]. See
             `imgaug.augmenters.contrast.GammaContrast`.
diff --git a/sleap/nn/data/resizing.py b/sleap/nn/data/resizing.py
index a2fcbe5de..352c7e552 100644
--- a/sleap/nn/data/resizing.py
+++ b/sleap/nn/data/resizing.py
@@ -215,7 +215,7 @@ def transform_dataset(self, ds_input: tf.data.Dataset) -> tf.data.Dataset:
             A `tf.data.Dataset` with elements containing the same images and points with
             resizing applied.
 
-            The "scale" key of the example will be multipled by the `scale` attribute of
+            The "scale" key of the example will be multiplied by the `scale` attribute of
             this transformer.
 
             If the `keep_full_image` attribute is True, a key specified by
diff --git a/sleap/nn/inference.py b/sleap/nn/inference.py
index 0cabc91bb..ca96824b4 100644
--- a/sleap/nn/inference.py
+++ b/sleap/nn/inference.py
@@ -4976,7 +4976,7 @@ def _make_export_cli_parser() -> argparse.ArgumentParser:
         action="store_true",
         default=False,
         help=(
-            "Keep tensors ragged if present. If ommited, convert ragged tensors"
+            "Keep tensors ragged if present. If omitted, convert ragged tensors"
             " into regular tensors with NaN padding."
         ),
     )
diff --git a/sleap/nn/paf_grouping.py b/sleap/nn/paf_grouping.py
index 4091c026b..b51097ed2 100644
--- a/sleap/nn/paf_grouping.py
+++ b/sleap/nn/paf_grouping.py
@@ -333,7 +333,7 @@ def score_paf_lines(
 
     Args:
         paf_lines_sample: The PAF vectors evaluated at the lines formed between
-            candidate conncetions as a `tf.Tensor` of shape
+            candidate connections as a `tf.Tensor` of shape
             `(n_candidates, n_line_points, 2, 3)` dtype `tf.int32`. This can be
             generated by `get_paf_lines()`.
         peaks_sample: The detected peaks in a sample as a `tf.Tensor` of shape
diff --git a/sleap/nn/peak_finding.py b/sleap/nn/peak_finding.py
index 84dca00ae..d60edf346 100644
--- a/sleap/nn/peak_finding.py
+++ b/sleap/nn/peak_finding.py
@@ -249,7 +249,7 @@ def find_global_peaks_rough(
 def find_local_peaks_rough(
     cms: tf.Tensor, threshold: float = 0.2
 ) -> Tuple[tf.Tensor, tf.Tensor, tf.Tensor, tf.Tensor]:
-    """Find local maxima via non-maximum suppresion.
+    """Find local maxima via non-maximum suppression.
 
     Args:
         cms: Tensor of shape (samples, height, width, channels).
diff --git a/sleap/nn/tracking.py b/sleap/nn/tracking.py
index 9865b7db5..7a36d3434 100644
--- a/sleap/nn/tracking.py
+++ b/sleap/nn/tracking.py
@@ -1146,7 +1146,7 @@ def add_frame_instances(
         # Which frames are "good"? First, we'll see if the best track match
         # for each of the instances was distinct—i.e., no competition for
         # matching any track. Second, we'll make sure that there are enough
-        # "usuable" instances—i.e., instances with the nodes that we'll track
+        # "usable" instances—i.e., instances with the nodes that we'll track
         # using Kalman filters.
         elif frame_match.has_only_first_choice_matches:
 
@@ -1342,7 +1342,7 @@ def track(
                 # print(f"Kalman filters initialized (frame {t})")
 
                 # Clear the data used to init filters, so that if the filters
-                # stop tracking and we need to re-init, we won't re-use the
+                # stop tracking and we need to re-init, we won't reuse the
                 # tracked data from earlier frames.
                 self.init_done = True
                 self.last_init_t = t
diff --git a/sleap/nn/training.py b/sleap/nn/training.py
index 16f027175..c119f1207 100644
--- a/sleap/nn/training.py
+++ b/sleap/nn/training.py
@@ -404,7 +404,7 @@ def setup_zmq_callbacks(zmq_config: ZMQConfig) -> List[tf.keras.callbacks.Callba
                 poll_timeout=zmq_config.controller_polling_timeout,
             )
         )
-        logger.info(f"  ZMQ controller subcribed to: {zmq_config.controller_address}")
+        logger.info(f"  ZMQ controller subscribed to: {zmq_config.controller_address}")
     if zmq_config.publish_updates:
         callbacks.append(ProgressReporterZMQ(address=zmq_config.publish_address))
         logger.info(f"  ZMQ progress reporter publish on: {zmq_config.publish_address}")
@@ -745,7 +745,7 @@ def _setup_model(self):
 
         # Resuming training if flagged
         if self.config.model.base_checkpoint is not None:
-            # TODO (AL): Add flexibilty to resume from any checkpoint (e.g.
+            # TODO (AL): Add flexibility to resume from any checkpoint (e.g.
             # latest_model, specific epoch, etc.)
 
             # Grab the 'best_model.h5' file from the previous training run
diff --git a/sleap/rangelist.py b/sleap/rangelist.py
index 2a2a040ee..a365c2717 100644
--- a/sleap/rangelist.py
+++ b/sleap/rangelist.py
@@ -80,7 +80,7 @@ def cut(self, cut: int):
         return self.cut_(self.list, cut)
 
     def cut_range(self, cut: tuple):
-        """Return three lists, everthing before/within/after cut range."""
+        """Return three lists, everything before/within/after cut range."""
         if not self.list:
             return [], [], []
         cut = self._as_tuple(cut)
diff --git a/sleap/skeleton.py b/sleap/skeleton.py
index eca393b8e..3f0813698 100644
--- a/sleap/skeleton.py
+++ b/sleap/skeleton.py
@@ -1013,7 +1013,7 @@ def to_json(self, node_to_idx: Optional[Dict[Node, int]] = None) -> str:
         # SLEAP v1.3.0 added `description` and `preview_image` to `Skeleton`, but saving
         # these fields breaks data format compatibility. Currently, these are only
         # added in our custom template skeletons. To ensure backwards data format
-        # compatibilty of user data, we only save these fields if they are not None.
+        # compatibility of user data, we only save these fields if they are not None.
         if self.is_template:
             data = {
                 "nx_graph": graph,
diff --git a/tests/gui/learning/test_dialog.py b/tests/gui/learning/test_dialog.py
index 3d77c891f..f05803c09 100644
--- a/tests/gui/learning/test_dialog.py
+++ b/tests/gui/learning/test_dialog.py
@@ -342,7 +342,7 @@ def assert_form_state(
         elif action in actions_that_allow_change_everything_except_model:
             ted.set_fields_from_key_val_dict(copy_form_data_except_model)
 
-    # Test the case where the user selectes untrained model
+    # Test the case where the user selects untrained model
     ted._cfg_list_widget.setCurrentIndex(1)
     assert not ted.has_trained_config_selected
     assert not ted._resume_training.isChecked()
diff --git a/tests/gui/test_commands.py b/tests/gui/test_commands.py
index 899b1f4a0..7f53a03e2 100644
--- a/tests/gui/test_commands.py
+++ b/tests/gui/test_commands.py
@@ -853,7 +853,7 @@ def assert_loaded_package_similar(path_to_pkg: Path, sugg=False, pred=False):
         """Assert that the loaded labels are similar to the original."""
 
         # Load the labels, but first copy file to a location (which pytest can and will
-        # keep in memory, but won't affect our re-use of the original file name)
+        # keep in memory, but won't affect our reuse of the original file name)
         filename_for_pytest_to_hoard: Path = path_to_pkg.with_name(
             f"pytest_labels_{time.perf_counter_ns()}{export_extension}"
         )
diff --git a/tests/info/test_h5.py b/tests/info/test_h5.py
index fd92c93f0..31309e6ed 100644
--- a/tests/info/test_h5.py
+++ b/tests/info/test_h5.py
@@ -166,7 +166,7 @@ def assert_instance_points(points, inst: Instance, track_idx: int, frame_idx: in
     )
     centered_pair_predictions.add_instance(lf, user_instance)
 
-    # Add another predicted instance (same track) incase ordering matters
+    # Add another predicted instance (same track) in case ordering matters
     centered_pair_predictions.add_instance(lf, lf.predicted_instances[0])
 
     # Ensure user-instance is used in occupancy matrix instead of predicted-instance
diff --git a/tests/nn/test_inference.py b/tests/nn/test_inference.py
index dedf0d324..7ba423169 100644
--- a/tests/nn/test_inference.py
+++ b/tests/nn/test_inference.py
@@ -1247,8 +1247,8 @@ def test_single_instance_predictor_save(min_single_instance_robot_model_path, tm
 
 
 def test_make_export_cli():
-    models_path = r"psuedo/models/path"
-    export_path = r"psuedo/test/path"
+    models_path = r"pseudo/models/path"
+    export_path = r"pseudo/test/path"
     max_instances = 5
 
     parser = _make_export_cli_parser()
diff --git a/tests/test_message.py b/tests/test_message.py
index c4b79ee6c..d7714f215 100644
--- a/tests/test_message.py
+++ b/tests/test_message.py
@@ -25,7 +25,7 @@ def run_receive():
 
     success = receiver.receive_handshake()
 
-    # Make sure handshake was succesful
+    # Make sure handshake was successful
     assert success
 
     messages = []