diff --git a/.gdlintrc b/.gdlintrc
index d0a139df2..1818289c4 100644
--- a/.gdlintrc
+++ b/.gdlintrc
@@ -2,6 +2,5 @@ disable:
   - no-elif-return
   - no-else-return
   - max-returns
-  - private-method-call
   
 max-file-lines: 2000
diff --git a/.github/workflows/dev-desktop-builds.yml b/.github/workflows/dev-desktop-builds.yml
index 48cee7b7f..ee19177d2 100644
--- a/.github/workflows/dev-desktop-builds.yml
+++ b/.github/workflows/dev-desktop-builds.yml
@@ -15,7 +15,7 @@ concurrency:
   cancel-in-progress: true
 
 env:
-  GODOT_VERSION: 4.2.2
+  GODOT_VERSION: 4.3
   EXPORT_NAME: Pixelorama
 
 jobs:
@@ -23,18 +23,14 @@ jobs:
     name: Windows Export 🗔
     runs-on: ubuntu-latest
     container:
-      image: docker://barichello/godot-ci:4.2.2
+      image: docker://barichello/godot-ci:4.3
     steps:
       - name: Setup WINE and rcedit 🍷
         run: |
-          dpkg --add-architecture i386 && apt-get update && apt-get install -y wine-stable && apt-get install -y wine32
           chown root:root -R ~
-          wget https://github.com/electron/rcedit/releases/download/v1.1.1/rcedit-x64.exe
-          mkdir -v -p ~/.local/share/rcedit
-          mv rcedit-x64.exe ~/.local/share/rcedit
           godot --headless --quit
-          echo 'export/windows/wine = "/usr/bin/wine"' >> ~/.config/godot/editor_settings-4.tres
-          echo 'export/windows/rcedit = "/github/home/.local/share/rcedit/rcedit-x64.exe"' >> ~/.config/godot/editor_settings-4.tres
+          echo 'export/windows/wine = "/usr/bin/wine64-stable"' >> ~/.config/godot/editor_settings-4.3.tres
+          echo 'export/windows/rcedit = "/opt/rcedit.exe"' >> ~/.config/godot/editor_settings-4.3.tres
       - name: Checkout 🛎️
         uses: actions/checkout@v4
         with:
@@ -63,7 +59,7 @@ jobs:
     name: Linux Export 🐧
     runs-on: ubuntu-latest
     container:
-      image: docker://barichello/godot-ci:4.2.2
+      image: docker://barichello/godot-ci:4.3
     steps:
       - name: Checkout 🛎️
         uses: actions/checkout@v4
@@ -78,8 +74,8 @@ jobs:
         run: godot --headless -v --import
       - name: Linux Build 🔧
         run: |
-          godot --headless -v --export-release "Linux/X11 64-bit" ./build/${EXPORT_NAME}-Linux-64bit/$EXPORT_NAME.x86_64
-          godot --headless -v --export-release "Linux/X11 ARM64" ./build/${EXPORT_NAME}-Linux-ARM64/${EXPORT_NAME}.arm64
+          godot --headless -v --export-release "Linux 64-bit" ./build/${EXPORT_NAME}-Linux-64bit/$EXPORT_NAME.x86_64
+          godot --headless -v --export-release "Linux ARM64" ./build/${EXPORT_NAME}-Linux-ARM64/${EXPORT_NAME}.arm64
       - name: Give execute permission ☑️
         run: |
           chmod +x ./build/${EXPORT_NAME}-Linux-64bit/$EXPORT_NAME.x86_64
diff --git a/.github/workflows/dev-web.yml b/.github/workflows/dev-web.yml
index cf6624b32..dcbfb35b0 100644
--- a/.github/workflows/dev-web.yml
+++ b/.github/workflows/dev-web.yml
@@ -9,7 +9,7 @@ concurrency:
   cancel-in-progress: true
 
 env:
-  GODOT_VERSION: 4.2.2
+  GODOT_VERSION: 4.3
   EXPORT_NAME: Pixelorama
 
 jobs:
@@ -17,7 +17,7 @@ jobs:
     name: Web Export 🌐
     runs-on: ubuntu-latest
     container:
-      image: docker://barichello/godot-ci:4.2.2
+      image: docker://barichello/godot-ci:4.3
     steps:
       - name: Checkout 🛎️
         uses: actions/checkout@v4
@@ -35,14 +35,6 @@ jobs:
       - name: Install rsync 📚
         run: |
           apt-get update && apt-get install -y rsync
-      # Workaround for SharedArrayBuffer support on GitHub Pages
-      # See: https://github.com/godotengine/godot-docs/issues/7084
-      - name: Enable SharedArrayBuffer for GitHub Pages
-        run: |
-          cd ./build/web
-          apt-get install -y curl
-          curl -fsSL https://github.com/gzuidhof/coi-serviceworker/raw/master/coi-serviceworker.js > coi-serviceworker.js
-          sed -i 's#\(		<script src="index.js"></script>\)#		<script src="coi-serviceworker.js"></script>\n\1#g' index.html
       - name: Deploy 🚀
         uses: JamesIves/github-pages-deploy-action@v4
         with:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index ef953889c..88dc1ea45 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -5,9 +5,9 @@ on:
     branches: [ release ]
 
 env:
-  GODOT_VERSION: 4.2.2
+  GODOT_VERSION: 4.3
   EXPORT_NAME: Pixelorama
-  TAG: v1.0.1
+  TAG: v1.0.4
   BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }}
 
 jobs:
@@ -15,18 +15,14 @@ jobs:
     name: Windows Export 🗔
     runs-on: ubuntu-latest
     container:
-      image: docker://barichello/godot-ci:4.2.2
+      image: docker://barichello/godot-ci:4.3
     steps:
-      - name: Setup WINE, rcedit and NSIS 🍷
+      - name: Setup WINE and rcedit 🍷
         run: |
-          dpkg --add-architecture i386 && apt-get update && apt-get install -y wine-stable && apt-get install -y wine32 && apt-get install -y nsis
           chown root:root -R ~
-          wget https://github.com/electron/rcedit/releases/download/v1.1.1/rcedit-x64.exe
-          mkdir -v -p ~/.local/share/rcedit
-          mv rcedit-x64.exe ~/.local/share/rcedit
           godot --headless --quit
-          echo 'export/windows/wine = "/usr/bin/wine"' >> ~/.config/godot/editor_settings-4.tres
-          echo 'export/windows/rcedit = "/github/home/.local/share/rcedit/rcedit-x64.exe"' >> ~/.config/godot/editor_settings-4.tres
+          echo 'export/windows/wine = "/usr/bin/wine64-stable"' >> ~/.config/godot/editor_settings-4.3.tres
+          echo 'export/windows/rcedit = "/opt/rcedit.exe"' >> ~/.config/godot/editor_settings-4.3.tres
       - name: Checkout 🛎️
         uses: actions/checkout@v4
         with:
@@ -55,6 +51,7 @@ jobs:
           zip -r ${EXPORT_NAME}-Windows-32bit.zip ${EXPORT_NAME}-Windows-32bit
       - name: Build installer 🔧
         run: |
+          apt-get update && apt-get install -y python3 && apt-get install -y nsis
           python3 ./installer/utils/po2nsi.py -i ./installer/pixelorama.nsi -o ./installer/pixelorama_loc.nsi -p ./installer/po -l "English" -v
           makensis ./installer/pixelorama_loc.nsi
           mkdir ./build/installer
@@ -77,7 +74,7 @@ jobs:
     name: Linux Export 🐧
     runs-on: ubuntu-latest
     container:
-      image: docker://barichello/godot-ci:4.2.2
+      image: docker://barichello/godot-ci:4.3
     steps:
       - name: Checkout 🛎️
         uses: actions/checkout@v4
@@ -92,14 +89,14 @@ jobs:
         run: godot --headless -v --import
       - name: Linux Build 🔧
         run: |
-          godot --headless -v --export-release "Linux/X11 64-bit" ./build/${EXPORT_NAME}-Linux-64bit/${EXPORT_NAME}.x86_64
-          godot --headless -v --export-release "Linux/X11 32-bit" ./build/${EXPORT_NAME}-Linux-32bit/${EXPORT_NAME}.x86
-          godot --headless -v --export-release "Linux/X11 ARM64" ./build/${EXPORT_NAME}-Linux-ARM64/${EXPORT_NAME}.arm64
-          godot --headless -v --export-release "Linux/X11 ARM32" ./build/${EXPORT_NAME}-Linux-ARM32/${EXPORT_NAME}.arm32
+          godot --headless -v --export-release "Linux 64-bit" ./build/${EXPORT_NAME}-Linux-64bit/${EXPORT_NAME}.x86_64
+          godot --headless -v --export-release "Linux 32-bit" ./build/${EXPORT_NAME}-Linux-32bit/${EXPORT_NAME}.x86_32
+          godot --headless -v --export-release "Linux ARM64" ./build/${EXPORT_NAME}-Linux-ARM64/${EXPORT_NAME}.arm64
+          godot --headless -v --export-release "Linux ARM32" ./build/${EXPORT_NAME}-Linux-ARM32/${EXPORT_NAME}.arm32
       - name: Give execute permission ☑️
         run: |
           chmod +x ./build/${EXPORT_NAME}-Linux-64bit/${EXPORT_NAME}.x86_64
-          chmod +x ./build/${EXPORT_NAME}-Linux-32bit/${EXPORT_NAME}.x86
+          chmod +x ./build/${EXPORT_NAME}-Linux-32bit/${EXPORT_NAME}.x86_32
           chmod +x ./build/${EXPORT_NAME}-Linux-ARM64/${EXPORT_NAME}.arm64
           chmod +x ./build/${EXPORT_NAME}-Linux-ARM32/${EXPORT_NAME}.arm32
       - name: Copy pixelorama_data folder 📁
@@ -119,7 +116,7 @@ jobs:
       - name: Upload Release Assets to itch.io 🎮
         run: |
           butler push ./build/${{env.EXPORT_NAME}}-Linux-64bit.tar.gz ${{ secrets.ITCHIO_USERNAME }}/${{ secrets.ITCHIO_GAME }}:linux-x86_64 --userversion ${{env.TAG}}
-          butler push ./build/${{env.EXPORT_NAME}}-Linux-32bit.tar.gz ${{ secrets.ITCHIO_USERNAME }}/${{ secrets.ITCHIO_GAME }}:linux-x86 --userversion ${{env.TAG}}
+          butler push ./build/${{env.EXPORT_NAME}}-Linux-32bit.tar.gz ${{ secrets.ITCHIO_USERNAME }}/${{ secrets.ITCHIO_GAME }}:linux-x86_32 --userversion ${{env.TAG}}
           butler push ./build/${{env.EXPORT_NAME}}-Linux-ARM64.tar.gz ${{ secrets.ITCHIO_USERNAME }}/${{ secrets.ITCHIO_GAME }}:linux-arm64 --userversion ${{env.TAG}}
           butler push ./build/${{env.EXPORT_NAME}}-Linux-ARM32.tar.gz ${{ secrets.ITCHIO_USERNAME }}/${{ secrets.ITCHIO_GAME }}:linux-arm32 --userversion ${{env.TAG}}
       - name: Upload Release Asset 🚀
@@ -196,7 +193,7 @@ jobs:
     name: Web Export 🌐
     runs-on: ubuntu-latest
     container:
-      image: docker://barichello/godot-ci:4.2.2
+      image: docker://barichello/godot-ci:4.3
     steps:
       - name: Checkout 🛎️
         uses: actions/checkout@v4
@@ -217,14 +214,6 @@ jobs:
       - name: Upload Release Assets to itch.io 🎮
         run: |
           butler push ./build/web ${{ secrets.ITCHIO_USERNAME }}/${{ secrets.ITCHIO_GAME }}:web --userversion ${{env.TAG}}
-      # Workaround for SharedArrayBuffer support on GitHub Pages
-      # See: https://github.com/godotengine/godot-docs/issues/7084
-      - name: Enable SharedArrayBuffer for GitHub Pages
-        run: |
-          cd ./build/web
-          apt-get install -y curl
-          curl -fsSL https://github.com/gzuidhof/coi-serviceworker/raw/master/coi-serviceworker.js > coi-serviceworker.js
-          sed -i 's#\(		<script src="index.js"></script>\)#		<script src="coi-serviceworker.js"></script>\n\1#g' index.html
       - name: Deploy 🚀
         uses: JamesIves/github-pages-deploy-action@v4
         with:
diff --git a/.github/workflows/static-checks.yml b/.github/workflows/static-checks.yml
index 7bf2fb610..4f386ff2b 100644
--- a/.github/workflows/static-checks.yml
+++ b/.github/workflows/static-checks.yml
@@ -19,8 +19,7 @@ jobs:
     steps:
       - name: Checkout
         uses: actions/checkout@v4
-      - name: Install gdtoolkit
-        run: pip3 install "gdtoolkit==4.*"
+      - uses: Scony/godot-gdscript-toolkit@master
       - name: Formatting checks
         run: gdformat --diff .
       - name: Linting checks
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a5649c509..959aade0c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,15 +4,118 @@ All notable changes to this project will be documented in this file.
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). All the dates are in YYYY-MM-DD format.
 <br><br>
 
-## [v1.0.2] - Unreleased
+## [v1.0.5] - Unreleased
 This update has been brought to you by the contributions of:
-[kleonc](https://github.com/kleonc), [Hamster5295](https://github.com/Hamster5295)
+Fayez Akhtar ([@Variable-ind](https://github.com/Variable-ind))
 
-Built using Godot 4.2.2
+Built using Godot 4.3
 
 ### Added
+- Add density to the square & circle brushes. 100% density means that the brush gets completely drawn. Anything less leaves gaps inside the brush, acting like a spray tool.
+- Selection expanding, shrinking and borders have been added as options in the Select menu.
+- Mouse buttons can now be used as menu shortcuts. [#1070](https://github.com/Orama-Interactive/Pixelorama/issues/1070)
+- Added confirm and cancel buttons in the selection tool options to confirm/cancel an active transformation.
+- OKHSL Lightness sorting in palettes has been implemented. [#1126](https://github.com/Orama-Interactive/Pixelorama/pull/1126)
+
+### Changed
+- The brush size no longer changes by <kbd>Control</kbd> + Mouse Wheel when resizing the timeline cels or the palette swatches.
+- Improved the UI of the Tile Mode Offsets dialog and added an "Isometric" preset button.
+- The Recorder panel now automatically records for the current project. This also allows for multiple projects to be recorded at the same time.
+
+### Fixed
+- Opening the Tile Mode Offsets dialog no longer crashes the application.
+- Panels no longer get scrolled when using the mouse wheel over a slider.
+- Fixed layer effect slider values being rounded to the nearest integer.
+- Fixed memory leak where the project remained referenced by a drawing tool, even when its tab was closed.
+- Fixed memory leak where the first project remained forever references in memory by the Recorder panel.
+- Slightly optimize circle brushes by only calling the ellipse algorithms once while drawing
+
+### Removed
+- The Recorder panel has been removed from the Web version. It wasn't functional anyway in a way that was useful, and it's unsure if we can find a way to make it work.
+
+## [v1.0.4] - 2024-10-25
+This update has been brought to you by the contributions of:
+Fayez Akhtar ([@Variable-ind](https://github.com/Variable-ind)), Mariano Semelman ([@msemelman](https://github.com/msemelman))
+
+Built using Godot 4.3
+
+### Added
+- It is now possible to make panels into floating windows. This allows for any panel in the user interface to be its own window, and if single window mode is disabled, you can move these windows anywhere you want. This is especially useful for multi-monitor setups.
+- Added a new "color replace" mode to the Shading tool, that uses the colors of the palette to apply shading. [#1107](https://github.com/Orama-Interactive/Pixelorama/pull/1107)
+- Added a new Erase blend mode. [#1117](https://github.com/Orama-Interactive/Pixelorama/pull/1117)
+- It is now possible to change the font, depth and line spacing of 3D text.
+- Implemented the ability to change the font of the interface from the preferences.
+- Clipping to selection during export is now possible. [#1113](https://github.com/Orama-Interactive/Pixelorama/pull/1113)
+- Added a preference to share options between tools. [#1120](https://github.com/Orama-Interactive/Pixelorama/pull/1120)
+- Added an option to quickly center the canvas in the View menu. Mapped to <kbd>Shift + C</kbd> by default. [#1123](https://github.com/Orama-Interactive/Pixelorama/pull/1123)
+- Added hotkeys to switch between tabs. <kbd>Control+Tab</kbd> to go to the next project tab, and <kbd>Control+Shift+Tab</kbd> to go to the previous. [#1109](https://github.com/Orama-Interactive/Pixelorama/pull/1109)
+- Added menus next to each of the two mirroring buttons in the Global Tool Options, that allow users to automatically move the symmetry guides to the center of the canvas, or the view center.
+- A new Reset category has been added to the Preferences that lets users easily restore certain options.
+
+### Changed
+- Bumped extensions API version to 5.
+- The screen no longer remains on when idle, avoiding unnecessary power consumption. [#1125](https://github.com/Orama-Interactive/Pixelorama/pull/1125)
+- The export dialog's resize slider now allows for values greater than 1000.
+- Made some UI improvements to the rotate/flip image brush options. [#1105](https://github.com/Orama-Interactive/Pixelorama/pull/1105)
+- The bucket tool now picks colors from the top-most layer, like the rest of the drawing tools.
+
+### Fixed
+- The move tool preview is now properly aligned to the pixel grid.
+- Camera zoom is now being preserved when switching between projects.
+- Projects are no longer being saved with the wrong name in the Web version.
+- Fixed 3D Shape Edit tool option values not updating when switching between 3D objects.
+- Using the bucket tool while moving the cursor and also holding the color picker shortcut (Alt by default), now picks colors instead of actually using the tool.
+- Tool previews are now being properly cleared when switching to other tools before finishing the action being performed by the previous tool.
+- Fixed icons not being set to the correct color when launching Pixelorama with the dark theme.
+- Fixed some text in the About dialog not having the text color of the theme.
+- Fixed the backup confirmation dialog closing when clicking outside of it when single window mode is disabled.
+- The dynamics dialog is now set to its correct size when something is made visible or invisible. [#1104](https://github.com/Orama-Interactive/Pixelorama/pull/1104)
+- The color picker values no longer change when using RAW mode. [#1108](https://github.com/Orama-Interactive/Pixelorama/pull/1108)
+- Fixed some icon stretch and expand modes in the UI. [#1103](https://github.com/Orama-Interactive/Pixelorama/pull/1103)
+
+## [v1.0.3] - 2024-09-13
+This update has been brought to you by the contributions of:
+Fayez Akhtar ([@Variable-ind](https://github.com/Variable-ind)), [alikin12](https://github.com/alikin12), Vaibhav Kubre ([@kubre](https://github.com/kubre)), Donte ([@donte5405](https://github.com/donte5405))
+
+Built using Godot 4.3
+
+### Added
+- Added new global layer buttons that change visibility, lock or expand all layers on the first level. [#1085](https://github.com/Orama-Interactive/Pixelorama/pull/1085)
+- Added a new Gaussian blur image and layer effect.
+- A new Index Map layer effect has been added. [#1093](https://github.com/Orama-Interactive/Pixelorama/pull/1093)
+- Is it now possible to adjust the opacity of onion skinning. [#1091](https://github.com/Orama-Interactive/Pixelorama/pull/1091)
+- Added option to trim the empty area of the exported images. [#1088](https://github.com/Orama-Interactive/Pixelorama/pull/1088)
+- A quality slider has been added to the export dialog, when exporting jpg files.
+
+### Changed
+- The layer opacity and frame buttons are now fixed on top, always visible regardless of the vertical scroll position. [#1095](https://github.com/Orama-Interactive/Pixelorama/pull/1095)
+- The default blend mode of layer groups is now pass-through.
+- The color picker popup when editing gradients is now moveable.
+
+### Fixed
+- Fixed an issue where the '\n` escape character got inserted inside the palette name, causing the palette to fail to be saved.
+- The export dialog has been optimized by caching all of the blended frames. Changing export options, besides the layers, no longer cause slowness by re-blending all of the frames.
+- Optimized the lasso and polygon select tools, as well as the fill options of the pencil and curve tools. The time they take to complete now depends on the size of the selection, rather than checking all of the pixels of the entire canvas.
+- Fixed a crash when re-arranging palette swatches while holding <kbd>Shift</kbd>.
+- Fixed a crash when using the move tool snapped to the grid.
+- Fixed wrong preview in the gradient dialog when editing the gradient and dithering is enabled.
+- Fixed a visual bug with the preview of the resize canvas dialog.
+- Fixed wrong stretch mode in the cel button previews. [#1097](https://github.com/Orama-Interactive/Pixelorama/pull/1097)
+
+## [v1.0.2] - 2024-08-21
+This update has been brought to you by the contributions of:
+[kleonc](https://github.com/kleonc), [Hamster5295](https://github.com/Hamster5295), [alikin12](https://github.com/alikin12)
+
+Built using Godot 4.3
+
+### Added
+- Group layer blending is now supported. To prevent a layer group from blending, you can set its blend mode to "Pass through". [#1077](https://github.com/Orama-Interactive/Pixelorama/pull/1077)
+- Added <kbd>Control+Shift+Alt</kbd> as a shortcut that automatically selects a layer directly from the canvas when using tools.
 - Added tolerance to the bucket tool's "similar area" mode and to the magic wand tool.
 - It is now possible to move all selected cels between different frames, but they all have to be on the same layer.
+- Added a convolution matrix layer effect, still work in progress.
+- Native file dialogs now have a checkbox that lets you save blended images inside .pxo files.
+- It is now possible to change the maximum undo steps from the Preferences.
 - Cel properties of group and 3D cels can now be edited.
 
 ### Changed
@@ -20,17 +123,19 @@ Built using Godot 4.2.2
 - It is now possible to change the blend modes of multiple selected layers from the timeline's option button.
 
 ### Fixed
+- The Web version no longer requires SharedArrayBuffer, so compatibility with certain browsers should be better now.
 - Scaling with cleanEdge and OmniScale is now working again. [#1074](https://github.com/Orama-Interactive/Pixelorama/issues/1074)
 - Layer effects are now being applied when exporting single layers.
 - Exporting group layers now takes blending modes and layer effects into account.
 - Fixed crashes when attempting to export specific layers or tags that have been deleted.
 - Fixed crashes when importing brushes and palettes.
 - Fixed an issue with the bucket tool filling with the wrong color.
+- Fixed an issue when merging two layers, where if the bottom layer had layer/cel transparency, the transparency would be applied in the content destructively.
+- Fixed an issue where color sliders wouldn't be visible during startup, if the color options button was expanded.
 - Fixed bug where some buttons on the interface were not affected by the custom icon color on startup.
-- Fixed issue with the cursor blinking at the edge of the canvas on some devices. [#1075](https://github.com/Orama-Interactive/Pixelorama/pull/1075)
+- Fixed an issue when loading a project, selecting a project brush and then switching tools. [#1078](https://github.com/Orama-Interactive/Pixelorama/pull/1078)
 - Fixed wrong rendering of the isometric grid. [#1069](https://github.com/Orama-Interactive/Pixelorama/pull/1069)
 
-
 ## [v1.0.1] - 2024-08-05
 This update has been brought to you by the contributions of:
 Fayez Akhtar ([@Variable-ind](https://github.com/Variable-ind)), [Kiisu_Master](https://github.com/Kiisu-Master).
diff --git a/Misc/Linux/com.orama_interactive.Pixelorama.appdata.xml b/Misc/Linux/com.orama_interactive.Pixelorama.appdata.xml
index e2386d456..22a999f26 100644
--- a/Misc/Linux/com.orama_interactive.Pixelorama.appdata.xml
+++ b/Misc/Linux/com.orama_interactive.Pixelorama.appdata.xml
@@ -44,6 +44,9 @@
   </screenshots>
   <content_rating type="oars-1.1"/>
   <releases>
+	<release version="1.0.4" date="2024-10-25"/>
+	<release version="1.0.3" date="2024-09-13"/>
+	<release version="1.0.2" date="2024-08-21"/>
 	<release version="1.0.1" date="2024-08-05"/>
 	<release version="1.0" date="2024-07-29"/>
 	<release version="0.11.4" date="2024-04-17"/>
diff --git a/README.md b/README.md
index fbdc4e8f4..edaa49a45 100644
--- a/README.md
+++ b/README.md
@@ -6,34 +6,25 @@
 </p>
 <p align="center">
     <a href="https://github.com/Orama-Interactive/Pixelorama/actions">
-        <img src="https://github.com/Orama-Interactive/Pixelorama/workflows/dev-desktop-builds/badge.svg" alt="Build Passing" />
-    </a>
+        <img src="https://github.com/Orama-Interactive/Pixelorama/workflows/dev-desktop-builds/badge.svg" alt="Build Passing" /></a>
     <a href="https://orama-interactive.github.io/Pixelorama/early_access/">
-        <img src="https://github.com/Orama-Interactive/Pixelorama/workflows/dev-web/badge.svg" alt="Build Passing" />
-    </a>
+        <img src="https://github.com/Orama-Interactive/Pixelorama/workflows/dev-web/badge.svg" alt="Build Passing" /></a>
     <a href="https://github.com/Orama-Interactive/Pixelorama">
-        <img src="https://img.shields.io/github/languages/code-size/Orama-Interactive/Pixelorama.svg" alt="Code Size" />
-    </a>
+        <img src="https://img.shields.io/github/languages/code-size/Orama-Interactive/Pixelorama.svg" alt="Code Size" /></a>
     <a href="https://github.com/Orama-Interactive/Pixelorama">
-        <img src="https://img.shields.io/github/repo-size/Orama-Interactive/Pixelorama.svg" alt="Repository size" />
-    </a>
+        <img src="https://img.shields.io/github/repo-size/Orama-Interactive/Pixelorama.svg" alt="Repository size" /></a>
     <a href="https://github.com/Orama-Interactive/Pixelorama/blob/master/LICENSE">
-        <img src="https://img.shields.io/github/license/Orama-Interactive/Pixelorama.svg" alt="License" />
-    </a>
+        <img src="https://img.shields.io/github/license/Orama-Interactive/Pixelorama.svg" alt="License" /></a>
 </p>
 <p align="center">
     <a href="https://github.com/Orama-Interactive/Pixelorama/releases">
-        <img src="https://img.shields.io/github/downloads/Orama-Interactive/Pixelorama/total?color=lightgreen" alt="Downloads" />
-    </a>
+        <img src="https://img.shields.io/github/downloads/Orama-Interactive/Pixelorama/total?color=lightgreen" alt="Downloads" /></a>
     <a href="https://discord.gg/GTMtr8s">
-        <img src="https://discord.com/api/guilds/645793202393186339/embed.png" alt="Discord Chat" />
-    </a>
+        <img src="https://discord.com/api/guilds/645793202393186339/embed.png" alt="Discord Chat" /></a>
     <a href="https://crowdin.com/project/pixelorama">
-        <img src="https://badges.crowdin.net/pixelorama/localized.svg" alt="Crowdin Localized %" />
-    </a>
+        <img src="https://badges.crowdin.net/pixelorama/localized.svg" alt="Crowdin Localized %" /></a>
     <a href="https://github.com/godotengine/awesome-godot">
-        <img src="https://awesome.re/mentioned-badge.svg" alt="Mentioned in Awesome Godot" />
-    </a>
+        <img src="https://awesome.re/mentioned-badge.svg" alt="Mentioned in Awesome Godot" /></a>
 </p>
  
 [![Pixelorama's UI](https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2779170/ss_54395040c25b243cb82a3bd68778e19e04b43ade.1920x1080.jpg?t=1719424898)](https://youtu.be/--ZcztkvWUQ)
@@ -52,6 +43,7 @@ Stable versions:
 - [GitHub Pages (Web)](https://orama-interactive.github.io/Pixelorama/)
 - [Flathub (Linux)](https://flathub.org/apps/details/com.orama_interactive.Pixelorama)
 - [Snap Store (Linux)](https://snapcraft.io/pixelorama)
+- WinGet (Windows) - `winget install pixelorama`
 
 You can also find early access builds in the [GitHub Actions page](https://github.com/Orama-Interactive/Pixelorama/actions). There's also a [Web version available](https://orama-interactive.github.io/Pixelorama/early_access/).
 Keep in mind that these versions will have bugs and are unstable. Unless you're interested in testing the main branch of Pixelorama, it's recommended that you stick to a stable version.
@@ -62,7 +54,7 @@ You can find online Documentation for Pixelorama here: https://orama-interactive
 It's still work in progress so there are some pages missing. If you want to contribute, you can do so in [Pixelorama-Docs' GitHub Repository](https://github.com/Orama-Interactive/Pixelorama-Docs).
 
 ## Cloning Instructions
-Pixelorama uses Godot 4.2, so you will need to have it in order to run the project. Older versions will not work.
+Pixelorama uses Godot 4.3, so you will need to have it in order to run the project. Older versions will not work.
 As of right now, most of the code is written using GDScript, so the mono version of Godot is not required, but Pixelorama should also work with it.
 
 ## Features:
diff --git a/Translations/Translations.pot b/Translations/Translations.pot
index cf774aa5d..af06e12f9 100644
--- a/Translations/Translations.pot
+++ b/Translations/Translations.pot
@@ -205,6 +205,43 @@ msgstr ""
 msgid "Invert"
 msgstr ""
 
+msgid "Modify"
+msgstr ""
+
+#. Found under the Select menu, in the Modify submenu. When selected, it shows a window that lets users expand the active selection.
+msgid "Expand"
+msgstr ""
+
+#. Title of a window that lets users expand the active selection.
+msgid "Expand Selection"
+msgstr ""
+
+#. Found under the Select menu, in the Modify submenu. When selected, it shows a window that lets users shrink the active selection.
+msgid "Shrink"
+msgstr ""
+
+#. Title of a window that lets users shrink the active selection.
+msgid "Shrink Selection"
+msgstr ""
+
+#. Found under the Select menu, in the Modify submenu. When selected, it shows a window that lets users create a border of the active selection.
+msgid "Border"
+msgstr ""
+
+#. Title of a window that lets users create a border of the active selection.
+msgid "Border Selection"
+msgstr ""
+
+#. Refers to a diamond-like shape.
+msgid "Diamond"
+msgstr ""
+
+msgid "Circle"
+msgstr ""
+
+msgid "Square"
+msgstr ""
+
 msgid "Grayscale View"
 msgstr ""
 
@@ -220,25 +257,26 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
 msgid "Tile Mode Offsets"
 msgstr ""
 
-msgid "X-basis x:"
+#. Found under "Tile Mode Offsets". Basis is a linear algebra term. https://en.wikipedia.org/wiki/Basis_(linear_algebra)
+msgid "X-basis:"
 msgstr ""
 
-msgid "X-basis y:"
+#. Found under "Tile Mode Offsets". Basis is a linear algebra term. https://en.wikipedia.org/wiki/Basis_(linear_algebra)
+msgid "Y-basis:"
 msgstr ""
 
-msgid "Y-basis x:"
-msgstr ""
-
-msgid "Y-basis y:"
-msgstr ""
-
-msgid "Tile Mask"
+#. Found under "Tile Mode Offsets". It's a button that when pressed, enables masking for tile mode. Masking essentially limits drawing to the visible pixels of the image, thus preventing from drawing on transparent pixels.
+msgid "Masking:"
 msgstr ""
 
 msgid "Reset"
@@ -544,6 +582,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -824,6 +866,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -890,6 +936,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -938,12 +993,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -956,6 +1014,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1015,7 +1093,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1085,11 +1163,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1650,6 +1728,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1817,6 +1899,10 @@ msgstr ""
 msgid "Fills the drawn shape with color, instead of drawing a hollow shape"
 msgstr ""
 
+#. Found in the tool options of the Pencil, Eraser and Shading tools. It is a percentage of how dense the brush is. 100% density means that the brush gets completely drawn, anything less leaves gaps inside the brush, acting like a spray tool.
+msgid "Density:"
+msgstr ""
+
 msgid "Brush color from"
 msgstr ""
 
@@ -1926,10 +2012,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1947,10 +2041,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2143,6 +2237,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2447,6 +2545,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2614,6 +2732,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2712,6 +2846,10 @@ msgstr ""
 msgid "Sort by value"
 msgstr ""
 
+#. An option of the Sort palette button found in the palette panel. When selected, the colors of the palette are being sorted based on their OKHSL Lightness.
+msgid "Sort by lightness"
+msgstr ""
+
 #. An option of the Sort palette button found in the palette panel. When selected, the colors of the palette are being sorted based on their red channel value.
 msgid "Sort by red"
 msgstr ""
@@ -2956,6 +3094,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2967,12 +3109,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/af_ZA.po b/Translations/af_ZA.po
index 35545616e..7014ffff3 100644
--- a/Translations/af_ZA.po
+++ b/Translations/af_ZA.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Afrikaans\n"
 "Language: af_ZA\n"
-"PO-Revision-Date: 2024-08-01 22:06\n"
+"PO-Revision-Date: 2024-10-17 14:10\n"
 
 msgid "OK"
 msgstr "Goed"
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/ar_SA.po b/Translations/ar_SA.po
index 586d0071a..58a6cebb9 100644
--- a/Translations/ar_SA.po
+++ b/Translations/ar_SA.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Arabic\n"
 "Language: ar_SA\n"
-"PO-Revision-Date: 2024-08-01 22:06\n"
+"PO-Revision-Date: 2024-10-17 14:10\n"
 
 msgid "OK"
 msgstr "حسنا"
@@ -186,7 +186,7 @@ msgstr ""
 
 #. Found in the Offset Image dialog. It's a checkbox that, if enabled, wraps around the image if pixels go out of canvas bounds.
 msgid "Wrap around:"
-msgstr ""
+msgstr "لف حول:"
 
 #. Found in the menu that appears when you right click a frame button. Center is a verb, it is used to place the content of the frame to the center of the canvas.
 msgid "Center Frames"
@@ -231,6 +231,10 @@ msgstr "التدوير بشكل عمودي"
 msgid "Preferences"
 msgstr "خيارات"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "وضع البلاط"
 
@@ -274,13 +278,13 @@ msgid "Panels"
 msgstr ""
 
 msgid "Layouts"
-msgstr ""
+msgstr "المخططات"
 
 msgid "Moveable Panels"
 msgstr ""
 
 msgid "Manage Layouts"
-msgstr ""
+msgstr "إدارة المخططات"
 
 #. Noun, a preview of something
 msgid "Preview"
@@ -557,6 +561,10 @@ msgstr "تصفّح"
 msgid "Resize:"
 msgstr "تغيير الحجم:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr "إلغاء التصدير"
 
@@ -667,7 +675,7 @@ msgstr "الملف:"
 
 #. Found in "Open" and "Save" file dialogs. Searches all file types.
 msgid "All Files"
-msgstr ""
+msgstr "جميع الملفات"
 
 #. Found in the "Open" file dialog. Searches all file types supported by Pixelorama.
 msgid "All Recognized"
@@ -679,7 +687,7 @@ msgstr ""
 
 #. Found in the "Open" file dialog. Searches PNG files only. (Note that PNG is a file type and should remain untranslated)
 msgid "PNG Image"
-msgstr ""
+msgstr "صورة PNG"
 
 #. Found in the "Open" file dialog. Searches BMP files only. (Note that BMP is a file type and should remain untranslated)
 msgid "BMP Image"
@@ -766,7 +774,7 @@ msgid "Timeline"
 msgstr "الجدول الزمني"
 
 msgid "Selection"
-msgstr ""
+msgstr "تحديد"
 
 msgid "Shortcuts"
 msgstr "اختصارات"
@@ -837,9 +845,13 @@ msgstr "لغة النظام"
 msgid "Display scale:"
 msgstr "مقياس العرض:"
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
-msgstr ""
+msgstr "حجم الخط:"
 
 msgid "Dim interface on dialog popup"
 msgstr ""
@@ -903,6 +915,15 @@ msgstr "لون الخلفية من:"
 msgid "Background color:"
 msgstr "لون الخلفية"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr "لون الأداة اليسري:"
 
@@ -951,12 +972,15 @@ msgstr "تعديل القناة الزرقاء"
 msgid "Modify Alpha Channel"
 msgstr "تعديل قناة الشفافية"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "تحديد خارجي"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "ظل خلفي"
 
@@ -969,6 +993,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr "لون الظل:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -992,7 +1036,7 @@ msgid "Shape:"
 msgstr "الشكل:"
 
 msgid "Linear"
-msgstr ""
+msgstr "خطي"
 
 msgid "Radial"
 msgstr ""
@@ -1028,7 +1072,7 @@ msgstr "النوع:"
 msgid "Angle:"
 msgstr "الزاوية:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1042,7 +1086,7 @@ msgstr ""
 
 #. Refers to the saturation of the colors of an image.
 msgid "Saturation:"
-msgstr ""
+msgstr "التشبع:"
 
 #. Refers to the value (as in HSV) of the colors of an image.
 msgid "Value:"
@@ -1050,27 +1094,27 @@ msgstr "القيمة:"
 
 #. An image effect. Adjusts the brightness and contrast of the colors of an image.
 msgid "Adjust Brightness/Contrast"
-msgstr ""
+msgstr "ضبط السطوع/التباين"
 
 #. Refers to the brightness of the colors of an image.
 msgid "Brightness:"
-msgstr ""
+msgstr "السطوع:"
 
 #. Refers to the contrast of the colors of an image.
 msgid "Contrast:"
-msgstr ""
+msgstr "التباين:"
 
 #. Refers to the red value of the colors of an image.
 msgid "Red value:"
-msgstr ""
+msgstr "قيمة الأحمر:"
 
 #. Refers to the green value of the colors of an image.
 msgid "Green value:"
-msgstr ""
+msgstr "قيمة الأخضر:"
 
 #. Refers to the blue value of the colors of an image.
 msgid "Blue value:"
-msgstr ""
+msgstr "قيمة الأزرق:"
 
 #. Refers to a color that tints an image.
 msgid "Tint color:"
@@ -1098,11 +1142,11 @@ msgstr "الألوان:"
 msgid "Steps:"
 msgstr "الخطوات:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1477,7 +1521,7 @@ msgstr ""
 
 #. Refers to color-related options such as sliders that set color channel values like R, G, B and A.
 msgid "Color options"
-msgstr ""
+msgstr "إعدادات الألوان"
 
 #. Tooltip of the button with three dots found under color options in the color picker panel that lets users change the mode of the color picker/sliders.
 msgid "Select a picker mode."
@@ -1676,6 +1720,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "إيقاف مؤقت للتطبيق عند تغيير النوافذ"
@@ -1952,11 +2000,19 @@ msgstr "أفقي"
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr "رأسي"
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
-msgstr "رأسي"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "الإطار الحالي:"
@@ -1973,10 +2029,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2169,6 +2225,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr "وضع المزج:"
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr "عادي"
@@ -2473,6 +2533,26 @@ msgstr "لون الملء الافتراضي:"
 msgid "A default background color of a new image"
 msgstr "لون الخلفية الافتراضي للصور الجديدة"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2640,6 +2720,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "إغلاق"
 
@@ -2982,6 +3078,10 @@ msgstr ""
 msgid "Text:"
 msgstr "النص:"
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2993,12 +3093,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr "يسار"
 
 msgid "Right"
 msgstr "يمين"
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr "الطاقة:"
diff --git a/Translations/be_BY.po b/Translations/be_BY.po
index 5d5957ed5..cd0c86bd9 100644
--- a/Translations/be_BY.po
+++ b/Translations/be_BY.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Belarusian\n"
 "Language: be_BY\n"
-"PO-Revision-Date: 2024-08-01 22:06\n"
+"PO-Revision-Date: 2024-10-17 14:10\n"
 
 msgid "OK"
 msgstr "OK"
@@ -231,6 +231,10 @@ msgstr "Адлюстраваць па вертыкалі"
 msgid "Preferences"
 msgstr "Налады"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "Бясшоўны рэжым"
 
@@ -556,6 +560,10 @@ msgstr "Агляд"
 msgid "Resize:"
 msgstr "Змена памеру:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr "Скасаваць экспарт"
 
@@ -836,6 +844,10 @@ msgstr "Мова сістэмы"
 msgid "Display scale:"
 msgstr "Экранны маштаб:"
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -902,6 +914,15 @@ msgstr "Колер фона з:"
 msgid "Background color:"
 msgstr "Колер фона:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr "Колер левага інструмента:"
 
@@ -950,12 +971,15 @@ msgstr "Мяняць сіні канал"
 msgid "Modify Alpha Channel"
 msgstr "Мяняць альфа-канал"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "Цень"
 
@@ -968,6 +992,26 @@ msgstr "Зрух па Y:"
 msgid "Shadow color:"
 msgstr "Колер цені:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr "Градыент"
 
@@ -1027,7 +1071,7 @@ msgstr "Тып:"
 msgid "Angle:"
 msgstr "Кут:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1097,11 +1141,11 @@ msgstr "Колеры:"
 msgid "Steps:"
 msgstr "Крокі:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1671,6 +1715,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1947,10 +1995,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1968,10 +2024,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2164,6 +2220,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2468,6 +2528,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2635,6 +2715,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2977,6 +3073,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2988,12 +3088,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/bg_BG.po b/Translations/bg_BG.po
index f99874126..b192500e2 100644
--- a/Translations/bg_BG.po
+++ b/Translations/bg_BG.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Bulgarian\n"
 "Language: bg_BG\n"
-"PO-Revision-Date: 2024-08-03 00:15\n"
+"PO-Revision-Date: 2024-10-17 14:10\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/ca_ES.po b/Translations/ca_ES.po
index 231473b53..fb2518698 100644
--- a/Translations/ca_ES.po
+++ b/Translations/ca_ES.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Catalan\n"
 "Language: ca_ES\n"
-"PO-Revision-Date: 2024-08-01 22:06\n"
+"PO-Revision-Date: 2024-10-17 14:10\n"
 
 msgid "OK"
 msgstr "D'acord"
@@ -231,6 +231,10 @@ msgstr "Voltejar verticalment"
 msgid "Preferences"
 msgstr "Preferències"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "Mode Tile"
 
@@ -557,6 +561,10 @@ msgstr "Navegar"
 msgid "Resize:"
 msgstr "Redimensionar:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr "Cancel·lar exportació"
 
@@ -837,6 +845,10 @@ msgstr "Idioma del sistema"
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -903,6 +915,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -951,12 +972,15 @@ msgstr "Modifica el canal blau"
 msgid "Modify Alpha Channel"
 msgstr "Modifica el canal alfa"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Desaturació"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Contorn"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -969,6 +993,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr "Degradat"
 
@@ -1028,7 +1072,7 @@ msgstr "Tipus:"
 msgid "Angle:"
 msgstr "Angle:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "Ajusta la Tonalitat/Saturació/Lluminositat"
 
@@ -1098,11 +1142,11 @@ msgstr "Colors:"
 msgid "Steps:"
 msgstr "Passos:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1709,6 +1753,10 @@ msgstr "Estableix el límit d'FPS de l'aplicació:"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "Estableix el límit de fotogrames per segon de l'aplicació. Com més baix, menys càrrega rep la CPU, però l'aplicació s'alenteix i pot no respondre correctament. 0 vol dir que no hi ha cap límit."
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "Pausa l'aplicació en perdre el focus"
@@ -1986,11 +2034,19 @@ msgstr "Horitzontal"
 msgid "Enable horizontal mirrored drawing"
 msgstr "Activa el dibuix emmirallat horitzontalment"
 
+msgid "Vertical"
+msgstr "Vertical"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Activa el dibuix emmirallat verticalment"
 
-msgid "Vertical"
-msgstr "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "Fotograma actual:"
@@ -2007,10 +2063,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2204,6 +2260,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2508,6 +2568,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2675,6 +2755,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "Tancar"
 
@@ -3017,6 +3113,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -3028,12 +3128,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/cs_CZ.po b/Translations/cs_CZ.po
index d4aaae61f..6c5ffce4f 100644
--- a/Translations/cs_CZ.po
+++ b/Translations/cs_CZ.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Czech\n"
 "Language: cs_CZ\n"
-"PO-Revision-Date: 2024-08-02 13:34\n"
+"PO-Revision-Date: 2024-10-17 14:10\n"
 
 msgid "OK"
 msgstr "OK"
@@ -231,6 +231,10 @@ msgstr "Převrátit svisle"
 msgid "Preferences"
 msgstr "Nastavení"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "Dlaždicový režim"
 
@@ -558,6 +562,10 @@ msgstr "Procházet"
 msgid "Resize:"
 msgstr "Změnit velikost:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr "Zrušit export"
 
@@ -838,6 +846,10 @@ msgstr "Systémový jazyk"
 msgid "Display scale:"
 msgstr "Škála zobrazení:"
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr "Velikost písma:"
@@ -904,6 +916,15 @@ msgstr "Barva pozadí z:"
 msgid "Background color:"
 msgstr "Barva pozadí:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr "Barva levého nástroje:"
 
@@ -952,12 +973,15 @@ msgstr "Upravit modrý kanál"
 msgid "Modify Alpha Channel"
 msgstr "Upravit alfa kanál"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Odstíny šedi"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Obrys"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "Vrhnout stín"
 
@@ -970,6 +994,26 @@ msgstr "Odsazení Y:"
 msgid "Shadow color:"
 msgstr "Barva stínu:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr "Gradient"
 
@@ -1029,7 +1073,7 @@ msgstr "Typ:"
 msgid "Angle:"
 msgstr "Úhel:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "Upravit odstín, sytost a hodnotu"
 
@@ -1099,11 +1143,11 @@ msgstr "Barvy:"
 msgid "Steps:"
 msgstr "Kroky:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr "Paletizovat"
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr "Pixelizace"
 
@@ -1721,6 +1765,10 @@ msgid "Sets the limit of the application's frames per second. The lower the numb
 msgstr "Nastaví limit snímků za vteřinu aplikace. Čím nižší číslo, tím menší bude zatížení procesoru,\n"
 "ale může dojít ke snížení odezvy a zasekávání aplikace. 0 značí žádný limit."
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "Pozastavit aplikaci, když je okno v pozadí"
@@ -1998,11 +2046,19 @@ msgstr "Vodorovně"
 msgid "Enable horizontal mirrored drawing"
 msgstr "Povolit kreslení ve vodorovném zrcadlení"
 
+msgid "Vertical"
+msgstr "Svisle"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Povolit kreslení ve svislém zrcadlení"
 
-msgid "Vertical"
-msgstr "Svisle"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "Aktuální snímek:"
@@ -2019,11 +2075,11 @@ msgstr "Přeskočit na první snímek"
 msgid "Go to the previous frame"
 msgstr "Přejít na předchozí snímek"
 
-msgid "Play the animation backwards (from end to beginning)"
-msgstr "Přehrát animaci pozpátku (od konce do začátku)"
+msgid "Play the animation backwards"
+msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
-msgstr "Přehrát animaci vpřed (od začátku do konce)"
+msgid "Play the animation forward"
+msgstr ""
 
 msgid "Go to the next frame"
 msgstr "Přejít na další snímek"
@@ -2217,6 +2273,10 @@ msgstr "Sloučit aktuální vrstvu s vrstvou níže"
 msgid "Blend mode:"
 msgstr "Režim prolnutí:"
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr "Normální"
@@ -2522,6 +2582,26 @@ msgstr "Výchozí barva výplně:"
 msgid "A default background color of a new image"
 msgstr "Výchozí barva pozadí nového obrázku"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr "Uzamknout poměr stran"
 
@@ -2689,6 +2769,22 @@ msgstr "Oddělovací znak(y):"
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "Zavřít"
 
@@ -3035,6 +3131,10 @@ msgstr "Dolní poloměr:"
 msgid "Text:"
 msgstr "Text:"
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr "Velikost pixelu:"
@@ -3046,12 +3146,19 @@ msgstr "Krok křivky:"
 msgid "Horizontal alignment:"
 msgstr "Vodorovné zarovnání:"
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr "Vlevo"
 
 msgid "Right"
 msgstr "Vpravo"
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr "Energie:"
diff --git a/Translations/cy_GB.po b/Translations/cy_GB.po
index a085d484d..2c2c92bed 100644
--- a/Translations/cy_GB.po
+++ b/Translations/cy_GB.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Welsh\n"
 "Language: cy_GB\n"
-"PO-Revision-Date: 2024-08-03 00:15\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/da_DK.po b/Translations/da_DK.po
index ddee1eb7d..135cee427 100644
--- a/Translations/da_DK.po
+++ b/Translations/da_DK.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Danish\n"
 "Language: da_DK\n"
-"PO-Revision-Date: 2024-08-01 22:06\n"
+"PO-Revision-Date: 2024-10-17 14:10\n"
 
 msgid "OK"
 msgstr "OK"
@@ -231,6 +231,10 @@ msgstr "Spejlvend vertikalt"
 msgid "Preferences"
 msgstr "Præferencer"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "Felt-tilstand"
 
@@ -557,6 +561,10 @@ msgstr "Browse"
 msgid "Resize:"
 msgstr "Tilpas størrelse:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr "Annullér Eksport"
 
@@ -837,6 +845,10 @@ msgstr "Systemsprog"
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -903,6 +915,15 @@ msgstr "Baggrundsfarve fra:"
 msgid "Background color:"
 msgstr "Baggrundsfarve:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr "Venstre værktøjsfarve:"
 
@@ -951,12 +972,15 @@ msgstr "Ændr Blå Kanal"
 msgid "Modify Alpha Channel"
 msgstr "Ændr Alpha Kanal"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Desaturation"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Kontur"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "Skyggeeffekt"
 
@@ -969,6 +993,26 @@ msgstr "Forskydning Y:"
 msgid "Shadow color:"
 msgstr "Skyggefarve:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr "Gradient"
 
@@ -1028,7 +1072,7 @@ msgstr "Type:"
 msgid "Angle:"
 msgstr "Vinkel:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "Justér Nuance/Mætning/Værdi"
 
@@ -1098,11 +1142,11 @@ msgstr "Farver:"
 msgid "Steps:"
 msgstr "Trin:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1709,6 +1753,10 @@ msgstr "Indstil applikationens FPS-grænse:"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1985,11 +2033,19 @@ msgstr "Horisontal"
 msgid "Enable horizontal mirrored drawing"
 msgstr "Aktivér horisontal spejltegning"
 
+msgid "Vertical"
+msgstr "Vertikal"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Aktivér vertikal spejltegning"
 
-msgid "Vertical"
-msgstr "Vertikal"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "Nuværende ramme:"
@@ -2006,10 +2062,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2202,6 +2258,10 @@ msgstr "Sammenflet nuværende lag med det nedenfor"
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2506,6 +2566,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2673,6 +2753,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "Luk"
 
@@ -3015,6 +3111,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -3026,12 +3126,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/de_DE.po b/Translations/de_DE.po
index b8edba373..2badc72c8 100644
--- a/Translations/de_DE.po
+++ b/Translations/de_DE.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: German\n"
 "Language: de_DE\n"
-"PO-Revision-Date: 2024-08-01 22:06\n"
+"PO-Revision-Date: 2024-10-17 14:10\n"
 
 msgid "OK"
 msgstr "OK"
@@ -101,7 +101,9 @@ msgstr "Gemischte Bilder einbeziehen"
 msgid "If enabled, the final blended images are also being stored in the pxo, for each frame.\n"
 "This makes the pxo file larger and is useful for importing by third-party software\n"
 "or CLI exporting. Loading pxo files in Pixelorama does not need this option to be enabled."
-msgstr ""
+msgstr "Wenn aktiviert, werden die letzten überlagerten Bilder für jeden Frame auch in der pxo gespeichert.\n"
+"Dies macht die pxo-Datei größer und ist nützlich für den Import durch Software von Drittanbietern\n"
+"oder den CLI-Export. Beim Laden von pxo-Dateien in Pixelorama muss diese Option nicht aktiviert sein."
 
 msgid "Import"
 msgstr "Importieren"
@@ -231,6 +233,10 @@ msgstr "Vertikal spiegeln"
 msgid "Preferences"
 msgstr "Einstellungen"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "Kachelmodus"
 
@@ -557,6 +563,10 @@ msgstr "Durchsuchen"
 msgid "Resize:"
 msgstr "Größe verändern"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr "Qualität:"
+
 msgid "Cancel Export"
 msgstr "Export abbrechen"
 
@@ -636,25 +646,25 @@ msgid "Export dimensions:"
 msgstr "Export-Größen:"
 
 msgid "Save a File"
-msgstr ""
+msgstr "Datei speichern"
 
 msgid "Go to previous folder."
-msgstr ""
+msgstr "Gehe zum vorherigen Ordner."
 
 msgid "Go to next folder."
-msgstr ""
+msgstr "Gehe zum nächsten Ordner."
 
 msgid "Go to parent folder."
-msgstr ""
+msgstr "Gehe zum übergeordneten Ordner."
 
 msgid "Path:"
 msgstr "Pfad:"
 
 msgid "Refresh files."
-msgstr ""
+msgstr "Dateien aktualisieren."
 
 msgid "Toggle the visibility of hidden files."
-msgstr ""
+msgstr "Schalten Sie die Sichtbarkeit von versteckten Dateien um."
 
 msgid "Directories & Files:"
 msgstr "Verzeichnisse & Dateien:"
@@ -667,51 +677,51 @@ msgstr "Datei:"
 
 #. Found in "Open" and "Save" file dialogs. Searches all file types.
 msgid "All Files"
-msgstr ""
+msgstr "Alle Dateien"
 
 #. Found in the "Open" file dialog. Searches all file types supported by Pixelorama.
 msgid "All Recognized"
-msgstr ""
+msgstr "Alle erkannt"
 
 #. Found in "Open" and "Save" file dialogs. Searches Pixelorama Project files only (.pxo).
 msgid "Pixelorama Project"
-msgstr ""
+msgstr "Pixelorama-Projekt"
 
 #. Found in the "Open" file dialog. Searches PNG files only. (Note that PNG is a file type and should remain untranslated)
 msgid "PNG Image"
-msgstr ""
+msgstr "PNG-Bild"
 
 #. Found in the "Open" file dialog. Searches BMP files only. (Note that BMP is a file type and should remain untranslated)
 msgid "BMP Image"
-msgstr ""
+msgstr "BMP-Bild"
 
 #. Found in the "Open" file dialog. Searches "Radiance HDR" files only. (Note that "Radiance HDR" is a file type and is better untranslated)
 msgid "Radiance HDR Image"
-msgstr ""
+msgstr "Radiance HDR-Bild"
 
 #. Found in the "Open" file dialog. Searches JPEG files only. (Note that JPEG is a file type and should remain untranslated)
 msgid "JPEG Image"
-msgstr ""
+msgstr "JPEG Bild"
 
 #. Found in the "Open" file dialog. Searches SVG files only. (Note that SVG is a file type and should remain untranslated)
 msgid "SVG Image"
-msgstr ""
+msgstr "SVG-Bild"
 
 #. Found in the "Open" file dialog. Searches TGA files only. (Note that TGA is a file type and should remain untranslated)
 msgid "TGA Image"
-msgstr ""
+msgstr "TGA-Bild"
 
 #. Found in the "Open" file dialog. Searches WebP files only. (Note that WebP is a file type and should remain untranslated)
 msgid "WebP Image"
-msgstr ""
+msgstr "WebP Bild"
 
 #. Found in the "Open" file dialog. Searches Pixelorama palette files only (.json).
 msgid "Pixelorama palette"
-msgstr ""
+msgstr "Pixelorama-Palette"
 
 #. Found in the "Open" file dialog. Searches GIMP palette files only (.gpl). (Note that GIMP is a software and should remain untranslated)
 msgid "GIMP palette"
-msgstr ""
+msgstr "GIMP palette"
 
 #. Found in the export dialog. It is a button that when pressed, shows more options.
 msgid "Advanced options"
@@ -837,6 +847,10 @@ msgstr "Systemsprache"
 msgid "Display scale:"
 msgstr "Bildschirmmaße:"
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr "Schriftgröße:"
@@ -903,6 +917,15 @@ msgstr "Hintergrundfarbe von:"
 msgid "Background color:"
 msgstr "Hintergrundfarbe:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr "Farbe des linken Werkzeugs:"
 
@@ -951,12 +974,15 @@ msgstr "Blau-Kanal ändern"
 msgid "Modify Alpha Channel"
 msgstr "Alpha-Kanal ändern"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Entsättigung"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Umriss"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "Schlagschatten"
 
@@ -969,6 +995,26 @@ msgstr "Offset Y:"
 msgid "Shadow color:"
 msgstr "Schattenfarbe:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr "Gaußsche Unschärfe"
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr "Unschärfe-Typ:"
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr "Unschärfebetrag:"
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr "Unschärferadius:"
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr "Unschärfe-Richtung:"
+
 msgid "Gradient"
 msgstr "Gradient"
 
@@ -1029,7 +1075,7 @@ msgstr "Typ:"
 msgid "Angle:"
 msgstr "Winkel:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "Farbton/Sättigung/Wert anpassen"
 
@@ -1051,35 +1097,35 @@ msgstr "Wert:"
 
 #. An image effect. Adjusts the brightness and contrast of the colors of an image.
 msgid "Adjust Brightness/Contrast"
-msgstr ""
+msgstr "Helligkeit/Kontrast anpassen"
 
 #. Refers to the brightness of the colors of an image.
 msgid "Brightness:"
-msgstr ""
+msgstr "Helligkeit:"
 
 #. Refers to the contrast of the colors of an image.
 msgid "Contrast:"
-msgstr ""
+msgstr "Kontrast:"
 
 #. Refers to the red value of the colors of an image.
 msgid "Red value:"
-msgstr ""
+msgstr "Rot-Wert:"
 
 #. Refers to the green value of the colors of an image.
 msgid "Green value:"
-msgstr ""
+msgstr "Grün-Wert:"
 
 #. Refers to the blue value of the colors of an image.
 msgid "Blue value:"
-msgstr ""
+msgstr "Blau-Wert:"
 
 #. Refers to a color that tints an image.
 msgid "Tint color:"
-msgstr ""
+msgstr "Farbton:"
 
 #. Refers to the factor (how much) a color tints an image.
 msgid "Tint effect factor:"
-msgstr ""
+msgstr "Farbeffekt-Faktor:"
 
 msgid "Apply"
 msgstr "Übernehmen"
@@ -1099,11 +1145,11 @@ msgstr "Farben:"
 msgid "Steps:"
 msgstr "Schritte:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr "Palettieren"
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr "Pixelieren"
 
@@ -1358,7 +1404,9 @@ msgstr "Lasso- / Freies Auswahl-Werkzeug\n\n"
 msgid "Select by Drawing\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
-msgstr ""
+msgstr "Auswählen durchs Zeichnen\n\n"
+"%s für die linke Maustaste\n"
+"%s für die rechte Maustaste"
 
 msgid "Move\n\n"
 "%s for left mouse button\n"
@@ -1392,7 +1440,8 @@ msgstr "Farbauswahl\n\n"
 
 msgid "Crop\n\n"
 "Resize the canvas"
-msgstr ""
+msgstr "Zuschneiden\n\n"
+"Größe der Leinwand"
 
 msgid "Pencil\n\n"
 "%s for left mouse button\n"
@@ -1498,7 +1547,7 @@ msgstr "Wechsle die linke und rechte Farben."
 
 #. Tooltip of the average color button, found in the color picker panel. Shows the average color between the two selected.
 msgid "Average Color:"
-msgstr ""
+msgstr "Mittelwerts-Farbe:"
 
 msgid "Reset the colors to their default state (black for left, white for right)"
 msgstr "Setzt die Farben auf den Standardzustand zurück (schwarz für links, weiß für rechts)"
@@ -1509,7 +1558,7 @@ msgstr "Wähle eine Farbe des Bildschirms aus."
 
 #. Tooltip of the color text field found in the color picker panel that lets users change the color by hex code or english name ("red" cannot be translated).
 msgid "Enter a hex code (\"#ff0000\") or named color (\"red\")."
-msgstr ""
+msgstr "Geben Sie einen Hex-Code (\"#ff0000\") oder eine Farbe mit Namen (\"red\") ein."
 
 #. Tooltip of the button found in the color picker panel that lets users change the shape of the color picker.
 msgid "Select a picker shape."
@@ -1521,19 +1570,19 @@ msgstr "Farboptionen"
 
 #. Tooltip of the button with three dots found under color options in the color picker panel that lets users change the mode of the color picker/sliders.
 msgid "Select a picker mode."
-msgstr ""
+msgstr "Wählen Sie einen Picker-Modus."
 
 #. Checkbox found in the menu of the button with three dots found under color options in the color picker panel.
 msgid "Colorized Sliders"
-msgstr ""
+msgstr "Farbige Schieberegler"
 
 #. Shows saved colors in certain color picker menus.
 msgid "Swatches"
-msgstr ""
+msgstr "Swatches"
 
 #. Found under color options in the color picker panel.
 msgid "Recent Colors"
-msgstr ""
+msgstr "Letzte Farben"
 
 msgid "Left tool"
 msgstr "Linkes Werkzeug"
@@ -1716,6 +1765,10 @@ msgstr "FPS Limit festlegen:"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "Legt die Grenze der Frames pro Sekunde fest. Je niedriger die Anzahl, desto niedriger die CPU-Auslastung, aber die Anwendung wird langsamer und reagier langsamer. 0 bedeutet, dass es keine Grenze gibt."
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr "Max. Rückgängig-Schritte:"
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "Anwendung pausieren, wenn der Fokus verloren geht"
@@ -1726,11 +1779,11 @@ msgstr "Wenn dies eingeschaltet ist und das Fenster der Anwendung den Fokus verl
 
 #. An option found in the preferences, under the Performance section. Refers to the screen being updated (redrawn) continuously.
 msgid "Update continuously"
-msgstr ""
+msgstr "Kontinuierlich aktualisieren"
 
 #. Found in the preferences, hint of the "Update continuously" option.
 msgid "If this is toggled on, the application will redraw the screen continuously, even while it's not used. Turning this off helps lower CPU and GPU usage when idle."
-msgstr ""
+msgstr "Wenn dies eingeschaltet ist, wird die Anwendung den Bildschirm kontinuierlich neu zeichnen, auch wenn er nicht verwendet wird. Das Ausschalten hilft, die CPU- und GPU-Nutzung zu senken, wenn die Applikation im Moment nicht verwendet wird."
 
 #. An option found in the preferences, under the Performance section.
 msgid "Enable window transparency"
@@ -1993,11 +2046,19 @@ msgstr "Horizontal spiegeln"
 msgid "Enable horizontal mirrored drawing"
 msgstr "Aktiviere horizontal gespiegelte Zeichnung"
 
+msgid "Vertical"
+msgstr "Vertikal"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Aktiviere vertikal gespiegelte Zeichnung"
 
-msgid "Vertical"
-msgstr "Vertikal"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "Aktueller Frame"
@@ -2009,22 +2070,22 @@ msgid "Current frame as spritesheet"
 msgstr "Aktueller Frame als Spritesheet"
 
 msgid "Jump to the first frame"
-msgstr ""
+msgstr "Zum ersten Frame springen"
 
 msgid "Go to the previous frame"
+msgstr "Zum vorherigen Frame gehen"
+
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
-msgstr ""
-
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
-msgstr ""
+msgstr "Gehe zum nächsten Frame"
 
 msgid "Jump to the last frame"
-msgstr ""
+msgstr "Springe zum letzten Frame"
 
 msgid "Timeline settings"
 msgstr "Timeline-Einstellungen"
@@ -2132,7 +2193,7 @@ msgid "Link Cels to"
 msgstr "Cels verknüpfen mit"
 
 msgid "Unlink Cels"
-msgstr "Cels entfernen"
+msgstr "Cels Verknüpfung entfernen"
 
 msgid "Properties"
 msgstr "Eigenschaften"
@@ -2158,7 +2219,7 @@ msgstr "Neuer Tag"
 
 #. Found on the popup menu that appears when a user right-clicks on a frame button. When clicked, it allows users to paste/import tags from other opened projects.
 msgid "Import Tag"
-msgstr ""
+msgstr "Tag importieren"
 
 #. Found on the popup menu that appears when a user right-clicks on a frame button. When clicked, the order of the selected frames is being reversed.
 msgid "Reverse Frames"
@@ -2212,6 +2273,10 @@ msgstr "Führe aktuelle Ebene mit der darunter zusammen"
 msgid "Blend mode:"
 msgstr "Mischmodus:"
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr "Pass-through"
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr "Normal"
@@ -2517,6 +2582,26 @@ msgstr "Standardfüllfarbe:"
 msgid "A default background color of a new image"
 msgstr "Eine Standard-Hintergrundfarbe eines neuen Bildes"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr "Seitenverhältnis sperren"
 
@@ -2684,6 +2769,22 @@ msgstr "Trennzeichen(n):"
 msgid "The character(s) that separate the file name and the frame number"
 msgstr "Die Zeichen, die den Dateinamen und die Frame-Nummer trennen"
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "Schließen"
 
@@ -3029,6 +3130,10 @@ msgstr "Unterer Radius:"
 msgid "Text:"
 msgstr "Text:"
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr "Pixelgröße:"
@@ -3040,12 +3145,19 @@ msgstr "Kurvenschritt:"
 msgid "Horizontal alignment:"
 msgstr "Horizontale Ausrichtung:"
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr "Links"
 
 msgid "Right"
 msgstr "Rechts"
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr "Energie:"
@@ -3151,24 +3263,25 @@ msgstr "Monochrom"
 
 #. Found in the Reference Images panel when no reference image has been imported.
 msgid "When opening an image, it may be imported as a reference."
-msgstr ""
+msgstr "Beim Öffnen eines Bildes kann es als Referenz importiert werden."
 
 #. Found in the Reference Images panel after a reference image has been imported.
 msgid "Select an image below to change its properties.\n"
 "Note that you cannot draw while a reference image is selected."
-msgstr ""
+msgstr "Wählen Sie ein Bild unten, um seine Eigenschaften zu ändern.\n"
+"Beachten Sie, dass Sie nicht zeichnen können, während ein Referenzbild ausgewählt ist."
 
 #. Removes the selected reference image.
 msgid "Remove"
-msgstr ""
+msgstr "Entfernen"
 
 #. A tooltip to tell users to hold the Shift key while clicking the remove button
 msgid "Hold Shift while pressing to instantly remove."
-msgstr ""
+msgstr "Halten Sie Shift während des Benutzens gedrückt für sofortige Entfernung."
 
 #. Shown in the confirmation dialog for removing a reference image.
 msgid "Are you sure you want to remove this reference image? It will not be deleted from your file system."
-msgstr ""
+msgstr "Sind Sie sicher, dass Sie dieses Referenzbild entfernen möchten? Es wird nicht aus Ihrem Dateisystem gelöscht."
 
 #. Moves the reference image up in the list
 msgid "Move the selected reference image to the right"
@@ -3196,35 +3309,35 @@ msgstr "Ausgewähltes Referenzbild skalieren"
 
 #. Button to select no reference images in the Reference Images panel.
 msgid "none"
-msgstr ""
+msgstr "keine"
 
 #. Resets the Transform of the selected reference image on the canvas.
 msgid "Reset Transform"
-msgstr ""
+msgstr "Transformation zurücksetzen"
 
 #. Position of the selected reference image on the canvas.
 msgid "Position"
-msgstr ""
+msgstr "Position"
 
 #. Scale of the selected reference image on the canvas.
 msgid "Scale"
-msgstr ""
+msgstr "Skalierung"
 
 #. Rotation of the selected reference image on the canvas.
 msgid "Rotation"
-msgstr ""
+msgstr "Rotation"
 
 #. Toggle filter of the selected reference image on the canvas.
 msgid "Filter"
-msgstr ""
+msgstr "Filter"
 
 #. Opacity of the selected reference image on the canvas.
 msgid "Opacity"
-msgstr ""
+msgstr "Transparenz"
 
 #. Color clamping of the selected reference image on the canvas.
 msgid "Color Clamping"
-msgstr ""
+msgstr "Farbklampen"
 
 #. Used in checkbuttons (like on/off switches) that enable/disable something.
 msgid "Enabled"
diff --git a/Translations/el_GR.po b/Translations/el_GR.po
index cfb8f5927..f09a9f4fb 100644
--- a/Translations/el_GR.po
+++ b/Translations/el_GR.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Greek\n"
 "Language: el_GR\n"
-"PO-Revision-Date: 2024-08-01 22:06\n"
+"PO-Revision-Date: 2024-10-17 17:12\n"
 
 msgid "OK"
 msgstr "Εντάξει"
@@ -233,6 +233,10 @@ msgstr "Κάθετη αναστροφή"
 msgid "Preferences"
 msgstr "Προτιμήσεις"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr "Κεντράρισμα Καμβά"
+
 msgid "Tile Mode"
 msgstr "Λειτουργία μοτίβου"
 
@@ -560,6 +564,10 @@ msgstr "Περιήγηση"
 msgid "Resize:"
 msgstr "Αλλαγή μεγέθους:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr "Ποιότητα:"
+
 msgid "Cancel Export"
 msgstr "Ακύρωση Εξαγωγής"
 
@@ -840,6 +848,10 @@ msgstr "Γλώσσα Συστήματος"
 msgid "Display scale:"
 msgstr "Κλίμακα εμφάνισης:"
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr "Γραμματοσειρά:"
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr "Μέγεθος γραμματοσειράς:"
@@ -906,6 +918,16 @@ msgstr "Χρώμα υποβάθρου από:"
 msgid "Background color:"
 msgstr "Χρώμα υποβάθρου:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr "Κοινή χρήση επιλογών μεταξύ αριστερών και δεξιών εργαλείων"
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr "Αν αυτό είναι ενεργοποιημένο, οι επιλογές θα συγχρονίζονται μεταξύ του αριστερού και του δεξιού εργαλείου.\n"
+"Για παράδειγμα, και τα δύο εργαλεία θα μοιράζονται το ίδιο μέγεθος βούρτσας, και η αλλαγή του σε ένα εργαλείο θα αλλάξει αμέσως και το άλλο."
+
 msgid "Left tool color:"
 msgstr "Χρώμα αριστερού εργαλείου:"
 
@@ -954,12 +976,15 @@ msgstr "Τροποποίηση Μπλε Καναλιού"
 msgid "Modify Alpha Channel"
 msgstr "Τροποποίηση Καναλιού Διαφάνειας"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Αποκορεσμός"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Περίγραμμα"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "Πίπτουσα σκιά"
 
@@ -972,6 +997,26 @@ msgstr "Μετατόπιση Y:"
 msgid "Shadow color:"
 msgstr "Χρώμα σκιάς:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr "Θόλωση Gauss"
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr "Τύπος θόλωσης:"
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr "Ποσότητα θόλωσης:"
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr "Ακτίνα θόλωσης:"
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr "Κατεύθυνση θόλωσης:"
+
 msgid "Gradient"
 msgstr "Διαβάθμιση"
 
@@ -1032,7 +1077,7 @@ msgstr "Είδος:"
 msgid "Angle:"
 msgstr "Γωνία:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "Ρύθμιση απόχρωσης/κορεσμού/τιμής"
 
@@ -1102,11 +1147,11 @@ msgstr "Χρώματα:"
 msgid "Steps:"
 msgstr "Βαθμίδες:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr "Παλετοποίηση"
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr "Δημιουργία εικονοστοιχείων"
 
@@ -1722,6 +1767,10 @@ msgstr "Ορισμός ορίου FPS εφαρμογής:"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "Ορίζει το όριο των καρέ της εφαρμογής ανά δευτερόλεπτο. Όσο μικρότερος είναι ο αριθμός, τόσο χαμηλότερη είναι η χρήση της CPU, αλλά η εφαρμογή γίνεται πιο αργή, ασταθής και λιγότερο ανταποκρινόμενη. 0 σημαίνει ότι δεν υπάρχει όριο."
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr "Μέγιστα βήματα αναίρεσης:"
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "Παύση εφαρμογής όταν χάνει την εστίαση"
@@ -1999,11 +2048,19 @@ msgstr "Οριζόντια"
 msgid "Enable horizontal mirrored drawing"
 msgstr "Ενεργοποίηση ζωγραφικής με οριζόντιο κατοπτρισμό"
 
+msgid "Vertical"
+msgstr "Κάθετα"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Ενεργοποίηση ζωγραφικής με κάθετο κατοπτρισμό"
 
-msgid "Vertical"
-msgstr "Κάθετα"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr "Μετακίνηση στο κέντρο του καμβά"
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr "Μετακίνηση στο κέντρο της προβολής"
 
 msgid "Current frame:"
 msgstr "Τρέχον καρέ:"
@@ -2020,11 +2077,11 @@ msgstr "Μετάβαση στο πρώτο καρέ"
 msgid "Go to the previous frame"
 msgstr "Μετάβαση στο προηγούμενο καρέ"
 
-msgid "Play the animation backwards (from end to beginning)"
-msgstr "Αναπαραγωγή της κίνησης ανάποδα (από το τέλος προς την αρχή)"
+msgid "Play the animation backwards"
+msgstr "Αναπαραγωγή της κίνησης προς τα πίσω"
 
-msgid "Play the animation forward (from beginning to end)"
-msgstr "Αναπαραγωγή της κίνησης κανονικά (από την αρχή προς το τέλος)"
+msgid "Play the animation forward"
+msgstr "Αναπαραγωγή της κίνησης προς τα εμπρός"
 
 msgid "Go to the next frame"
 msgstr "Μετάβαση στο επόμενο καρέ"
@@ -2218,6 +2275,10 @@ msgstr "Συγχώνευση της τρέχουσας στρώσης με τη
 msgid "Blend mode:"
 msgstr "Λειτουργία στρώσης:"
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr "Διέλευση"
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr "Κανονικό"
@@ -2523,6 +2584,26 @@ msgstr "Προεπιλεγμένο γέμισμα με χρώμα:"
 msgid "A default background color of a new image"
 msgstr "Το προεπιλεγμένο χρώμα των καινούριων εικόνων"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr "Επαναφορά όλων των επιλογών που βρίσκονται στις προτιμήσεις"
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr "Επαναφορά επιλογών χρονοδιαγράμματος"
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr "Επαναφορά όλων των επιλογών εργαλείων"
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr "Διαγραφή όλων των επεκτάσεων"
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr "Εκκαθάριση της λίστας αρχείων που ανοίχθηκαν πρόσφατα"
+
 msgid "Lock aspect ratio"
 msgstr "Κλείδωμα αναλογίας διαστάσεων"
 
@@ -2690,6 +2771,22 @@ msgstr "Διαχωριστικοί χαρακτήρες:"
 msgid "The character(s) that separate the file name and the frame number"
 msgstr "Οι χαρακτήρες που διαχωρίζουν το όνομα του αρχείου και τον αριθμό του καρέ"
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr "Περικοπή εικόνων"
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr "Περικοπή των εξαγόμενων εικόνων στο ορατό τμήμα τους, θεωρώντας κάθε pixel με ένα μη μηδενικό alpha κανάλι ως ορατό."
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr "Αποκοπή περιεχομένου εικόνας στην επιλογή"
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr "Εξαγωγή μόνο περιεχομένου που βρίσκεται εντός των ορίων μιας επιλεγμένης περιοχής."
+
 msgid "Close"
 msgstr "Κλείσιμο"
 
@@ -3035,6 +3132,10 @@ msgstr "Κάτω ακτίνα:"
 msgid "Text:"
 msgstr "Κείμενο:"
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr "Βάθος:"
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr "Μέγεθος εικονοστοιχείου:"
@@ -3046,12 +3147,19 @@ msgstr "Βήμα καμπυλότητας:"
 msgid "Horizontal alignment:"
 msgstr "Οριζόντια στοίχιση:"
 
+msgid "Vertical alignment:"
+msgstr "Κάθετη στοίχιση:"
+
 msgid "Left"
 msgstr "Αριστερά"
 
 msgid "Right"
 msgstr "Δεξιά"
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr "Διάστιχο γραμμών:"
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr "Ενέργεια:"
diff --git a/Translations/en_PT.po b/Translations/en_PT.po
index be11f9a28..c8872f15b 100644
--- a/Translations/en_PT.po
+++ b/Translations/en_PT.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Pirate English\n"
 "Language: en_PT\n"
-"PO-Revision-Date: 2024-08-03 01:17\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/eo_UY.po b/Translations/eo_UY.po
index 6f50d6378..393cc4da0 100644
--- a/Translations/eo_UY.po
+++ b/Translations/eo_UY.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Esperanto\n"
 "Language: eo_UY\n"
-"PO-Revision-Date: 2024-08-01 22:07\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "Bone"
@@ -231,6 +231,10 @@ msgstr "Speguli vertikale"
 msgid "Preferences"
 msgstr "Agordoj"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "Kahela reĝimo"
 
@@ -557,6 +561,10 @@ msgstr "Foliumo"
 msgid "Resize:"
 msgstr "Reskali:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr "Nuligi eksporton"
 
@@ -837,6 +845,10 @@ msgstr "Sistema lingvo"
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -903,6 +915,15 @@ msgstr "Koloro de la fono el:"
 msgid "Background color:"
 msgstr "Koloro de la fono:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr "Koloro de la maldekstra ilo:"
 
@@ -951,12 +972,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Konturoj"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "Ĵeti ombron"
 
@@ -969,6 +993,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr "Koloro de la ombro:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr "Gradiento"
 
@@ -1028,7 +1072,7 @@ msgstr "Tipo:"
 msgid "Angle:"
 msgstr "Angulo:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1098,11 +1142,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1662,6 +1706,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "Agordas la kvoto de renoviĝoj de bildo po sekundo. Ju malpli estas la numero, des malpli multe da procesora tempo estas uzata, sed la programo iĝas malpli rapida kaj reagema. 0 signifas, ke ne ekzistas limo."
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1938,11 +1986,19 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr "Vertikala"
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
-msgstr "Vertikala"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "Aktuala filmero:"
@@ -1959,10 +2015,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2155,6 +2211,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2459,6 +2519,26 @@ msgstr "Defaŭlta plenigkoloro:"
 msgid "A default background color of a new image"
 msgstr "Defaŭlta fona koloro de nova bildo"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2626,6 +2706,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "Fermi"
 
@@ -2968,6 +3064,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2979,12 +3079,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/es_ES.po b/Translations/es_ES.po
index 7ce5d10a2..8882421fb 100644
--- a/Translations/es_ES.po
+++ b/Translations/es_ES.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Spanish\n"
 "Language: es_ES\n"
-"PO-Revision-Date: 2024-08-01 22:06\n"
+"PO-Revision-Date: 2024-10-19 18:46\n"
 
 msgid "OK"
 msgstr "OK"
@@ -25,13 +25,13 @@ msgid "Save"
 msgstr "Guardar"
 
 msgid "Please Confirm..."
-msgstr "Confirme, por favor..."
+msgstr "Confirma por favor..."
 
 msgid "File Name:"
 msgstr "Nombre del archivo:"
 
 msgid "Project Name:"
-msgstr "Nombre de proyecto:"
+msgstr "Nombre del proyecto:"
 
 msgid "Image Size"
 msgstr "Tamaño de la imagen"
@@ -40,7 +40,7 @@ msgid "Canvas Size"
 msgstr "Tamaño del lienzo"
 
 msgid "Frame Size"
-msgstr "Tamaño de los Fotogramas"
+msgstr "Tamaño de los fotogramas"
 
 msgid "Size:"
 msgstr "Tamaño:"
@@ -61,7 +61,7 @@ msgid "Edit"
 msgstr "Editar"
 
 msgid "Select"
-msgstr "Selecciona"
+msgstr "Seleccionar"
 
 msgid "View"
 msgstr "Ver"
@@ -95,13 +95,13 @@ msgstr "Guardar como..."
 
 #. Checkbox found in the Save project dialog. If enabled, the final blended images are being stored also in the pxo, for each frame.
 msgid "Include blended images"
-msgstr ""
+msgstr "Incluir imágenes mezcladas"
 
 #. Hint tooltip of the "Include blended images" checkbox found in the Save project dialog.
 msgid "If enabled, the final blended images are also being stored in the pxo, for each frame.\n"
 "This makes the pxo file larger and is useful for importing by third-party software\n"
 "or CLI exporting. Loading pxo files in Pixelorama does not need this option to be enabled."
-msgstr ""
+msgstr "Si está habilitado, las imágenes mezcladas finales también se almacenarán en el pxo, por cada fotograma. Esto hace que el archivo pxo sea más grande, y es útil para la importación mediante software de terceros o la exportación CLI. No es necesario que esta opción esté habilitada para cargar archivos pxo en Pixelorama."
 
 msgid "Import"
 msgstr "Importar"
@@ -149,14 +149,14 @@ msgid "Delete"
 msgstr "Borrar"
 
 msgid "Delete Permanently"
-msgstr ""
+msgstr "Eliminar permanentemente"
 
 #. Found when requesting to delete a palette or an extension. Refers to when you move something to recycle bin.
 msgid "Move to Trash"
 msgstr "Mover a la papelera"
 
 msgid "New Brush"
-msgstr "Nuevo Pincel"
+msgstr "Nuevo pincel"
 
 msgid "Scale Image"
 msgstr "Escalar imagen"
@@ -186,7 +186,7 @@ msgstr "Desplazamiento:"
 
 #. Found in the Offset Image dialog. It's a checkbox that, if enabled, wraps around the image if pixels go out of canvas bounds.
 msgid "Wrap around:"
-msgstr "Enrollar:"
+msgstr "Envolver alrededor:"
 
 #. Found in the menu that appears when you right click a frame button. Center is a verb, it is used to place the content of the frame to the center of the canvas.
 msgid "Center Frames"
@@ -196,10 +196,10 @@ msgid "Rotate Image"
 msgstr "Rotar Imagen"
 
 msgid "Pivot x:"
-msgstr "Eje X:"
+msgstr "Pivote x:"
 
 msgid "Pivot y:"
-msgstr "Eje Y:"
+msgstr "Pivote y:"
 
 msgid "Smear options:"
 msgstr "Opciones de Smear:"
@@ -217,58 +217,62 @@ msgid "Invert"
 msgstr "Invertir"
 
 msgid "Grayscale View"
-msgstr "Ver en Escala de Grises"
+msgstr "Ver en escala de grises"
 
 msgid "Mirror Image"
 msgstr "Voltear Imagen"
 
 msgid "Flip Horizontal"
-msgstr "Voltear Horizontalmente"
+msgstr "Voltear horizontalmente"
 
 msgid "Flip Vertical"
-msgstr "Voltear Verticalmente"
+msgstr "Voltear verticalmente"
 
 msgid "Preferences"
 msgstr "Preferencias"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr "Centrar el lienzo"
+
 msgid "Tile Mode"
-msgstr "Modo Mosaico"
+msgstr "Modo mosaico"
 
 msgid "Tile Mode Offsets"
-msgstr "Desplazamiento del Modo Casilla"
+msgstr "Desplazamiento del modo mosaico"
 
 msgid "X-basis x:"
-msgstr "X base x:"
+msgstr "X de la base X:"
 
 msgid "X-basis y:"
-msgstr "x base y:"
+msgstr "Y de la base X:"
 
 msgid "Y-basis x:"
-msgstr "Y base y:"
+msgstr "X de la base Y:"
 
 msgid "Y-basis y:"
-msgstr "Y base y:"
+msgstr "Y de la base Y:"
 
 msgid "Tile Mask"
-msgstr "Máscara de Casillas"
+msgstr "Máscara de mosaicos"
 
 msgid "Reset"
 msgstr "Reiniciar"
 
 msgid "Use Current Frame"
-msgstr "Utilizar Fotograma actual"
+msgstr "Utilizar fotograma actual"
 
 msgid "Reset Mask"
 msgstr "Restablecer máscara"
 
 msgid "Window Opacity"
-msgstr "Opacidad de Ventana"
+msgstr "Opacidad de ventana"
 
 msgid "Window opacity does not work on fullscreen mode."
 msgstr "La opacidad de la ventana no funciona en el modo pantalla completa."
 
 msgid "Panel Layout"
-msgstr "Diseño del Panel"
+msgstr "Diseño del panel"
 
 msgid "Panels"
 msgstr "Paneles"
@@ -277,10 +281,10 @@ msgid "Layouts"
 msgstr "Diseños"
 
 msgid "Moveable Panels"
-msgstr "Paneles Móviles"
+msgstr "Paneles móviles"
 
 msgid "Manage Layouts"
-msgstr "Gestionar Diseños"
+msgstr "Gestionar diseños"
 
 #. Noun, a preview of something
 msgid "Preview"
@@ -288,17 +292,17 @@ msgstr "Vista previa"
 
 #. Found in the manage layouts dialog
 msgid "This is a preview, changing this won't change the layout"
-msgstr "Esto es una vista previa, cambiar esto no cambiará la apariencia"
+msgstr "Esto es una vista previa, cambiar esto no cambiará el diseño"
 
 #. Found in the manage layouts dialog
 msgid "Double click to set as new startup layout"
-msgstr "Doble clic para establecer como nueva apariencia de inicio"
+msgstr "Doble clic para establecer como el nuevo diseño de inicio"
 
 msgid "Add"
 msgstr "Añadir"
 
 msgid "Add Layout"
-msgstr "Añadir Vista"
+msgstr "Añadir diseño"
 
 msgid "Copy from"
 msgstr "Copiar desde"
@@ -307,23 +311,23 @@ msgid "Rename"
 msgstr "Renombrar"
 
 msgid "Rename Layout"
-msgstr ""
+msgstr "Renombrar diseño"
 
 #. Refers to the current layout of the user interface.
 msgid "Current layout"
-msgstr ""
+msgstr "Diseño actual"
 
 msgid "Are you sure you want to delete this layout?"
-msgstr "¿Seguro que quieres eliminar esta vista?"
+msgstr "¿Estás seguro de que quieres eliminar este diseño?"
 
 msgid "Auto"
-msgstr "Auto"
+msgstr "Automático"
 
 msgid "Widescreen"
-msgstr "Widescreen"
+msgstr "Pantalla ancha"
 
 msgid "Tallscreen"
-msgstr "Tallscreen"
+msgstr "Pantalla alta"
 
 msgid "Mirror View"
 msgstr "Vista de espejo"
@@ -335,7 +339,7 @@ msgid "Show Pixel Grid"
 msgstr "Mostrar cuadrícula de píxeles"
 
 msgid "Show Rulers"
-msgstr "Mostrar Reglas"
+msgstr "Mostrar reglas"
 
 msgid "Show Guides"
 msgstr "Mostrar guías"
@@ -346,7 +350,7 @@ msgstr "Mostrar guías de ratón"
 
 #. Found under the View menu. When enabled, non-destructive layer effects will be visible on the canvas.
 msgid "Display Layer Effects"
-msgstr ""
+msgstr "Mostrar efectos de capa"
 
 #. Found under the View menu.
 msgid "Snap To"
@@ -354,11 +358,11 @@ msgstr "Ajustar a"
 
 #. Found under the View menu.
 msgid "Snap to Rectangular Grid Boundary"
-msgstr ""
+msgstr "Ajustar a límite de cuadrícula rectangular"
 
 #. Found under the View menu.
 msgid "Snap to Rectangular Grid Center"
-msgstr ""
+msgstr "Ajustar a centro de cuadrícula rectangular"
 
 #. Found under the View menu.
 msgid "Snap to Guides"
@@ -369,7 +373,7 @@ msgid "Snap to Perspective Guides"
 msgstr "Ajustar a las guías de perspectiva"
 
 msgid "Show Animation Timeline"
-msgstr "Mostrar timeline de animación"
+msgstr "Mostrar línea de tiempo de animación"
 
 msgid "Zen Mode"
 msgstr "Modo zen"
@@ -404,7 +408,7 @@ msgstr "Nuevo proyecto"
 
 #. Found in the preview image dialog, which appears when importing an image file.
 msgid "Spritesheet (new project)"
-msgstr "Hoja de Sprites (Nuevo Proyecto)"
+msgstr "Hoja de sprites (nuevo proyecto)"
 
 #. Found in the preview image dialog, which appears when importing an image file.
 msgid "Spritesheet (new layer)"
@@ -440,27 +444,27 @@ msgstr "Fotogramas verticales:"
 
 #. Found in the preview image dialog, which appears when importing an image file. This option appears when the image is being imported as a spritesheet. If it's enabled, the software will slice it into frames automatically.
 msgid "Smart Slice"
-msgstr ""
+msgstr "Rebanado inteligente"
 
 #. A value that is a threshold
 msgid "Threshold:"
-msgstr ""
+msgstr "Umbral:"
 
 #. Found in the preview image dialog, which appears when importing an image file. This option appears when the image is being imported as a spritesheet, if "smart slice" is enabled. Hint tooltip of the "Threshold" value slider.
 msgid "Images that have any one side smaller than this value will cross the threshold"
-msgstr ""
+msgstr "Las imágenes que tienen un lado menor que este valor superarán el umbral"
 
 #. Found in the preview image dialog, which appears when importing an image file. This option appears when the image is being imported as a spritesheet, if "smart slice" is enabled. Merge is an adjective, it refers to the distance where images get merged.
 msgid "Merge distance:"
-msgstr ""
+msgstr "Distancia de fusión:"
 
 #. Found in the preview image dialog, which appears when importing an image file. This option appears when the image is being imported as a spritesheet, if "smart slice" is enabled. Hint tooltip of the "Merge distance" value slider.
 msgid "Images which crossed the threshold will get merged into a larger image, if they are within this distance"
-msgstr ""
+msgstr "Las imágenes que hayan cruzado el umbral se fusionarán en una imagen más grande, si se encuentran dentro de esta distancia"
 
 #. A button that, when pressed, refreshes something. Used to apply certain settings again after they changed. Currently it's only used in the preview image dialog, which appears when importing an image file. This option appears when the image is being imported as a spritesheet, if "smart slice" is enabled.
 msgid "Refresh"
-msgstr ""
+msgstr "Actualizar"
 
 msgid "Start frame:"
 msgstr "Fotograma inicial:"
@@ -481,32 +485,32 @@ msgid "File brush"
 msgstr "Guardar como pincel"
 
 msgid "Project brush"
-msgstr "Proyecto pincel"
+msgstr "Pincel del proyecto"
 
 msgid "Random brush"
 msgstr "Pincel al azar"
 
 msgid "Save Sprite as .pxo"
-msgstr "Guardar Sprite como .pxo"
+msgstr "Guardar sprite como .pxo"
 
 msgid "Export Sprite as .png"
-msgstr "Exportar Sprite como .png"
+msgstr "Exportar sprite como .png"
 
 msgid "Export Sprite"
 msgstr "Exportar Sprite"
 
 msgid "File Exists, Overwrite?"
-msgstr "Archivo existente, ¿Sobrescribir?"
+msgstr "Si el archivo existe, ¿sobreescribirlo?"
 
 msgid "The following files already exist. Do you wish to overwrite them?\n"
 "%s"
 msgstr "Los siguientes archivos ya existen. ¿Deseas sobreescribirlos? %s"
 
 msgid "Directory path is not valid!"
-msgstr "¡Ruta de directorio no válida!"
+msgstr "¡La ruta del directorio no es válida!"
 
 msgid "File name is not valid!"
-msgstr "¡Nombre de archivo no válido!"
+msgstr "¡El nombre del archivo no es válido!"
 
 msgid "Directory path and file name are not valid!"
 msgstr "¡La ruta del directorio y el nombre de archivo no son válidos!"
@@ -557,6 +561,10 @@ msgstr "Explorar"
 msgid "Resize:"
 msgstr "Redimensionar:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr "Calidad:"
+
 msgid "Cancel Export"
 msgstr "Cancelar exportación"
 
@@ -625,93 +633,93 @@ msgstr "Filas:"
 
 #. Found in the export dialog, in the Spritesheet tab. An orientation option that splits the spritesheet by animation tags. Each tag creates a new column.
 msgid "Tags by column"
-msgstr ""
+msgstr "Etiquetas por columna"
 
 #. Found in the export dialog, in the Spritesheet tab. An orientation option that splits the spritesheet by animation tags. Each tag creates a new row.
 msgid "Tags by row"
-msgstr ""
+msgstr "Etiquetas por fila"
 
 #. Found in the export dialog. It is a label that says the dimensions (widthxheight) of the exported image(s).
 msgid "Export dimensions:"
 msgstr "Exportar dimensiones:"
 
 msgid "Save a File"
-msgstr ""
+msgstr "Guardar un archivo"
 
 msgid "Go to previous folder."
-msgstr ""
+msgstr "Ir a la carpeta anterior."
 
 msgid "Go to next folder."
-msgstr ""
+msgstr "Ir a la carpeta siguiente."
 
 msgid "Go to parent folder."
-msgstr ""
+msgstr "Ir a la carpeta superior."
 
 msgid "Path:"
 msgstr "Ruta:"
 
 msgid "Refresh files."
-msgstr ""
+msgstr "Actualizar archivos."
 
 msgid "Toggle the visibility of hidden files."
-msgstr ""
+msgstr "Alterna la visibilidad de los archivos ocultos."
 
 msgid "Directories & Files:"
-msgstr "Directorios y Archivos:"
+msgstr "Directorios y archivos:"
 
 msgid "Create Folder"
-msgstr "Crear Carpeta"
+msgstr "Crear carpeta"
 
 msgid "File:"
 msgstr "Archivo:"
 
 #. Found in "Open" and "Save" file dialogs. Searches all file types.
 msgid "All Files"
-msgstr ""
+msgstr "Todos los archivos"
 
 #. Found in the "Open" file dialog. Searches all file types supported by Pixelorama.
 msgid "All Recognized"
-msgstr ""
+msgstr "Todos los reconocidos"
 
 #. Found in "Open" and "Save" file dialogs. Searches Pixelorama Project files only (.pxo).
 msgid "Pixelorama Project"
-msgstr ""
+msgstr "Proyecto de Pixelorama"
 
 #. Found in the "Open" file dialog. Searches PNG files only. (Note that PNG is a file type and should remain untranslated)
 msgid "PNG Image"
-msgstr ""
+msgstr "Imagen PNG"
 
 #. Found in the "Open" file dialog. Searches BMP files only. (Note that BMP is a file type and should remain untranslated)
 msgid "BMP Image"
-msgstr ""
+msgstr "Imagen BMP"
 
 #. Found in the "Open" file dialog. Searches "Radiance HDR" files only. (Note that "Radiance HDR" is a file type and is better untranslated)
 msgid "Radiance HDR Image"
-msgstr ""
+msgstr "Imagen Radiance HDR"
 
 #. Found in the "Open" file dialog. Searches JPEG files only. (Note that JPEG is a file type and should remain untranslated)
 msgid "JPEG Image"
-msgstr ""
+msgstr "Imagen JPEG"
 
 #. Found in the "Open" file dialog. Searches SVG files only. (Note that SVG is a file type and should remain untranslated)
 msgid "SVG Image"
-msgstr ""
+msgstr "Imagen SVG"
 
 #. Found in the "Open" file dialog. Searches TGA files only. (Note that TGA is a file type and should remain untranslated)
 msgid "TGA Image"
-msgstr ""
+msgstr "Imagen TGA"
 
 #. Found in the "Open" file dialog. Searches WebP files only. (Note that WebP is a file type and should remain untranslated)
 msgid "WebP Image"
-msgstr ""
+msgstr "Imagen WebP"
 
 #. Found in the "Open" file dialog. Searches Pixelorama palette files only (.json).
 msgid "Pixelorama palette"
-msgstr ""
+msgstr "Paleta de Pixelorama"
 
 #. Found in the "Open" file dialog. Searches GIMP palette files only (.gpl). (Note that GIMP is a software and should remain untranslated)
 msgid "GIMP palette"
-msgstr ""
+msgstr "Paleta de GIMP"
 
 #. Found in the export dialog. It is a button that when pressed, shows more options.
 msgid "Advanced options"
@@ -737,11 +745,11 @@ msgstr "Constante"
 
 #. Refers to https://en.wikipedia.org/wiki/Color_space
 msgid "Color space:"
-msgstr ""
+msgstr "Espacio de color:"
 
 #. A type of color space.
 msgid "Linear sRGB"
-msgstr ""
+msgstr "SRGB lineal"
 
 msgid "General"
 msgstr "General"
@@ -810,11 +818,11 @@ msgstr "Añade una transición más suave cuando se acerca o aleja"
 
 #. Found in the preferences, under Canvas.
 msgid "Integer Zoom"
-msgstr ""
+msgstr "Zoom en enteros"
 
 #. Found in the preferences, under Canvas. Hint tooltip of "Integer Zoom".
 msgid "Restricts the value to be an integer multiple of 100%"
-msgstr ""
+msgstr "Restringe el valor para que sea un múltiplo entero de 100%"
 
 msgid "Tablet pressure sensitivity:"
 msgstr "Sensibilidad de la presión de la tableta:"
@@ -837,28 +845,32 @@ msgstr "Idioma del sistema"
 msgid "Display scale:"
 msgstr "Escala de la interfaz:"
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr "Fuente:"
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
-msgstr ""
+msgstr "Tamaño de la fuente:"
 
 msgid "Dim interface on dialog popup"
 msgstr "Atenuar interface al abrir ventana emergente"
 
 #. Found in the preferences, under the interface section. When this setting is enabled, the native file dialogs of the operating system are being used, instead of Pixelorama's custom ones.
 msgid "Use native file dialogs"
-msgstr ""
+msgstr "Utilizar diálogos de archivos nativos"
 
 #. Found in the preferences, tooltip of the "Use native file dialogs" option.
 msgid "When this setting is enabled, the native file dialogs of the operating system are being used, instead of Pixelorama's custom ones."
-msgstr ""
+msgstr "Cuando esta opción está activada, se utilizan los diálogos de archivos nativos del sistema operativo, en lugar de los personalizados de Pixelorama."
 
 #. Found in the preferences, under the interface section. When this setting is enabled, Pixelorama's subwindows will be embedded in the main window, otherwise each dialog will be its own separate window.
 msgid "Single window mode"
-msgstr ""
+msgstr "Modo de ventana única"
 
 #. Found in the preferences, tooltip of the "Single window mode" option.
 msgid "When this setting is enabled, Pixelorama's subwindows will be embedded in the main window, otherwise each dialog will be its own separate window."
-msgstr ""
+msgstr "Cuando esta opción está activada, las subventanas de Pixelorama serán embebidas en la ventana principal, de lo contrario cada diálogo será su propia ventana separada."
 
 msgid "Dark"
 msgstr "Oscuro"
@@ -870,7 +882,7 @@ msgid "Blue"
 msgstr "Azul"
 
 msgid "Caramel"
-msgstr "Caramel"
+msgstr "Caramelo"
 
 msgid "Light"
 msgstr "Claro"
@@ -880,7 +892,7 @@ msgstr "Morado"
 
 #. A theme. Rose refers to the color rose.
 msgid "Rose"
-msgstr ""
+msgstr "Rosa"
 
 msgid "Theme"
 msgstr "Tema"
@@ -903,6 +915,16 @@ msgstr "Color del fondo:"
 msgid "Background color:"
 msgstr "Color de fondo:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr "Sincronizar opciones entre las herramientas izquierda y derecha"
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr "Si está activado, se sincronizarán las opciones entre las herramientas izquierda y derecha.\n"
+"Por ejemplo, ambas herramientas compartirán el mismo tamaño de pincel, y cambiarlo en una herramienta lo cambiará instantáneamente en la otra."
+
 msgid "Left tool color:"
 msgstr "Color de la herramienta izquierda:"
 
@@ -937,40 +959,63 @@ msgid "All projects"
 msgstr "Todos los proyectos"
 
 msgid "Invert Colors"
-msgstr "Invertir Colores"
+msgstr "Invertir colores"
 
 msgid "Modify Red Channel"
-msgstr "Modificar Canal Rojo"
+msgstr "Modificar canal rojo"
 
 msgid "Modify Green Channel"
-msgstr "Modificar Canal Verde"
+msgstr "Modificar canal verde"
 
 msgid "Modify Blue Channel"
-msgstr "Modificar Canal Azul"
+msgstr "Modificar canal azul"
 
 msgid "Modify Alpha Channel"
-msgstr "Modificar Canal Alfa"
+msgstr "Modificar canal alfa"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Desaturación"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Silueta"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
-msgstr "Sombra Paralela"
+msgstr "Sombra paralela"
 
 msgid "Offset X:"
-msgstr "Desplazamiento X:"
+msgstr "Desplazamiento en X:"
 
 msgid "Offset Y:"
-msgstr "Desplazamiento Y:"
+msgstr "Desplazamiento en Y:"
 
 msgid "Shadow color:"
 msgstr "Color de la sombra:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr "Desenfoque gaussiano"
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr "Tipo de desenfoque:"
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr "Nivel de desenfoque:"
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr "Radio de desenfoque:"
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr "Dirección de desenfoque:"
+
 msgid "Gradient"
-msgstr "Gradiente"
+msgstr "Degradado"
 
 msgid "Gradient Map"
 msgstr "Mapa de degradado"
@@ -986,8 +1031,8 @@ msgstr "Añadir punto al final"
 
 msgid "If this is enabled, the last point gets added at the end of the gradient.\n"
 "Disable this if you wish to convert the gradient to have constant interpolation, so that the last color will be taken into account."
-msgstr "Si está activado, el último punto se añade al final del gradiente.\n"
-"Desactiva esto si deseas convertir el gradiente para tener interpolación constante, para que el último color sea tomado en cuenta."
+msgstr "Si está activado, el último punto se añade al final del degradado.\n"
+"Desactiva esto si deseas convertir el degradado para que tenga interpolación constante, de forma que el último color sea tomado en cuenta."
 
 msgid "Shape:"
 msgstr "Forma:"
@@ -1021,7 +1066,7 @@ msgid "Center:"
 msgstr "Centro:"
 
 msgid "Dithering pattern:"
-msgstr "Patrón del degradado:"
+msgstr "Patrón del tramado:"
 
 msgid "Type:"
 msgstr "Tipo:"
@@ -1029,7 +1074,7 @@ msgstr "Tipo:"
 msgid "Angle:"
 msgstr "Ángulo:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "Ajustar Matiz/Saturación/Valor"
 
@@ -1051,35 +1096,35 @@ msgstr "Valor:"
 
 #. An image effect. Adjusts the brightness and contrast of the colors of an image.
 msgid "Adjust Brightness/Contrast"
-msgstr ""
+msgstr "Ajustar brillo/contraste"
 
 #. Refers to the brightness of the colors of an image.
 msgid "Brightness:"
-msgstr ""
+msgstr "Brillo:"
 
 #. Refers to the contrast of the colors of an image.
 msgid "Contrast:"
-msgstr ""
+msgstr "Contraste:"
 
 #. Refers to the red value of the colors of an image.
 msgid "Red value:"
-msgstr ""
+msgstr "Valor rojo:"
 
 #. Refers to the green value of the colors of an image.
 msgid "Green value:"
-msgstr ""
+msgstr "Valor verde:"
 
 #. Refers to the blue value of the colors of an image.
 msgid "Blue value:"
-msgstr ""
+msgstr "Valor azul:"
 
 #. Refers to a color that tints an image.
 msgid "Tint color:"
-msgstr ""
+msgstr "Color de tinte:"
 
 #. Refers to the factor (how much) a color tints an image.
 msgid "Tint effect factor:"
-msgstr ""
+msgstr "Factor de efecto de tinte:"
 
 msgid "Apply"
 msgstr "Aplicar"
@@ -1099,13 +1144,13 @@ msgstr "Colores:"
 msgid "Steps:"
 msgstr "Pasos:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
-msgstr ""
+msgstr "Paletizar"
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
-msgstr ""
+msgstr "Pixelizar"
 
 #. An image effect. For more details about what it does, you can refer to GIMP's documentation https://docs.gimp.org/2.8/en/gimp-tool-posterize.html
 msgid "Posterize"
@@ -1130,7 +1175,7 @@ msgstr "Gestor de Problemas"
 
 #. Found under the Help menu. When selected, it opens the folder where the application's data are being saved.
 msgid "Open Editor Data Folder"
-msgstr ""
+msgstr "Abrir carpeta de datos del editor"
 
 msgid "Changelog"
 msgstr "Registro de cambios"
@@ -1140,7 +1185,7 @@ msgstr "Acerca de Pixelorama"
 
 #. Found under the Help menu. When clicked, it opens the URL of Orama Interactive's patreon page.
 msgid "Support Pixelorama's Development"
-msgstr ""
+msgstr "Apoya el desarrollo de Pixelorama"
 
 msgid "Pixelorama - Pixelate your dreams!"
 msgstr "Pixelorama - ¡Pixela tus sueños!"
@@ -1156,7 +1201,7 @@ msgstr "Sitio Web"
 
 #. Found in the About dialog. A button that, when you click it, it opens the URL of Pixelorama's source code.
 msgid "Source Code"
-msgstr ""
+msgstr "Código fuente"
 
 msgid "Donate"
 msgstr "Donar"
@@ -1268,7 +1313,7 @@ msgstr "Bielorruso"
 
 #. Found in the About dialog.
 msgid "Lead Developer"
-msgstr ""
+msgstr "Desarrollador principal"
 
 #. Found in the About dialog.
 msgid "UI Designer"
@@ -1276,7 +1321,7 @@ msgstr "Diseñador de IU"
 
 #. Found in the About dialog. Refers to the people who have contributed code to the project.
 msgid "Authors"
-msgstr ""
+msgstr "Autores"
 
 msgid "Art by: %s"
 msgstr "Arte por: %s"
@@ -1303,7 +1348,7 @@ msgid "Save before exiting?"
 msgstr "¿Guardar antes de salir?"
 
 msgid "Project %s has unsaved progress. How do you wish to proceed?"
-msgstr ""
+msgstr "El proyecto %s tiene progreso sin guardar. ¿Cómo deseas proceder?"
 
 msgid "Save & Exit"
 msgstr "Guardar y salir"
@@ -1314,16 +1359,16 @@ msgstr "Salir sin guardar"
 msgid "Rectangular Selection\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
-msgstr "Cubo de pintura\n\n"
-"%s para el botón izquierdo del mouse\n"
-"%s para el botón derecho del mouse"
+msgstr "Selección rectangular\n\n"
+"%s para el botón izquierdo del ratón\n"
+"%s para el botón derecho del ratón"
 
 msgid "Elliptical Selection\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
-msgstr "Cubo de pintura\n\n"
-"%s para el botón izquierdo del mouse\n"
-"%s para el botón derecho del mouse"
+msgstr "Selección elíptica\n\n"
+"%s para el botón izquierdo del ratón\n"
+"%s para el botón derecho del ratón"
 
 msgid "Polygonal Selection\n\n"
 "%s for left mouse button\n"
@@ -1332,54 +1377,56 @@ msgid "Polygonal Selection\n\n"
 msgstr "Selección poligonal\n\n"
 "%s para el botón izquierdo del ratón\n"
 "%s para el botón derecho del ratón\n\n"
-"Haga doble clic para conectar el último punto al punto inicial"
+"Haz doble clic para conectar el último punto al punto inicial"
 
 msgid "Select By Color\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
-msgstr "Seleccionar Por Color\n\n"
-"%s para el botón izquierdo del mouse\n"
-"%s para el botón derecho del mouse"
+msgstr "Seleccionar por color\n\n"
+"%s para el botón izquierdo del ratón\n"
+"%s para el botón derecho del ratón"
 
 msgid "Magic Wand\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
 msgstr "Varita mágica\n\n"
-"%s para el botón izquierdo del mouse\n"
-"%s para el botón derecho del mouse"
+"%s para el botón izquierdo del ratón\n"
+"%s para el botón derecho del ratón"
 
 msgid "Lasso / Free Select Tool\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
 msgstr "Lazo / Herramienta de Selección Libre\n\n"
-"%s para el botón izquierdo del mouse\n"
-"%s para el botón derecho del mouse"
+"%s para el botón izquierdo del ratón\n"
+"%s para el botón derecho del ratón"
 
 msgid "Select by Drawing\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
-msgstr ""
+msgstr "Seleccionar por dibujo\n\n"
+"%s para el botón izquierdo del ratón\n"
+"%s para el botón derecho del ratón"
 
 msgid "Move\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
 msgstr "Mover\n\n"
-"%s para el botón izquierdo del mouse\n"
-"%s para el botón derecho del mouse"
+"%s para el botón izquierdo del ratón\n"
+"%s para el botón derecho del ratón"
 
 msgid "Zoom\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
 msgstr "Zoom\n\n"
-"%s para el botón izquierdo del mouse\n"
-"%s para el botón derecho del mouse"
+"%s para el botón izquierdo del ratón\n"
+"%s para el botón derecho del ratón"
 
 msgid "Pan\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
 msgstr "Vista\n\n"
-"%s para el botón izquierdo del mouse\n"
-"%s para el botón derecho del mouse"
+"%s para el botón izquierdo del ratón\n"
+"%s para el botón derecho del ratón"
 
 msgid "Color Picker\n\n"
 "%s for left mouse button\n"
@@ -1392,15 +1439,15 @@ msgstr "Selector de Color\n\n"
 
 msgid "Crop\n\n"
 "Resize the canvas"
-msgstr ""
+msgstr "Recortar y redimensionar el lienzo"
 
 msgid "Pencil\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button\n\n"
 "Hold %s to make a line"
 msgstr "Lápiz\n\n"
-"%s para el botón izquierdo del mouse\n"
-"%s para el botón derecho del mouse\n\n"
+"%s para el botón izquierdo del ratón\n"
+"%s para el botón derecho del ratón\n\n"
 "Mantén pulsado %s para crear una línea"
 
 msgid "Eraser\n\n"
@@ -1408,23 +1455,23 @@ msgid "Eraser\n\n"
 "%s for right mouse button\n\n"
 "Hold %s to make a line"
 msgstr "Borrador\n\n"
-"%s para el botón izquierdo del mouse\n"
-"%s para el botón derecho del mouse\n\n"
+"%s para el botón izquierdo del ratón\n"
+"%s para el botón derecho del ratón\n\n"
 "Mantén pulsado %s para crear una línea"
 
 msgid "Bucket\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
 msgstr "Cubo de pintura\n\n"
-"%s para el botón izquierdo del mouse\n"
-"%s para el botón derecho del mouse"
+"%s para botón izquierdo del ratón\n"
+"%s para botón derecho del ratón"
 
 msgid "Shading Tool\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
 msgstr "Herramienta de Sombreado\n\n"
-"%s para el botón izquierdo del mouse\n"
-"%s para el botón derecho del mouse"
+"%s para el botón izquierdo del ratón\n"
+"%s para el botón derecho del ratón"
 
 msgid "Line Tool\n\n"
 "%s for left mouse button\n"
@@ -1433,9 +1480,9 @@ msgid "Line Tool\n\n"
 "Hold %s to center the shape on the click origin\n"
 "Hold %s to displace the shape's origin"
 msgstr "Herramienta de Línea\n\n"
-"%s para el botón izquierdo del mouse\n"
-"%s para el botón derecho del mouse\n\n"
-"Mantén %s para ajustar el ángulo de la línea\n"
+"%s para el botón izquierdo del ratón\n"
+"%s para el botón derecho del ratón\n\n"
+"Mantenga %s para ajustar el ángulo de la línea\n"
 "Mantén %s para centrar la forma en el origen del clic\n"
 "Mantén %s para desplazar el origen de la forma"
 
@@ -1446,7 +1493,13 @@ msgid "Curve Tool\n\n"
 "Press %s/%s to add new points\n"
 "Press and drag to control the curvature\n"
 "Press %s to remove the last added point"
-msgstr ""
+msgstr "Herramienta de Curva\n\n"
+"%s para el botón izquierdo del ratón\n"
+"%s para el botón derecho del ratón\n\n"
+"Dibuja curvas de bezier\n"
+"Presiona %s/%s para añadir nuevos puntos\n"
+"Presiona y arrastra para controlar la curvatura\n"
+"Presiona %s para eliminar el último punto añadido"
 
 msgid "Rectangle Tool\n\n"
 "%s for left mouse button\n"
@@ -1455,8 +1508,8 @@ msgid "Rectangle Tool\n\n"
 "Hold %s to center the shape on the click origin\n"
 "Hold %s to displace the shape's origin"
 msgstr "Herramienta Rectángulo\n\n"
-"%s para el botón izquierdo del mouse\n"
-"%s para el botón derecho del mouse\n\n"
+"%s para el botón izquierdo del ratón\n"
+"%s para el botón derecho del ratón\n\n"
 "Mantén %s para crear una forma 1:1\n"
 "Mantén %s para centrar la forma en el origen del clic\n"
 "Mantén %s para desplazar el origen de la forma"
@@ -1468,8 +1521,8 @@ msgid "Ellipse Tool\n\n"
 "Hold %s to center the shape on the click origin\n"
 "Hold %s to displace the shape's origin"
 msgstr "Herramienta Elipse\n\n"
-"%s para el botón izquierdo del mouse\n"
-"%s para el botón derecho del mouse\n\n"
+"%s para el botón izquierdo del ratón\n"
+"%s para el botón derecho del ratón\n\n"
 "Mantén %s para crear una forma 1:1\n"
 "Mantén %s para centrar la forma en el origen del clic\n"
 "Mantén %s para desplazar el origen de la forma"
@@ -1488,46 +1541,46 @@ msgstr "Elegir un color para la herramienta derecha"
 
 #. Tooltip of the switch colors button found in the color picker panel.
 msgid "Switch left and right colors."
-msgstr ""
+msgstr "Cambia los colores izquierdo y derecho."
 
 #. Tooltip of the average color button, found in the color picker panel. Shows the average color between the two selected.
 msgid "Average Color:"
-msgstr ""
+msgstr "Color promedio:"
 
 msgid "Reset the colors to their default state (black for left, white for right)"
 msgstr "Restablecer los colores a su estado predeterminado (negro a la izquierda, blanco a la derecha)"
 
 #. Tooltip of the screen color picker button found in the color picker panel.
 msgid "Pick a color from the screen."
-msgstr ""
+msgstr "Elige un color de la pantalla."
 
 #. Tooltip of the color text field found in the color picker panel that lets users change the color by hex code or english name ("red" cannot be translated).
 msgid "Enter a hex code (\"#ff0000\") or named color (\"red\")."
-msgstr ""
+msgstr "Introduce un código hexadecimal (\"#ff0000\") o nombre de color en inglés (\"red\")."
 
 #. Tooltip of the button found in the color picker panel that lets users change the shape of the color picker.
 msgid "Select a picker shape."
-msgstr ""
+msgstr "Selecciona una forma de selector."
 
 #. Refers to color-related options such as sliders that set color channel values like R, G, B and A.
 msgid "Color options"
-msgstr ""
+msgstr "Opciones de color"
 
 #. Tooltip of the button with three dots found under color options in the color picker panel that lets users change the mode of the color picker/sliders.
 msgid "Select a picker mode."
-msgstr ""
+msgstr "Selecciona un modo de selector."
 
 #. Checkbox found in the menu of the button with three dots found under color options in the color picker panel.
 msgid "Colorized Sliders"
-msgstr ""
+msgstr "Controles deslizantes colorizados"
 
 #. Shows saved colors in certain color picker menus.
 msgid "Swatches"
-msgstr ""
+msgstr "Muestras"
 
 #. Found under color options in the color picker panel.
 msgid "Recent Colors"
-msgstr ""
+msgstr "Colores recientes"
 
 msgid "Left tool"
 msgstr "Herramienta izquierda"
@@ -1576,15 +1629,15 @@ msgstr "Un color de las guías de reglas que se muestran en el lienzo"
 
 #. Found in the Preferences, in the Canvas tab. Refers to grid and guide snapping.
 msgid "Snapping"
-msgstr "Ajustar"
+msgstr "Ajuste"
 
 #. Found in the Preferences, in the Canvas tab. Refers to grid and guide snapping.
 msgid "Snapping distance:"
-msgstr "Ajustar distancia:"
+msgstr "Distancia de ajuste:"
 
 #. Found in the Preferences, in the Canvas tab. Refers to grid and guide snapping. Hint tooltip of the snapping distance slider.
 msgid "This is the distance in screen pixels where guide and grid snapping gets activated."
-msgstr ""
+msgstr "Esta es la distancia en píxeles de la pantalla en la que se activa el ajuste de guía y cuadrícula."
 
 msgid "Grid"
 msgstr "Cuadrícula"
@@ -1710,6 +1763,10 @@ msgstr "Establecer el límite de FPS de la aplicación:"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "Establece el límite de fotogramas por segundo de la aplicación. Cuanto menor sea el número, menor será el uso de la CPU, pero la aplicación se vuelve más lenta, entrecortada y sin respuesta. 0 significa que no hay límite."
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr "Deshaceres máximos:"
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "Pausar la aplicación cuando pierde el enfoque"
@@ -1720,19 +1777,19 @@ msgstr "Si se activa esta opción, cuando la ventana de la aplicación pierde el
 
 #. An option found in the preferences, under the Performance section. Refers to the screen being updated (redrawn) continuously.
 msgid "Update continuously"
-msgstr ""
+msgstr "Actualizar continuamente"
 
 #. Found in the preferences, hint of the "Update continuously" option.
 msgid "If this is toggled on, the application will redraw the screen continuously, even while it's not used. Turning this off helps lower CPU and GPU usage when idle."
-msgstr ""
+msgstr "Si se activa esta opción, la aplicación volverá a dibujar la pantalla continuamente, aunque no se utilice. Apagar esto ayuda a reducir el uso de CPU y GPU cuando está inactiva."
 
 #. An option found in the preferences, under the Performance section.
 msgid "Enable window transparency"
-msgstr ""
+msgstr "Habilitar transparencia de ventana"
 
 #. Found in the preferences, hint of the "Enable window transparency" option.
 msgid "If enabled, the application window can become transparent. This affects performance, so keep it off if you don't need it."
-msgstr ""
+msgstr "Si está activado, la ventana de la aplicación puede ser transparente. Esto afecta al rendimiento, así que mantenlo apagado si no lo necesitas."
 
 #. Found in the Preferences, under Drivers. Specifies the renderer/video driver being used.
 msgid "Renderer:"
@@ -1768,15 +1825,15 @@ msgstr "Abrir Carpeta"
 
 #. Found in the Preferences, under Extensions. It is a button that, when clicked, opens up the extension explorer which allows users to download extensions from the Internet.
 msgid "Explore Online"
-msgstr ""
+msgstr "Explorar en línea"
 
 #. Found in the Preferences, under Extensions. This is the text of a confirmation dialog that appears when the user attempts to enable an extension.
 msgid "Are you sure you want to enable this extension? Make sure to only enable extensions from sources that you trust."
-msgstr ""
+msgstr "¿Estás seguro de que deseas activar esta extensión? Asegúrate de activar sólo las extensiones de las fuentes en las que confíes."
 
 #. Found in the Preferences, under Extensions. This is the text of a confirmation dialog that appears when the user attempts to delete an extension.
 msgid "Are you sure you want to delete this extension?"
-msgstr ""
+msgstr "¿Estás seguro de que deseas eliminar esta extensión?"
 
 #. Hint tooltip of a button in the Global Tool Settings. "Dynamics" let users affect certain brush parameters, such as their size and alpha, based on the pressure of the tablet pen, the velocity of the mouse or the pen, and more in the future.
 msgid "Dynamics"
@@ -1784,7 +1841,7 @@ msgstr "Dinámicas"
 
 #. Found in the Dynamics options menu. A stabilizer is a feature that, when enabled, helps artists create smooth lines as they draw.
 msgid "Stabilizer"
-msgstr ""
+msgstr "Estabilizador"
 
 #. Found in the Dynamics options menu. Pressure refers to tablet pen pressure.
 msgid "Pressure"
@@ -1854,7 +1911,7 @@ msgstr "Pixel Perfect hace que las líneas sean suaves eliminando los píxeles s
 
 #. A button found in the global tool options. When enabled, the alpha value of the pixels being drawn is locked, meaning that the user can only draw on non-transparent pixels.
 msgid "Lock alpha"
-msgstr ""
+msgstr "Bloquear alfa"
 
 msgid "Fill inside"
 msgstr "Rellenar el interior"
@@ -1950,7 +2007,7 @@ msgid "Zoom out"
 msgstr "Alejar"
 
 msgid "Options"
-msgstr ""
+msgstr "Opciones"
 
 msgid "Options:"
 msgstr "Opciones:"
@@ -1986,11 +2043,19 @@ msgstr "Horizontal"
 msgid "Enable horizontal mirrored drawing"
 msgstr "Activar dibujo de espejo horizontal"
 
+msgid "Vertical"
+msgstr "Vertical"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Activar dibujo de espejo vertical"
 
-msgid "Vertical"
-msgstr "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr "Mover al centro del lienzo"
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr "Mover al centro de la vista"
 
 msgid "Current frame:"
 msgstr "Fotograma actual:"
@@ -2002,25 +2067,25 @@ msgid "Current frame as spritesheet"
 msgstr "Fotograma actual como hoja de sprites"
 
 msgid "Jump to the first frame"
-msgstr ""
+msgstr "Saltar al primer fotograma"
 
 msgid "Go to the previous frame"
-msgstr ""
+msgstr "Ir al fotograma anterior"
 
-msgid "Play the animation backwards (from end to beginning)"
-msgstr ""
+msgid "Play the animation backwards"
+msgstr "Reproducir la animación hacia atrás"
 
-msgid "Play the animation forward (from beginning to end)"
-msgstr ""
+msgid "Play the animation forward"
+msgstr "Reproducir la animación hacia adelante"
 
 msgid "Go to the next frame"
-msgstr ""
+msgstr "Ir al fotograma siguiente"
 
 msgid "Jump to the last frame"
-msgstr ""
+msgstr "Saltar al último fotograma"
 
 msgid "Timeline settings"
-msgstr ""
+msgstr "Configuración de la línea de tiempo"
 
 msgid "Enable/disable Onion Skinning"
 msgstr "Activar/desactivar Piel de Cebolla"
@@ -2077,12 +2142,12 @@ msgstr "Etiqueta %s (Fotogramas %s-%s)"
 
 msgid "If it's selected, the animation plays only on the frames that have the same tag.\n"
 "If it's not, the animation will play for all frames, ignoring tags."
-msgstr "Si se selecciona, la animación se reproduce sólo en los marcos que tienen la misma etiqueta.\n"
-"Si no es así, la animación se reproducirá para todos los marcos, ignorando etiquetas."
+msgstr "Si se selecciona, la animación se reproduce sólo en los fotogramas que tienen la misma etiqueta.\n"
+"Si no es así, la animación se reproducirá para todos los fotogramas, ignorando las etiquetas."
 
 #. Found in the timeline, inside the timeline settings. It's a slider that sets the size of the cel buttons in the timeline.
 msgid "Cel size:"
-msgstr ""
+msgstr "Tamaño de celda:"
 
 #. Found in the timeline, inside the timeline settings. If this is enabled, the past and future frames will have appear tinted.
 msgid "Color mode"
@@ -2128,30 +2193,30 @@ msgid "Unlink Cels"
 msgstr "Desvincular celdas"
 
 msgid "Properties"
-msgstr ""
+msgstr "Propiedades"
 
 msgid "Project Properties"
-msgstr ""
+msgstr "Propiedades del proyecto"
 
 msgid "Frame properties"
 msgstr "Propiedades de los fotogramas"
 
 msgid "Layer properties"
-msgstr ""
+msgstr "Propiedades de la capa"
 
 msgid "Cel properties"
-msgstr ""
+msgstr "Propiedades de la celda"
 
 msgid "Tag properties"
-msgstr ""
+msgstr "Propiedades de etiqueta"
 
 #. Found on the popup menu that appears when a user right-clicks on a frame button. When clicked, a new frame tag is added.
 msgid "New Tag"
-msgstr ""
+msgstr "Nueva etiqueta"
 
 #. Found on the popup menu that appears when a user right-clicks on a frame button. When clicked, it allows users to paste/import tags from other opened projects.
 msgid "Import Tag"
-msgstr ""
+msgstr "Importar etiqueta"
 
 #. Found on the popup menu that appears when a user right-clicks on a frame button. When clicked, the order of the selected frames is being reversed.
 msgid "Reverse Frames"
@@ -2168,7 +2233,7 @@ msgstr "Capas"
 
 #. Found in the layer menu which appears when right clicking on a layer button in the timeline. When enabled, the layer becomes a clipping mask.
 msgid "Clipping mask"
-msgstr ""
+msgstr "Máscara de recorte"
 
 #. Hint tooltip of the create new layer button, found on the left side of the timeline.
 msgid "Create a new layer"
@@ -2203,87 +2268,91 @@ msgstr "Combinar la capa actual con la de abajo"
 
 #. Found in the layer's section of the timeline. Refers to layer blend modes, for more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Blend mode:"
-msgstr ""
+msgstr "Modo de fusión:"
+
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr "Pasar a través"
 
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
-msgstr ""
+msgstr "Normal"
 
 #. Found in the layer's section of the timeline, as a blend mode option. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Multiply"
-msgstr ""
+msgstr "Multiplicar"
 
 # .Found in the layer's section of the timeline, as a blend mode option. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Color burn"
-msgstr ""
+msgstr "Subexposición de color"
 
 #. Found in the layer's section of the timeline, as a blend mode option. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Linear burn"
-msgstr ""
+msgstr "Subexposición lineal"
 
 #. Found in the layer's section of the timeline, as a blend mode option. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Screen"
-msgstr ""
+msgstr "Pantalla"
 
 #. Found in the layer's section of the timeline, as a blend mode option. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Color dodge"
-msgstr ""
+msgstr "Sobreexposición de color"
 
 #. Found in the layer's section of the timeline, as category of blend modes. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Contrast"
-msgstr ""
+msgstr "Contraste"
 
 #. Found in the layer's section of the timeline, as a blend mode option. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Overlay"
-msgstr ""
+msgstr "Superposición"
 
 #. Found in the layer's section of the timeline, as a blend mode option. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Soft light"
-msgstr ""
+msgstr "Luz suave"
 
 #. Found in the layer's section of the timeline, as a blend mode option. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Hard light"
-msgstr ""
+msgstr "Luz dura"
 
 #. Found in the layer's section of the timeline, as a category of blend modes. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Inversion"
-msgstr ""
+msgstr "Inversión"
 
 #. Found in the layer's section of the timeline, as a blend mode option. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Difference"
-msgstr ""
+msgstr "Diferencia"
 
 #. Found in the layer's section of the timeline, as a blend mode option. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Exclusion"
-msgstr ""
+msgstr "Exclusión"
 
 #. Found in the layer's section of the timeline, as a blend mode option. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Subtract"
-msgstr ""
+msgstr "Sustraer"
 
 #. Found in the layer's section of the timeline, as a blend mode option. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Divide"
-msgstr ""
+msgstr "Dividir"
 
 #. Found in the layer's section of the timeline, as a category of blend modes. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Component"
-msgstr ""
+msgstr "Componente"
 
 #. Found in the layer's section of the timeline, as a blend mode option. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Hue"
-msgstr ""
+msgstr "Matiz"
 
 #. Found in the layer's section of the timeline, as a blend mode option. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Saturation"
-msgstr ""
+msgstr "Saturación"
 
 #. Found in the layer's section of the timeline, as a blend mode option. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Color"
-msgstr ""
+msgstr "Color"
 
 #. Found in the layer's section of the timeline, as a blend mode option. For more info refer to: https://en.wikipedia.org/wiki/Blend_modes
 msgid "Luminosity"
-msgstr ""
+msgstr "Luminosidad"
 
 msgid "Opacity:"
 msgstr "Opacidad:"
@@ -2424,7 +2493,7 @@ msgstr "No se pudo guardar el archivo. Código de error %s"
 
 #. Appears when the user attempts to export a project as a video, but the process fails. FFMPEG is the external software used to export videos.
 msgid "Video failed to export. Ensure that FFMPEG is installed correctly."
-msgstr ""
+msgstr "No se pudo exportar el vídeo. Asegúrate de que FFMPEG está instalado correctamente."
 
 msgid "File(s) exported"
 msgstr "Archivo(s) exportado(s)"
@@ -2510,6 +2579,26 @@ msgstr "Color de relleno predeterminado:"
 msgid "A default background color of a new image"
 msgstr "Un color de fondo predeterminado de una nueva imagen"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr "Reestablecer todas las opciones disponibles en Preferencias"
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr "Reestablecer opciones de línea de tiempo"
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr "Reestablecer todas las opciones de herramienta"
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr "Eliminar todas las extensiones"
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr "Limpiar la lista de archivos abiertos recientemente"
+
 msgid "Lock aspect ratio"
 msgstr "Bloquear relación de aspecto"
 
@@ -2580,7 +2669,7 @@ msgid "Line Tool"
 msgstr "Herramienta de Línea"
 
 msgid "Curve Tool"
-msgstr ""
+msgstr "Herramienta de curva"
 
 msgid "Rectangle Tool"
 msgstr "Herramienta de Rectángulo"
@@ -2638,7 +2727,7 @@ msgstr "Confirmación de salida"
 
 #. Found in the preferences, under the startup section. Path is a noun and it refers to the location in the device where FFMPEG is located at. FFMPEG is a software name and it should not be translated. See https://en.wikipedia.org/wiki/Path_(computing)
 msgid "FFMPEG path"
-msgstr ""
+msgstr "Ruta de FFMPEG"
 
 msgid "Enable autosave"
 msgstr "Activar guardado automático"
@@ -2651,11 +2740,11 @@ msgstr "minuto(s)"
 
 #. A setting found in the export dialog. When enabled, a JSON file containing the project's data is also being exported. JSON refers to this https://en.wikipedia.org/wiki/JSON
 msgid "Export JSON data"
-msgstr ""
+msgstr "Exportar datos JSON"
 
 #. A setting found in the export dialog. When enabled, each layer is being exported as a different file, or as different frames if the target format is gif/apng/video.
 msgid "Split layers"
-msgstr ""
+msgstr "Dividir capas"
 
 #. Found in the export dialog.
 msgid "Include frame tags in the file name"
@@ -2677,6 +2766,22 @@ msgstr "Separar carácter(es):"
 msgid "The character(s) that separate the file name and the frame number"
 msgstr "El(los) carácter(es) que separan Él nombre del archivo y Él número de fotograma"
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr "Recortar imágenes"
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr "Recorta las imágenes exportadas a su porción visible, considerando cada píxel con un canal de alfa diferente a cero como visible."
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr "Recortar contenido de la imagen a la selección"
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr "Solo exportar contenido que está dentro de los los límites de un área seleccionada."
+
 msgid "Close"
 msgstr "Cerrar"
 
@@ -2707,18 +2812,18 @@ msgid "and"
 msgstr "y"
 
 msgid "Move the selected frame to the left."
-msgstr "Mueve el marco seleccionado hacia la izquierda."
+msgstr "Mueve el fotograma seleccionado hacia la izquierda."
 
 msgid "Move the selected frame to the right."
-msgstr "Mueve el marco seleccionado hacia la derecha."
+msgstr "Mueve el fotograma seleccionado hacia la derecha."
 
 #. Refers to the duration of the frame. Found in the frame properties.
 msgid "Frame duration:"
-msgstr ""
+msgstr "Duración de los fotogramas:"
 
 #. Refers to custom user defined data for projects, frames, cels, tags and layers, found in their respective properties.
 msgid "User data:"
-msgstr ""
+msgstr "Datos del usuario:"
 
 msgid "Duration"
 msgstr "Duración"
@@ -2758,39 +2863,39 @@ msgstr "Eliminar un color seleccionado"
 
 #. Tooltip of the Sort button found in the palette panel.
 msgid "Sort palette"
-msgstr ""
+msgstr "Ordenar paleta"
 
 #. An option of the Sort palette button found in the palette panel. When selected, the colors of the palette get reversed.
 msgid "Reverse colors"
-msgstr ""
+msgstr "Invertir colores"
 
 #. An option of the Sort palette button found in the palette panel. When selected, the colors of the palette are being sorted based on their hue.
 msgid "Sort by hue"
-msgstr ""
+msgstr "Ordenar por matiz"
 
 #. An option of the Sort palette button found in the palette panel. When selected, the colors of the palette are being sorted based on their saturation.
 msgid "Sort by saturation"
-msgstr ""
+msgstr "Ordenar por saturación"
 
 #. An option of the Sort palette button found in the palette panel. When selected, the colors of the palette are being sorted based on their value.
 msgid "Sort by value"
-msgstr ""
+msgstr "Ordenar por valor"
 
 #. An option of the Sort palette button found in the palette panel. When selected, the colors of the palette are being sorted based on their red channel value.
 msgid "Sort by red"
-msgstr ""
+msgstr "Ordenar por rojo"
 
 #. An option of the Sort palette button found in the palette panel. When selected, the colors of the palette are being sorted based on their green channel value.
 msgid "Sort by green"
-msgstr ""
+msgstr "Ordenar por verde"
 
 #. An option of the Sort palette button found in the palette panel. When selected, the colors of the palette are being sorted based on their blue channel value.
 msgid "Sort by blue"
-msgstr ""
+msgstr "Ordenar por azul"
 
 #. An option of the Sort palette button found in the palette panel. When selected, the colors of the palette are being sorted based on their alpha channel value.
 msgid "Sort by alpha"
-msgstr ""
+msgstr "Ordenar por alfa"
 
 msgid "Palette with the same name and path already exists!"
 msgstr "¡Ya existe una paleta con el mismo nombre y ruta!"
@@ -2800,7 +2905,8 @@ msgstr "¡El nombre de la paleta es requerido!"
 
 msgid "Reducing palette size will reset positions of colors.\n"
 "Colors that don't fit in new palette size will be lost!"
-msgstr ""
+msgstr "Reducir el tamaño de la paleta restablecerá las posiciones de los colores. \n"
+"¡Los colores que no quepan en el tamaño de la nueva paleta se perderán!"
 
 msgid "Position:"
 msgstr "Posición:"
@@ -3022,6 +3128,10 @@ msgstr "Radio inferior:"
 msgid "Text:"
 msgstr "Texto:"
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr "Profundidad:"
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr "Tamaño del píxel:"
@@ -3033,12 +3143,19 @@ msgstr "Nivel de curva:"
 msgid "Horizontal alignment:"
 msgstr "Alineación horizontal:"
 
+msgid "Vertical alignment:"
+msgstr "Alineación vertical:"
+
 msgid "Left"
 msgstr "Izquierda"
 
 msgid "Right"
 msgstr "Derecha"
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr "Interlineado:"
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr "Energía:"
@@ -3136,102 +3253,103 @@ msgstr "Sincronizar al final"
 
 #. Found under certain image effects that support properties that can be animated. A type of interpolation.
 msgid "Spring towards the end"
-msgstr ""
+msgstr "Movimiento súbito en el final"
 
 #. Used to turn images into a singular color
 msgid "Monochrome"
-msgstr ""
+msgstr "Monocromático"
 
 #. Found in the Reference Images panel when no reference image has been imported.
 msgid "When opening an image, it may be imported as a reference."
-msgstr ""
+msgstr "Al abrir una imagen, se puede importar como una referencia."
 
 #. Found in the Reference Images panel after a reference image has been imported.
 msgid "Select an image below to change its properties.\n"
 "Note that you cannot draw while a reference image is selected."
-msgstr ""
+msgstr "Selecciona una imagen a continuación para cambiar sus propiedades.\n"
+"Ten en cuenta que no puedes dibujar mientras una imagen de referencia está seleccionada."
 
 #. Removes the selected reference image.
 msgid "Remove"
-msgstr ""
+msgstr "Eliminar"
 
 #. A tooltip to tell users to hold the Shift key while clicking the remove button
 msgid "Hold Shift while pressing to instantly remove."
-msgstr ""
+msgstr "Mantén pulsado Shift mientras presionas para eliminar al instante."
 
 #. Shown in the confirmation dialog for removing a reference image.
 msgid "Are you sure you want to remove this reference image? It will not be deleted from your file system."
-msgstr ""
+msgstr "¿Estás seguro de que deseas eliminar esta imagen de referencia? No será eliminada de tu sistema de archivos."
 
 #. Moves the reference image up in the list
 msgid "Move the selected reference image to the right"
-msgstr ""
+msgstr "Mover la imagen de referencia seleccionada a la derecha"
 
 #. Moves the reference image down in the list
 msgid "Move the selected reference image to the left"
-msgstr ""
+msgstr "Mover la imagen de referencia seleccionada a la izquierda"
 
 #. Select a reference on the canvas
 msgid "Selects a reference image on the canvas"
-msgstr ""
+msgstr "Selecciona una imagen de referencia en el lienzo"
 
 #. Moves the reference on the canvas
 msgid "Move the selected reference image"
-msgstr ""
+msgstr "Mover la imagen de referencia seleccionada"
 
 #. Rotates the reference on the canvas
 msgid "Rotate the selected reference image"
-msgstr ""
+msgstr "Rotar la imagen de referencia seleccionada"
 
 #. Rotates the reference on the canvas
 msgid "Scale the selected reference image"
-msgstr ""
+msgstr "Escalar la imagen de referencia seleccionada"
 
 #. Button to select no reference images in the Reference Images panel.
 msgid "none"
-msgstr ""
+msgstr "ninguna"
 
 #. Resets the Transform of the selected reference image on the canvas.
 msgid "Reset Transform"
-msgstr ""
+msgstr "Reestablecer transformación"
 
 #. Position of the selected reference image on the canvas.
 msgid "Position"
-msgstr ""
+msgstr "Posición"
 
 #. Scale of the selected reference image on the canvas.
 msgid "Scale"
-msgstr ""
+msgstr "Escala"
 
 #. Rotation of the selected reference image on the canvas.
 msgid "Rotation"
-msgstr ""
+msgstr "Rotación"
 
 #. Toggle filter of the selected reference image on the canvas.
 msgid "Filter"
-msgstr ""
+msgstr "Filtro"
 
 #. Opacity of the selected reference image on the canvas.
 msgid "Opacity"
-msgstr ""
+msgstr "Opacidad"
 
 #. Color clamping of the selected reference image on the canvas.
 msgid "Color Clamping"
-msgstr ""
+msgstr "Compresión de colores"
 
 #. Used in checkbuttons (like on/off switches) that enable/disable something.
 msgid "Enabled"
-msgstr ""
+msgstr "Habilitado"
 
 #. Refers to non-destructive effects (such as outline, drop shadow etc) that are applied to layers. Found in the title of the layer effects dialog.
 msgid "Layer effects"
-msgstr ""
+msgstr "Efectos de la capa"
 
 #. A button that, when pressed, shows a list of effects to add. Found in the the layer effects dialog.
 msgid "Add effect"
-msgstr ""
+msgstr "Añadir efecto"
 
 #. Text from a confirmation dialog that appears when the user is attempting to drag and drop an image directly from the browser into Pixelorama.
 msgid "Do you want to download the image from %s?"
-msgstr ""
+msgstr "¿Deseas descargar la imagen desde %s?"
 
diff --git a/Translations/et_EE.po b/Translations/et_EE.po
index ca1f121f4..6bd1f01fe 100644
--- a/Translations/et_EE.po
+++ b/Translations/et_EE.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Estonian\n"
 "Language: et_EE\n"
-"PO-Revision-Date: 2024-08-03 00:15\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/fi_FI.po b/Translations/fi_FI.po
index e095a69a5..f22d8ce7d 100644
--- a/Translations/fi_FI.po
+++ b/Translations/fi_FI.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Finnish\n"
 "Language: fi_FI\n"
-"PO-Revision-Date: 2024-08-01 22:06\n"
+"PO-Revision-Date: 2024-10-17 14:10\n"
 
 msgid "OK"
 msgstr "OK"
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/fil_PH.po b/Translations/fil_PH.po
index 3ae4bdb98..6b926d30c 100644
--- a/Translations/fil_PH.po
+++ b/Translations/fil_PH.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Filipino\n"
 "Language: fil_PH\n"
-"PO-Revision-Date: 2024-08-03 00:15\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/fr_FR.po b/Translations/fr_FR.po
index f50c22d86..d67fc09c7 100644
--- a/Translations/fr_FR.po
+++ b/Translations/fr_FR.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: French\n"
 "Language: fr_FR\n"
-"PO-Revision-Date: 2024-08-01 22:06\n"
+"PO-Revision-Date: 2024-10-24 18:36\n"
 
 msgid "OK"
 msgstr "OK"
@@ -101,7 +101,8 @@ msgstr "Inclure les images fusionnées"
 msgid "If enabled, the final blended images are also being stored in the pxo, for each frame.\n"
 "This makes the pxo file larger and is useful for importing by third-party software\n"
 "or CLI exporting. Loading pxo files in Pixelorama does not need this option to be enabled."
-msgstr ""
+msgstr "Si activée, les rendus finals mélangés sont aussi stockés dans le pxo, pour chaque Frame.\n"
+"Cela rend le fichier pxo plus volumineux et est utile pour les importations par un logiciel tiers ou les exportations en ligne de commande. Le chargement de fichiers pxo dans Pixelorama ne nécessite pas que cette option soit activée."
 
 msgid "Import"
 msgstr "Importer"
@@ -179,7 +180,7 @@ msgid "Resize Canvas"
 msgstr "Redimensionner le canevas"
 
 msgid "Offset Image"
-msgstr ""
+msgstr "Décalage de l'image"
 
 msgid "Offset:"
 msgstr "Décalage :"
@@ -231,6 +232,10 @@ msgstr "Miroir vertical"
 msgid "Preferences"
 msgstr "Préférences"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr "Centrer le Canevas"
+
 msgid "Tile Mode"
 msgstr "Mode tuile"
 
@@ -452,7 +457,7 @@ msgstr ""
 
 #. Found in the preview image dialog, which appears when importing an image file. This option appears when the image is being imported as a spritesheet, if "smart slice" is enabled. Merge is an adjective, it refers to the distance where images get merged.
 msgid "Merge distance:"
-msgstr ""
+msgstr "Distance de fusion :"
 
 #. Found in the preview image dialog, which appears when importing an image file. This option appears when the image is being imported as a spritesheet, if "smart slice" is enabled. Hint tooltip of the "Merge distance" value slider.
 msgid "Images which crossed the threshold will get merged into a larger image, if they are within this distance"
@@ -558,6 +563,10 @@ msgstr "Parcourir"
 msgid "Resize:"
 msgstr "Redimensionner :"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr "Qualité :"
+
 msgid "Cancel Export"
 msgstr "Annuler l'exportation"
 
@@ -637,25 +646,25 @@ msgid "Export dimensions:"
 msgstr "Dimensions d'export :"
 
 msgid "Save a File"
-msgstr ""
+msgstr "Enregistrer un fichier"
 
 msgid "Go to previous folder."
-msgstr ""
+msgstr "Aller au dossier précédent."
 
 msgid "Go to next folder."
-msgstr ""
+msgstr "Aller au dossier suivant."
 
 msgid "Go to parent folder."
-msgstr ""
+msgstr "Aller au dossier parent."
 
 msgid "Path:"
 msgstr "Chemin :"
 
 msgid "Refresh files."
-msgstr ""
+msgstr "Rafraîchir les fichiers."
 
 msgid "Toggle the visibility of hidden files."
-msgstr ""
+msgstr "Activer/désactiver la visibilité des fichiers cachés."
 
 msgid "Directories & Files:"
 msgstr "Répertoires et fichiers :"
@@ -838,6 +847,10 @@ msgstr "Langue système"
 msgid "Display scale:"
 msgstr "Taille d'Affichage:"
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr "Police:"
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr "Taille de police :"
@@ -904,6 +917,15 @@ msgstr "Couleur d'arrière-plan à partir de :"
 msgid "Background color:"
 msgstr "Couleur d'arrière-plan :"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr "Couleur de l'outil gauche:"
 
@@ -952,12 +974,15 @@ msgstr "Modifier le Canal Bleu"
 msgid "Modify Alpha Channel"
 msgstr "Modifier le Canal Alpha"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Désaturation"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Contour"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "Ombre portée"
 
@@ -970,6 +995,26 @@ msgstr "Décalage Y :"
 msgid "Shadow color:"
 msgstr "Couleur d'ombre :"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr "Flou gaussien"
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr "Type de flou :"
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr "Taux de flou :"
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr "Rayon du flou :"
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr "Direction du flou :"
+
 msgid "Gradient"
 msgstr "Dégradé"
 
@@ -1030,7 +1075,7 @@ msgstr "Type:"
 msgid "Angle:"
 msgstr "Angle :"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "Ajuster la Teinte/Saturation/Valeur"
 
@@ -1052,7 +1097,7 @@ msgstr "Valeur :"
 
 #. An image effect. Adjusts the brightness and contrast of the colors of an image.
 msgid "Adjust Brightness/Contrast"
-msgstr ""
+msgstr "Ajuster la luminosité / le contraste"
 
 #. Refers to the brightness of the colors of an image.
 msgid "Brightness:"
@@ -1064,23 +1109,23 @@ msgstr "Contraste :"
 
 #. Refers to the red value of the colors of an image.
 msgid "Red value:"
-msgstr ""
+msgstr "Valeur rouge :"
 
 #. Refers to the green value of the colors of an image.
 msgid "Green value:"
-msgstr ""
+msgstr "Valeur verte :"
 
 #. Refers to the blue value of the colors of an image.
 msgid "Blue value:"
-msgstr ""
+msgstr "Valeur bleue :"
 
 #. Refers to a color that tints an image.
 msgid "Tint color:"
-msgstr ""
+msgstr "Couleur de teinte :"
 
 #. Refers to the factor (how much) a color tints an image.
 msgid "Tint effect factor:"
-msgstr ""
+msgstr "Facteur d'effet de teinte :"
 
 msgid "Apply"
 msgstr "Appliquer"
@@ -1100,11 +1145,11 @@ msgstr "Couleurs:"
 msgid "Steps:"
 msgstr "Étapes:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr "Pixeliser"
 
@@ -1131,7 +1176,7 @@ msgstr "Suivi des problèmes"
 
 #. Found under the Help menu. When selected, it opens the folder where the application's data are being saved.
 msgid "Open Editor Data Folder"
-msgstr ""
+msgstr "Ouvrir le dossier des données de l'éditeur"
 
 msgid "Changelog"
 msgstr "Journal des modifications"
@@ -1393,7 +1438,8 @@ msgstr "Pipette\n\n"
 
 msgid "Crop\n\n"
 "Resize the canvas"
-msgstr ""
+msgstr "Rogner\n\n"
+"Redimensionner le canevas"
 
 msgid "Pencil\n\n"
 "%s for left mouse button\n"
@@ -1493,7 +1539,7 @@ msgstr "Inverser les couleurs de gauche et droite."
 
 #. Tooltip of the average color button, found in the color picker panel. Shows the average color between the two selected.
 msgid "Average Color:"
-msgstr ""
+msgstr "Couleur moyenne :"
 
 msgid "Reset the colors to their default state (black for left, white for right)"
 msgstr "Réinitialise les couleurs à leur état initial (noir pour l'outil gauche, blanc pour l'outil droit)"
@@ -1504,7 +1550,7 @@ msgstr "Récupérer une couleur sur l'écran."
 
 #. Tooltip of the color text field found in the color picker panel that lets users change the color by hex code or english name ("red" cannot be translated).
 msgid "Enter a hex code (\"#ff0000\") or named color (\"red\")."
-msgstr ""
+msgstr "Entrer le code hexadécimal (\"#ff0000\") ou le nom de la couleur (\"rouge\")."
 
 #. Tooltip of the button found in the color picker panel that lets users change the shape of the color picker.
 msgid "Select a picker shape."
@@ -1512,11 +1558,11 @@ msgstr "Sélectionner une forme de Pipette."
 
 #. Refers to color-related options such as sliders that set color channel values like R, G, B and A.
 msgid "Color options"
-msgstr ""
+msgstr "Options de couleur"
 
 #. Tooltip of the button with three dots found under color options in the color picker panel that lets users change the mode of the color picker/sliders.
 msgid "Select a picker mode."
-msgstr ""
+msgstr "Sélectionnez un mode de pipette."
 
 #. Checkbox found in the menu of the button with three dots found under color options in the color picker panel.
 msgid "Colorized Sliders"
@@ -1528,7 +1574,7 @@ msgstr ""
 
 #. Found under color options in the color picker panel.
 msgid "Recent Colors"
-msgstr ""
+msgstr "Couleurs récentes"
 
 msgid "Left tool"
 msgstr "Outil gauche"
@@ -1711,6 +1757,10 @@ msgstr "Définir la limite FPS de l'application :"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "Définit la limite d'images par seconde de l'application. Plus le nombre est bas, plus l'utilisation du processeur est faible, mais l'application devient plus lente, saccadée et non réactive. 0 signifie qu'il n'y a pas de limite."
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr "Étapes max d'annulation :"
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "Met l'application en pause quand elle perd le focus"
@@ -1721,11 +1771,11 @@ msgstr "Si activé, l'application est mise en pause quand le focus est perdu. Ce
 
 #. An option found in the preferences, under the Performance section. Refers to the screen being updated (redrawn) continuously.
 msgid "Update continuously"
-msgstr ""
+msgstr "Mettre à jour en continu"
 
 #. Found in the preferences, hint of the "Update continuously" option.
 msgid "If this is toggled on, the application will redraw the screen continuously, even while it's not used. Turning this off helps lower CPU and GPU usage when idle."
-msgstr ""
+msgstr "Si cette option est activée, l'application redessine l'écran en permanence, même si elle n'est pas utilisée. Désactiver cette option permet de réduire l'utilisation du processeur et du GPU en cas d'inactivité."
 
 #. An option found in the preferences, under the Performance section.
 msgid "Enable window transparency"
@@ -1769,7 +1819,7 @@ msgstr "Ouvrir le dossier"
 
 #. Found in the Preferences, under Extensions. It is a button that, when clicked, opens up the extension explorer which allows users to download extensions from the Internet.
 msgid "Explore Online"
-msgstr ""
+msgstr "Explorer en ligne"
 
 #. Found in the Preferences, under Extensions. This is the text of a confirmation dialog that appears when the user attempts to enable an extension.
 msgid "Are you sure you want to enable this extension? Make sure to only enable extensions from sources that you trust."
@@ -1856,7 +1906,7 @@ msgstr "Pixel Perfect\n"
 
 #. A button found in the global tool options. When enabled, the alpha value of the pixels being drawn is locked, meaning that the user can only draw on non-transparent pixels.
 msgid "Lock alpha"
-msgstr ""
+msgstr "Verrouiller l'alpha"
 
 msgid "Fill inside"
 msgstr "Remplir à l’intérieur"
@@ -1988,11 +2038,19 @@ msgstr "Horizontal"
 msgid "Enable horizontal mirrored drawing"
 msgstr "Dessine avec un miroir horizontal"
 
+msgid "Vertical"
+msgstr "Vertical"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Dessine avec un miroir vertical"
 
-msgid "Vertical"
-msgstr "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr "Déplacer vers le centre du canevas"
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "Frame actuelle :"
@@ -2004,22 +2062,22 @@ msgid "Current frame as spritesheet"
 msgstr "Frame actuelle en spritesheet"
 
 msgid "Jump to the first frame"
-msgstr ""
+msgstr "Aller à la première image"
 
 msgid "Go to the previous frame"
-msgstr ""
+msgstr "Aller à l'image précédente"
 
-msgid "Play the animation backwards (from end to beginning)"
-msgstr ""
+msgid "Play the animation backwards"
+msgstr "Jouer l'animation à l'envers"
 
-msgid "Play the animation forward (from beginning to end)"
-msgstr ""
+msgid "Play the animation forward"
+msgstr "Jouer l'animation à l'endroit"
 
 msgid "Go to the next frame"
-msgstr ""
+msgstr "Aller à l'image suivante"
 
 msgid "Jump to the last frame"
-msgstr ""
+msgstr "Aller à la dernière frame"
 
 msgid "Timeline settings"
 msgstr ""
@@ -2084,7 +2142,7 @@ msgstr "Si sélectionné, l'animation ne joue que sur les frames partageant le m
 
 #. Found in the timeline, inside the timeline settings. It's a slider that sets the size of the cel buttons in the timeline.
 msgid "Cel size:"
-msgstr ""
+msgstr "Taille de la cellule :"
 
 #. Found in the timeline, inside the timeline settings. If this is enabled, the past and future frames will have appear tinted.
 msgid "Color mode"
@@ -2207,6 +2265,10 @@ msgstr "Fusionner le calque vers le bas"
 msgid "Blend mode:"
 msgstr "Mode de fusion :"
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr "Passer à travers"
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr "Normal"
@@ -2512,6 +2574,26 @@ msgstr "Couleur de remplissage par défaut:"
 msgid "A default background color of a new image"
 msgstr "Une couleur de fond par défaut d'une nouvelle image"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr "Enlever toutes les extensions"
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr "Verrouiller les proportions"
 
@@ -2679,6 +2761,22 @@ msgstr "Caractère(s) de séparation :"
 msgid "The character(s) that separate the file name and the frame number"
 msgstr "Le ou les caractères qui séparent le nom du fichier et le numéro de frame"
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "Fermer"
 
@@ -3025,6 +3123,10 @@ msgstr "Rayon inférieur :"
 msgid "Text:"
 msgstr "Texte :"
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr "Profondeur:"
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr "Taille des Pixels:"
@@ -3036,12 +3138,19 @@ msgstr "Étape de Courbe:"
 msgid "Horizontal alignment:"
 msgstr "Alignement horizontal :"
 
+msgid "Vertical alignment:"
+msgstr "Alignement vertical:"
+
 msgid "Left"
 msgstr "Gauche"
 
 msgid "Right"
 msgstr "Droite"
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr "Interligne:"
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr "Énergie :"
@@ -3160,11 +3269,11 @@ msgstr "Supprimer"
 
 #. A tooltip to tell users to hold the Shift key while clicking the remove button
 msgid "Hold Shift while pressing to instantly remove."
-msgstr ""
+msgstr "Maintenez Maj enfoncé tout en appuyant pour supprimer instantanément."
 
 #. Shown in the confirmation dialog for removing a reference image.
 msgid "Are you sure you want to remove this reference image? It will not be deleted from your file system."
-msgstr ""
+msgstr "Êtes-vous sûr de vouloir supprimer cette image de référence ? Elle ne sera pas supprimée de vos fichiers locaux."
 
 #. Moves the reference image up in the list
 msgid "Move the selected reference image to the right"
@@ -3192,7 +3301,7 @@ msgstr "Redimensionner l'image de référence sélectionnée"
 
 #. Button to select no reference images in the Reference Images panel.
 msgid "none"
-msgstr ""
+msgstr "aucun"
 
 #. Resets the Transform of the selected reference image on the canvas.
 msgid "Reset Transform"
diff --git a/Translations/ga_IE.po b/Translations/ga_IE.po
index 4a26db08c..dafdaee40 100644
--- a/Translations/ga_IE.po
+++ b/Translations/ga_IE.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Irish\n"
 "Language: ga_IE\n"
-"PO-Revision-Date: 2024-08-03 00:15\n"
+"PO-Revision-Date: 2024-10-17 14:10\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/grc.po b/Translations/grc.po
index b7658a0a2..19f15aca5 100644
--- a/Translations/grc.po
+++ b/Translations/grc.po
@@ -10,22 +10,22 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Ancient Greek\n"
 "Language: grc\n"
-"PO-Revision-Date: 2024-08-03 01:18\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
-msgstr ""
+msgstr "Ἐντάξει"
 
 msgid "Cancel"
-msgstr ""
+msgstr "Ἀκύρωσον"
 
 msgid "Open"
-msgstr ""
+msgstr "Ἀνοῖξον"
 
 msgid "Save"
 msgstr ""
 
 msgid "Please Confirm..."
-msgstr ""
+msgstr "Παρακαλῶ ἐπιβεβαίωσον..."
 
 msgid "File Name:"
 msgstr ""
@@ -43,7 +43,7 @@ msgid "Frame Size"
 msgstr ""
 
 msgid "Size:"
-msgstr ""
+msgstr "Μέγεθος:"
 
 msgid "Width:"
 msgstr ""
@@ -55,7 +55,7 @@ msgid "Center"
 msgstr ""
 
 msgid "File"
-msgstr ""
+msgstr "Ἀρχείον"
 
 msgid "Edit"
 msgstr ""
@@ -64,13 +64,13 @@ msgid "Select"
 msgstr ""
 
 msgid "View"
-msgstr ""
+msgstr "Ἰδεῖν"
 
 msgid "Window"
-msgstr ""
+msgstr "Παράθυρον"
 
 msgid "Image"
-msgstr ""
+msgstr "Εἰκών"
 
 msgid "Effects"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/he_IL.po b/Translations/he_IL.po
index 6fb2bfbb2..6712b003c 100644
--- a/Translations/he_IL.po
+++ b/Translations/he_IL.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Hebrew\n"
 "Language: he_IL\n"
-"PO-Revision-Date: 2024-08-01 22:06\n"
+"PO-Revision-Date: 2024-10-17 14:10\n"
 
 msgid "OK"
 msgstr "אישור"
@@ -231,6 +231,10 @@ msgstr "הפוך אנכית"
 msgid "Preferences"
 msgstr "העדפות"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "מצב אריח"
 
@@ -556,6 +560,10 @@ msgstr "עיון"
 msgid "Resize:"
 msgstr "שינוי גודל:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr "ביטול ייצוא"
 
@@ -836,6 +844,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -902,6 +914,15 @@ msgstr "צבע רקע מ:"
 msgid "Background color:"
 msgstr "צבע רקע:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr "צבע כלי שמאלי:"
 
@@ -950,12 +971,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "קו מתאר"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "הצללה"
 
@@ -968,6 +992,26 @@ msgstr "היסט Y:"
 msgid "Shadow color:"
 msgstr "צבע צל:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1027,7 +1071,7 @@ msgstr "סוג:"
 msgid "Angle:"
 msgstr "זווית:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1097,11 +1141,11 @@ msgstr "צבעים:"
 msgid "Steps:"
 msgstr "צעדים:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1665,6 +1709,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1941,11 +1989,19 @@ msgstr "אופקי"
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr "אנכי"
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
-msgstr "אנכי"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "פריים נוכחי:"
@@ -1962,10 +2018,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2159,6 +2215,10 @@ msgstr "איחוד השכבה הנוכחית עם השכבה מתחת"
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2463,6 +2523,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2630,6 +2710,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2972,6 +3068,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2983,12 +3083,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/hi_IN.po b/Translations/hi_IN.po
index 7eb47278e..e597d46bd 100644
--- a/Translations/hi_IN.po
+++ b/Translations/hi_IN.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Hindi\n"
 "Language: hi_IN\n"
-"PO-Revision-Date: 2024-08-01 22:07\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "ठीक है"
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/hr_HR.po b/Translations/hr_HR.po
index c0f1e2a9d..f310d09fc 100644
--- a/Translations/hr_HR.po
+++ b/Translations/hr_HR.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Croatian\n"
 "Language: hr_HR\n"
-"PO-Revision-Date: 2024-08-03 00:15\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/hu_HU.po b/Translations/hu_HU.po
index 2d5e34cc3..115423159 100644
--- a/Translations/hu_HU.po
+++ b/Translations/hu_HU.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Hungarian\n"
 "Language: hu_HU\n"
-"PO-Revision-Date: 2024-08-01 22:06\n"
+"PO-Revision-Date: 2024-10-17 14:10\n"
 
 msgid "OK"
 msgstr "Ok"
@@ -231,6 +231,10 @@ msgstr "Függőleges tükrözés"
 msgid "Preferences"
 msgstr "Beállítások"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "Csempe mód"
 
@@ -556,6 +560,10 @@ msgstr "Tallózás"
 msgid "Resize:"
 msgstr "Átméretezés:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr "Exportálás megszakítása"
 
@@ -836,6 +844,10 @@ msgstr "Rendszer nyelv"
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -902,6 +914,15 @@ msgstr ""
 msgid "Background color:"
 msgstr "Háttér színe:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -950,12 +971,15 @@ msgstr "A kék csatorna módosítása"
 msgid "Modify Alpha Channel"
 msgstr "A alfa csatorna módosítása"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Kifakítás"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Körvonal"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -968,6 +992,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr "Színátmenet"
 
@@ -1027,7 +1071,7 @@ msgstr "Típus:"
 msgid "Angle:"
 msgstr "Szög:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "Színárnyalat/Telítettség/Érték beállítása"
 
@@ -1097,11 +1141,11 @@ msgstr "Színek:"
 msgid "Steps:"
 msgstr "Lépések:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1671,6 +1715,10 @@ msgstr "Applikáció FPS limitjének beállítása:"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1947,11 +1995,19 @@ msgstr "Vízszintes"
 msgid "Enable horizontal mirrored drawing"
 msgstr "Vízszintesen tükrözött rajzolás engedélyezése"
 
+msgid "Vertical"
+msgstr "Függőleges"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Függőlegesen tükrözött rajzolás engedélyezése"
 
-msgid "Vertical"
-msgstr "Függőleges"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "Jelenlegi képkocka:"
@@ -1968,10 +2024,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2166,6 +2222,10 @@ msgstr "Aktuális réteg egyesítése az alatta lévővel"
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2470,6 +2530,26 @@ msgstr "Alapértelmezett kitöltő szín:"
 msgid "A default background color of a new image"
 msgstr "Alapértelmezett háttérszíne az új képnek"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr "Méretarány lezárása"
 
@@ -2637,6 +2717,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "Bezárás"
 
@@ -2979,6 +3075,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2990,12 +3090,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/id_ID.po b/Translations/id_ID.po
index 96cf95923..847e5b216 100644
--- a/Translations/id_ID.po
+++ b/Translations/id_ID.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Indonesian\n"
 "Language: id_ID\n"
-"PO-Revision-Date: 2024-08-05 03:40\n"
+"PO-Revision-Date: 2024-10-18 20:11\n"
 
 msgid "OK"
 msgstr "Oke"
@@ -101,9 +101,9 @@ msgstr "Sertakan gambar tercampur"
 msgid "If enabled, the final blended images are also being stored in the pxo, for each frame.\n"
 "This makes the pxo file larger and is useful for importing by third-party software\n"
 "or CLI exporting. Loading pxo files in Pixelorama does not need this option to be enabled."
-msgstr "Jika diaktifkan, bentuk akhir gambar tercampur akan disimpan jadi pxo, ke tiap bingkai.\n"
+msgstr "Jika diaktifkan, bentuk akhir gambar tercampur disimpan menjadi pxo, ke tiap bingkai.\n"
 "Berkas pxo akan lebih besar dan mampu diimpor dengan peranti lunak pihak ketiga\n"
-"atau diekspor CLI. Memuat pxo di Pixelorama tidak perlu mengaktifkan opsi ini."
+"atau diekspor CLI. Membuka pxo di Pixelorama tidak perlu mengaktifkan opsi ini."
 
 msgid "Import"
 msgstr "Impor"
@@ -171,11 +171,11 @@ msgstr "Persentase"
 
 #. Found in the image menu. Sets the size of the project to be the same as the size of the active selection.
 msgid "Crop to Selection"
-msgstr "Pangkas ke Seleksi"
+msgstr "Potong ke Seleksi"
 
 #. Found in the image menu. Automatically trims out all the transparent pixels, making the image smaller.
 msgid "Crop to Content"
-msgstr "Pangkas ke Isi"
+msgstr "Potong ke Isi"
 
 msgid "Resize Canvas"
 msgstr "Ubah Ukuran Kanvas"
@@ -213,7 +213,7 @@ msgid "Initial angle:"
 msgstr "Sudut inisial:"
 
 msgid "Clear"
-msgstr "Lepas"
+msgstr "Kosongkan"
 
 msgid "Invert"
 msgstr "Terbalikkan"
@@ -233,6 +233,10 @@ msgstr "Dibalik Menegak"
 msgid "Preferences"
 msgstr "Preferensi"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr "Tengahkan Kanvas"
+
 msgid "Tile Mode"
 msgstr "Mode Petak"
 
@@ -294,7 +298,7 @@ msgstr "Ini pratayang, mengubah ini tidak akan mengubah tata letak"
 
 #. Found in the manage layouts dialog
 msgid "Double click to set as new startup layout"
-msgstr "Klik dua kali agar jadi tata letak baru di awal buka"
+msgstr "Klik 2x agar menjadi tata letak baru di awal buka"
 
 msgid "Add"
 msgstr "Tambah"
@@ -458,7 +462,7 @@ msgstr "Jarak peleburan:"
 
 #. Found in the preview image dialog, which appears when importing an image file. This option appears when the image is being imported as a spritesheet, if "smart slice" is enabled. Hint tooltip of the "Merge distance" value slider.
 msgid "Images which crossed the threshold will get merged into a larger image, if they are within this distance"
-msgstr "Gambar yang melewati ambang batas akan dileburkan jadi gambar lebih besar, jika masih dalam jarak ini"
+msgstr "Gambar yang melewati ambang batas akan dileburkan menjadi gambar lebih besar, jika masih sejarak ini"
 
 #. A button that, when pressed, refreshes something. Used to apply certain settings again after they changed. Currently it's only used in the preview image dialog, which appears when importing an image file. This option appears when the image is being imported as a spritesheet, if "smart slice" is enabled.
 msgid "Refresh"
@@ -560,6 +564,10 @@ msgstr "Telusur"
 msgid "Resize:"
 msgstr "Ubah ukuran:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr "Mutu:"
+
 msgid "Cancel Export"
 msgstr "Batalkan Ekspor"
 
@@ -817,7 +825,7 @@ msgstr "Keker Integer"
 
 #. Found in the preferences, under Canvas. Hint tooltip of "Integer Zoom".
 msgid "Restricts the value to be an integer multiple of 100%"
-msgstr "Membatasi nilai jadi kelipatan bilangan bulat 100%"
+msgstr "Membatasi nilai ke kelipatan bilangan bulat 100%"
 
 msgid "Tablet pressure sensitivity:"
 msgstr "Kepekaan tekanan tablet:"
@@ -840,6 +848,10 @@ msgstr "Bahasa Sistem"
 msgid "Display scale:"
 msgstr "Skala tampilan:"
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr "Font:"
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr "Ukuran font:"
@@ -906,6 +918,16 @@ msgstr "Warna latar belakang dari:"
 msgid "Background color:"
 msgstr "Warna latar belakang:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr "Berbagi opsi antara alat di kiri dan di kanan"
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr "Jika ini diaktifkan, opsi alat di kiri dan di kanan akan disinkronkan.\n"
+"Contoh, ada dua alat berbagi ukuran kuas, jika mengubah opsi di salah satu alat maka yang satunya juga berubah."
+
 msgid "Left tool color:"
 msgstr "Warna alat di kiri:"
 
@@ -954,12 +976,15 @@ msgstr "Ubah Saluran Biru"
 msgid "Modify Alpha Channel"
 msgstr "Ubah Saluran Alfa"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Desaturasi"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Garis luar"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "Bayangan Jatuh"
 
@@ -972,6 +997,26 @@ msgstr "Offset Y:"
 msgid "Shadow color:"
 msgstr "Warna bayangan:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr "Buram Gauss"
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr "Tipe buram:"
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr "Jumlah buram:"
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr "Jari-jari buram:"
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr "Arah buram:"
+
 msgid "Gradient"
 msgstr "Gradien"
 
@@ -979,7 +1024,7 @@ msgid "Gradient Map"
 msgstr "Peta Gradien"
 
 msgid "Divide into equal parts"
-msgstr "Bagi jadi sama rata"
+msgstr "Bagi menjadi sama rata"
 
 msgid "Parts:"
 msgstr "Bagian:"
@@ -1032,7 +1077,7 @@ msgstr "Tipe:"
 msgid "Angle:"
 msgstr "Sudut:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "Sesuaikan Rona/Saturasi/Nilai"
 
@@ -1100,13 +1145,13 @@ msgid "Colors:"
 msgstr "Warna:"
 
 msgid "Steps:"
-msgstr "Langkah:"
+msgstr "Step:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr "Paletkan"
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr "Pikselkan"
 
@@ -1335,7 +1380,7 @@ msgid "Polygonal Selection\n\n"
 msgstr "Seleksi Poligon\n\n"
 "%s untuk tetikus kiri\n"
 "%s untuk tetikus kanan\n\n"
-"Pencet dua kali untuk menghubungkan titik akhir ke titik awal"
+"Klik dua kali untuk menghubungkan titik akhir ke titik awal"
 
 msgid "Select By Color\n\n"
 "%s for left mouse button\n"
@@ -1397,7 +1442,7 @@ msgstr "Pemilih Warna\n\n"
 
 msgid "Crop\n\n"
 "Resize the canvas"
-msgstr "Pangkas\n\n"
+msgstr "Potong\n\n"
 "Ubah besar kanvas"
 
 msgid "Pencil\n\n"
@@ -1458,7 +1503,7 @@ msgstr "Garis Lengkung\n\n"
 "Menggaris lengkung Bezier\n"
 "Tekan %s/%s untuk menambah titik\n"
 "Tekan dan seret untuk melengkungkan\n"
-"Tekan %s untuk melepas titik tadi"
+"Tekan %s untuk menghapus titik tadi"
 
 msgid "Rectangle Tool\n\n"
 "%s for left mouse button\n"
@@ -1722,6 +1767,10 @@ msgstr "Batas FPS aplikasi:"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "Menetapkan batas laju bingkai tiap detik pada aplikasi. Semakin rendah angkanya, penggunaan CPU juga berkurang; tapi aplikasi akan lambat, patah-patah dan kurang tanggap. 0 berarti tidak ada batas."
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr "Maks. urung step:"
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "Jedakan aplikasi saat hilang fokus"
@@ -1999,11 +2048,19 @@ msgstr "Mendatar"
 msgid "Enable horizontal mirrored drawing"
 msgstr "Aktifkan gambar dicerminkan mendatar"
 
+msgid "Vertical"
+msgstr "Menegak"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Aktifkan gambar dicerminkan menegak"
 
-msgid "Vertical"
-msgstr "Menegak"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr "Ke tengah kanvas"
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr "Ke tengah tampilan"
 
 msgid "Current frame:"
 msgstr "Bingkai saat ini:"
@@ -2020,11 +2077,11 @@ msgstr "Lompat ke bingkai pertama"
 msgid "Go to the previous frame"
 msgstr "Ke bingkai sebelumnya"
 
-msgid "Play the animation backwards (from end to beginning)"
-msgstr "Putar animasi secara mundur (dari akhir sampai awal)"
+msgid "Play the animation backwards"
+msgstr "Putar mundur animasi"
 
-msgid "Play the animation forward (from beginning to end)"
-msgstr "Putar animasi secara normal (dari awal sampai akhir)"
+msgid "Play the animation forward"
+msgstr "Putar maju animasi"
 
 msgid "Go to the next frame"
 msgstr "Ke bingkai selanjutnya"
@@ -2181,7 +2238,7 @@ msgstr "Lapisan"
 
 #. Found in the layer menu which appears when right clicking on a layer button in the timeline. When enabled, the layer becomes a clipping mask.
 msgid "Clipping mask"
-msgstr "Cuplikkan mask"
+msgstr "Cuplik mask"
 
 #. Hint tooltip of the create new layer button, found on the left side of the timeline.
 msgid "Create a new layer"
@@ -2218,6 +2275,10 @@ msgstr "Leburkan lapisan ini dengan yang di bawah"
 msgid "Blend mode:"
 msgstr "Mode campuran:"
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr "Pass through"
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr "Normal"
@@ -2523,6 +2584,26 @@ msgstr "Warna isi bawaan:"
 msgid "A default background color of a new image"
 msgstr "Warna latar belakang bawaan pada gambar baru"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr "Atur ulang semua opsi yang di Preferensi"
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr "Atur ulang opsi garis waktu"
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr "Atur ulang opsi alat-alat"
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr "Hapus semua ekstensi"
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr "Kosongkan daftar berkas yang dibuka"
+
 msgid "Lock aspect ratio"
 msgstr "Kuncikan nisbah aspek"
 
@@ -2690,6 +2771,22 @@ msgstr "Huruf pemisah:"
 msgid "The character(s) that separate the file name and the frame number"
 msgstr "Huruf-huruf untuk memisahkan nama berkas dan nomor bingkai"
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr "Pangkas gambar"
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr "Memangkas gambar terekspor ke bagian terlihat, piksel apa pun bersaluran alfa bukan nol akan dianggap terlihat."
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr "Cuplik isi gambar ke seleksi"
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr "Hanya mengekspor isi area yang diseleksi."
+
 msgid "Close"
 msgstr "Tutup"
 
@@ -2779,31 +2876,31 @@ msgstr "Terbalikkan warna"
 
 #. An option of the Sort palette button found in the palette panel. When selected, the colors of the palette are being sorted based on their hue.
 msgid "Sort by hue"
-msgstr "Urut ikut rona"
+msgstr "Urut sesuai rona"
 
 #. An option of the Sort palette button found in the palette panel. When selected, the colors of the palette are being sorted based on their saturation.
 msgid "Sort by saturation"
-msgstr "Urut ikut saturasi"
+msgstr "Urut sesuai saturasi"
 
 #. An option of the Sort palette button found in the palette panel. When selected, the colors of the palette are being sorted based on their value.
 msgid "Sort by value"
-msgstr "Urut ikut nilai"
+msgstr "Urut sesuai nilai"
 
 #. An option of the Sort palette button found in the palette panel. When selected, the colors of the palette are being sorted based on their red channel value.
 msgid "Sort by red"
-msgstr "Urut ikut merah"
+msgstr "Urut sesuai merah"
 
 #. An option of the Sort palette button found in the palette panel. When selected, the colors of the palette are being sorted based on their green channel value.
 msgid "Sort by green"
-msgstr "Urut ikut hijau"
+msgstr "Urut sesuai hijau"
 
 #. An option of the Sort palette button found in the palette panel. When selected, the colors of the palette are being sorted based on their blue channel value.
 msgid "Sort by blue"
-msgstr "Urut ikut biru"
+msgstr "Urut sesuai biru"
 
 #. An option of the Sort palette button found in the palette panel. When selected, the colors of the palette are being sorted based on their alpha channel value.
 msgid "Sort by alpha"
-msgstr "Urut ikut alfa"
+msgstr "Urut sesuai alfa"
 
 msgid "Palette with the same name and path already exists!"
 msgstr "Palet dengan nama dan jalur yang sama sudah ada!"
@@ -2857,7 +2954,7 @@ msgid "Recorder"
 msgstr "Perekam"
 
 msgid "Crop"
-msgstr "Pangkas"
+msgstr "Potong"
 
 msgid "Resize the canvas"
 msgstr "Ubah ukuran kanvas"
@@ -2893,7 +2990,7 @@ msgid "Locked size\n\n"
 "When enabled using the tool on the canvas will only move the cropping rectangle.\n\n"
 "When disabled using the tool on the canvas will draw the rectangle."
 msgstr "Ukuran terkunci\n\n"
-"Saat diaktifkan dengan alat di kanvas hanya akan memindahkan persegi berpangkas.\n\n"
+"Saat diaktifkan dengan alat di kanvas hanya akan memindahkan persegi terpotong.\n\n"
 "Saat dinonaktifkan dengan alat di kanvas hanya akan membuat persegi."
 
 #. A tool used in 3D layers, that edits 3D objects.
@@ -2954,7 +3051,7 @@ msgid "Add new object"
 msgstr "Tambah objek baru"
 
 msgid "Remove object"
-msgstr "Hilangkan Objek"
+msgstr "Hapus objek"
 
 msgid "Camera"
 msgstr "Kamera"
@@ -3036,23 +3133,34 @@ msgstr "Jari-jari bawah:"
 msgid "Text:"
 msgstr "Teks:"
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr "Kedalaman:"
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr "Ukuran piksel:"
 
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Step (in pixels) used to approximate Bézier curves.
 msgid "Curve step:"
-msgstr "Curve step:"
+msgstr "Step lengkung:"
 
 msgid "Horizontal alignment:"
 msgstr "Penjajaran mendatar:"
 
+msgid "Vertical alignment:"
+msgstr "Penjajaran menegak:"
+
 msgid "Left"
 msgstr "Kiri"
 
 msgid "Right"
 msgstr "Kanan"
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr "Jarak baris:"
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr "Tenaga:"
@@ -3188,7 +3296,7 @@ msgstr "Pindahkan gambar rujukan terpilih ke kiri"
 
 #. Select a reference on the canvas
 msgid "Selects a reference image on the canvas"
-msgstr "Memilih yang jadi gambar rujukan di kanvas"
+msgstr "Memilih gambar rujukan untuk di kanvas"
 
 #. Moves the reference on the canvas
 msgid "Move the selected reference image"
diff --git a/Translations/is_IS.po b/Translations/is_IS.po
index 166a18072..89622d1d4 100644
--- a/Translations/is_IS.po
+++ b/Translations/is_IS.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Icelandic\n"
 "Language: is_IS\n"
-"PO-Revision-Date: 2024-08-03 00:15\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/it_IT.po b/Translations/it_IT.po
index 84a716b18..9ec08d994 100644
--- a/Translations/it_IT.po
+++ b/Translations/it_IT.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Italian\n"
 "Language: it_IT\n"
-"PO-Revision-Date: 2024-08-01 23:06\n"
+"PO-Revision-Date: 2024-10-17 15:11\n"
 
 msgid "OK"
 msgstr "OK"
@@ -233,6 +233,10 @@ msgstr "Rifletti verticalmente"
 msgid "Preferences"
 msgstr "Preferenze"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr "Centra tela"
+
 msgid "Tile Mode"
 msgstr "Modalità Tile"
 
@@ -560,6 +564,10 @@ msgstr "Esplora"
 msgid "Resize:"
 msgstr "Ridimensiona:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr "Qualità:"
+
 msgid "Cancel Export"
 msgstr "Annulla esportazione"
 
@@ -840,6 +848,10 @@ msgstr "Lingua di sistema"
 msgid "Display scale:"
 msgstr "Scala di visualizzazione:"
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr "Font:"
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr "Dimensione carattere:"
@@ -906,6 +918,16 @@ msgstr "Colore di sfondo da:"
 msgid "Background color:"
 msgstr "Colore dello sfondo:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr "Condividi le opzioni tra gli strumenti sinistro e destro"
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr "Se abilitata, le opzioni saranno sincronizzate tra sinistra e destra.\n"
+"Ad esempio, entrambi gli strumenti condivideranno la stessa dimensione del pennello e cambieranno istantaneamente su uno strumento l'altro."
+
 msgid "Left tool color:"
 msgstr "Colore strumento sinistra:"
 
@@ -954,12 +976,15 @@ msgstr "Modifica Canale Blu"
 msgid "Modify Alpha Channel"
 msgstr "Modifica Canale Alfa"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Desaturazione"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Contorno"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "Rilascia Ombra"
 
@@ -972,6 +997,26 @@ msgstr "Spostamento Y:"
 msgid "Shadow color:"
 msgstr "Colore ombra:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr "Sfocatura Gaussiana"
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr "Tipo di sfocatura:"
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr "Quantità sfocatura:"
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr "Raggio Sfocatura:"
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr "Direzione sfocatura:"
+
 msgid "Gradient"
 msgstr "Gradiente"
 
@@ -1032,7 +1077,7 @@ msgstr "Tipo:"
 msgid "Angle:"
 msgstr "Angolo:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "Regola Tonalità/Saturazione/Valore"
 
@@ -1102,11 +1147,11 @@ msgstr "Colori:"
 msgid "Steps:"
 msgstr "Passaggi:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr "Pallettizza"
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr "Pixellizza"
 
@@ -1722,6 +1767,10 @@ msgstr "Imposta limite FPS dell'applicazione:"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "Imposta il limite dei quadri dell'applicazione al secondo. Più basso è il numero, minore è l'uso della CPU, ma l'applicazione diventa più lenta, choppier e non reattiva. 0 significa che non c'è limite."
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr "Passaggio massimo annullamenti:"
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "Pausa applicazione quando perde il fuoco"
@@ -1732,7 +1781,7 @@ msgstr "Se questa opzione viene attivata, quando la finestra dell'applicazione p
 
 #. An option found in the preferences, under the Performance section. Refers to the screen being updated (redrawn) continuously.
 msgid "Update continuously"
-msgstr ""
+msgstr "Aggiorna continuamente"
 
 #. Found in the preferences, hint of the "Update continuously" option.
 msgid "If this is toggled on, the application will redraw the screen continuously, even while it's not used. Turning this off helps lower CPU and GPU usage when idle."
@@ -1999,11 +2048,19 @@ msgstr "Orizzontale"
 msgid "Enable horizontal mirrored drawing"
 msgstr "Abilita disegno orizzontale a specchio"
 
+msgid "Vertical"
+msgstr "Verticale"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Abilita disegno verticale a specchio"
 
-msgid "Vertical"
-msgstr "Verticale"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr "Sposta nel centro della superficie"
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr "Sposta nel centro della vista"
 
 msgid "Current frame:"
 msgstr "Frame corrente:"
@@ -2020,11 +2077,11 @@ msgstr "Vai al primo fotogramma"
 msgid "Go to the previous frame"
 msgstr "Vai al fotogramma precedente"
 
-msgid "Play the animation backwards (from end to beginning)"
-msgstr "Riproduci l'animazione al contrario (da fine a inizio)"
+msgid "Play the animation backwards"
+msgstr "Riproduce l'animazione all'indietro"
 
-msgid "Play the animation forward (from beginning to end)"
-msgstr "Riproduce l'animazione in avanti (dall'inizio alla fine)"
+msgid "Play the animation forward"
+msgstr "Riproduce l'animazione in avanti"
 
 msgid "Go to the next frame"
 msgstr "Vai al prossimo fotogramma"
@@ -2218,6 +2275,10 @@ msgstr "Unisci il livello corrente con quello sottostante"
 msgid "Blend mode:"
 msgstr "Metodo di fusione:"
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr "Pass through"
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr "Normale"
@@ -2523,6 +2584,26 @@ msgstr "Colore di riempimento predefinito:"
 msgid "A default background color of a new image"
 msgstr "Un colore di sfondo predefinito di una nuova immagine"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr "Reimposta tutte le opzioni disponibili nelle Preferenze"
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr "Reimposta opzioni timeline"
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr "Reimposta tutte le opzioni dello strumento"
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr "Rimuovi tutte le estensioni"
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr "Pulisce l'elenco dei file aperti di recente"
+
 msgid "Lock aspect ratio"
 msgstr "Blocca proporzioni"
 
@@ -2690,6 +2771,22 @@ msgstr "Carattere(i) separatore(i):"
 msgid "The character(s) that separate the file name and the frame number"
 msgstr "I caratteri che separano il nome del file e il numero di fotogramma"
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr "Ritaglia immagini"
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr "Ritaglia le immagini esportate nella loro porzione visibile, considerando ogni pixel con un canale alfa diverso da zero come visibile."
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr "Ritaglia il contenuto dell'immagine alla selezione"
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr "Esporta solo contenuti che rientrano nei limiti di un'area selezionata."
+
 msgid "Close"
 msgstr "Chiudi"
 
@@ -3035,6 +3132,10 @@ msgstr "Raggio inferiore:"
 msgid "Text:"
 msgstr "Testo:"
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr "Profondità:"
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr "Dimensione pixel:"
@@ -3046,12 +3147,19 @@ msgstr "Passaggio curva:"
 msgid "Horizontal alignment:"
 msgstr "Allineamento orizzontale:"
 
+msgid "Vertical alignment:"
+msgstr "Allineamento verticale:"
+
 msgid "Left"
 msgstr "Sinistra"
 
 msgid "Right"
 msgstr "Destra"
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr "Spaziatura linea:"
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr "Energia:"
diff --git a/Translations/ja_JP.po b/Translations/ja_JP.po
index df6a9f44a..efdc005ad 100644
--- a/Translations/ja_JP.po
+++ b/Translations/ja_JP.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Japanese\n"
 "Language: ja_JP\n"
-"PO-Revision-Date: 2024-08-02 00:18\n"
+"PO-Revision-Date: 2024-10-17 16:15\n"
 
 msgid "OK"
 msgstr "OK"
@@ -233,6 +233,10 @@ msgstr "垂直方向に反転"
 msgid "Preferences"
 msgstr "設定"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr "キャンバスを中央へ"
+
 msgid "Tile Mode"
 msgstr "タイルモード"
 
@@ -560,6 +564,10 @@ msgstr "参照"
 msgid "Resize:"
 msgstr "サイズを変更"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr "品質:"
+
 msgid "Cancel Export"
 msgstr "エクスポートをキャンセル"
 
@@ -840,6 +848,10 @@ msgstr "システム言語"
 msgid "Display scale:"
 msgstr "表示スケール:"
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr "フォント:"
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr "フォントサイズ:"
@@ -906,6 +918,16 @@ msgstr "背景色の参照元:"
 msgid "Background color:"
 msgstr "背景色:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr "左と右のツール間でオプションを共有"
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr "これを有効にすると、オプションは左側と右側のツール間で同期されます。\n"
+"例えば、両方のツールが同じブラシサイズを共有し、一方のツールでそれを変更すると、他のツールで即座に変更されます。"
+
 msgid "Left tool color:"
 msgstr "左ツールの色:"
 
@@ -954,12 +976,15 @@ msgstr "青チャンネルを変更"
 msgid "Modify Alpha Channel"
 msgstr "アルファチャンネルを変更"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "彩度を下げる"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "アウトライン"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "ドロップシャドウ"
 
@@ -972,6 +997,26 @@ msgstr "オフセット Y:"
 msgid "Shadow color:"
 msgstr "影の色:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr "ガウスぼかし"
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr "ぼかしタイプ:"
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr "ぼかしの量:"
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr "ぼかし半径:"
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr "ぼかし方向:"
+
 msgid "Gradient"
 msgstr "グラディエーション"
 
@@ -1032,7 +1077,7 @@ msgstr "タイプ:"
 msgid "Angle:"
 msgstr "角度:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "色相/彩度/値を調整"
 
@@ -1102,11 +1147,11 @@ msgstr "色:"
 msgid "Steps:"
 msgstr "手順:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr "パレット化"
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr "ピクセル化"
 
@@ -1722,6 +1767,10 @@ msgstr "アプリのFPS上限を設定:"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "アプリケーションのフレーム/秒の制限を設定します。 数値が低いほどCPU使用率が低くなりますが、アプリケーションが遅く、粗く、応答がなくなります。0は制限がないことを意味します。"
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr "元に戻すの最大ステップ数:"
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "フォーカスを失ったときにアプリケーションを一時停止する"
@@ -1999,11 +2048,19 @@ msgstr "水平"
 msgid "Enable horizontal mirrored drawing"
 msgstr "左右対称描画を有効化"
 
+msgid "Vertical"
+msgstr "垂直方向"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "上下対称描画を有効化"
 
-msgid "Vertical"
-msgstr "垂直方向"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr "キャンバスの中央に移動"
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr "ビューの中心に移動"
 
 msgid "Current frame:"
 msgstr "現在のフレーム:"
@@ -2020,11 +2077,11 @@ msgstr "最初のフレームにジャンプ"
 msgid "Go to the previous frame"
 msgstr "前のフレームへ移動"
 
-msgid "Play the animation backwards (from end to beginning)"
-msgstr "アニメーションを逆方向に再生 (終了から開始まで)"
+msgid "Play the animation backwards"
+msgstr "アニメーションを逆再生"
 
-msgid "Play the animation forward (from beginning to end)"
-msgstr "アニメーションを順方向に再生する (開始から終了まで)"
+msgid "Play the animation forward"
+msgstr "アニメーションを再生"
 
 msgid "Go to the next frame"
 msgstr "次のフレームへ移動"
@@ -2218,6 +2275,10 @@ msgstr "現在のレイヤーと下のレイヤーを結合"
 msgid "Blend mode:"
 msgstr "ブレンドモード:"
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr "パススルー"
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr "通常"
@@ -2523,6 +2584,26 @@ msgstr "既定の塗りつぶしの色:"
 msgid "A default background color of a new image"
 msgstr "新しい画像の既定の背景色"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr "設定で利用可能なすべてのオプションをリセット"
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr "タイムラインオプションをリセット"
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr "すべてのツールオプションをリセット"
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr "すべての拡張機能を削除"
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr "最近開いたファイルリストをクリア"
+
 msgid "Lock aspect ratio"
 msgstr "アスペクト比をロック"
 
@@ -2690,6 +2771,22 @@ msgstr "区切り文字:"
 msgid "The character(s) that separate the file name and the frame number"
 msgstr "ファイル名とフレーム番号を区切る文字"
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr "画像をトリム"
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr "エクスポートされた画像を可視部分にトリミングします。各ピクセルをゼロではないアルファチャンネルを可視とします。"
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr "選択範囲に画像コンテンツをクリップ"
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr "選択領域の範囲内にあるコンテンツのみエクスポートします。"
+
 msgid "Close"
 msgstr "閉じる"
 
@@ -3036,6 +3133,10 @@ msgstr "下部半径:"
 msgid "Text:"
 msgstr "テキスト:"
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr "ピクセルサイズ:"
@@ -3047,12 +3148,19 @@ msgstr "カーブステップ:"
 msgid "Horizontal alignment:"
 msgstr "水平方向:"
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr "左"
 
 msgid "Right"
 msgstr "右"
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr "行間隔:"
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr "エネルギー:"
diff --git a/Translations/ko_KR.po b/Translations/ko_KR.po
index 3a43654a6..404ea975d 100644
--- a/Translations/ko_KR.po
+++ b/Translations/ko_KR.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Korean\n"
 "Language: ko_KR\n"
-"PO-Revision-Date: 2024-08-01 22:06\n"
+"PO-Revision-Date: 2024-10-17 14:10\n"
 
 msgid "OK"
 msgstr "예"
@@ -231,6 +231,10 @@ msgstr "상하 대칭"
 msgid "Preferences"
 msgstr "환경설정"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "타일 모드"
 
@@ -557,6 +561,10 @@ msgstr "찾아보기"
 msgid "Resize:"
 msgstr "크기 조정"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr "내보내기 취소"
 
@@ -837,6 +845,10 @@ msgstr "시스템 언어"
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -903,6 +915,15 @@ msgstr ""
 msgid "Background color:"
 msgstr "배경 색상:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr "왼쪽 도구 색상"
 
@@ -951,12 +972,15 @@ msgstr "블루 채널 수정"
 msgid "Modify Alpha Channel"
 msgstr "알파 채널 수정"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "채도 낮추기"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "외곽선"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "그림자"
 
@@ -969,6 +993,26 @@ msgstr "Y 오프셋:"
 msgid "Shadow color:"
 msgstr "그림자 색상:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr "그레디언트"
 
@@ -1028,7 +1072,7 @@ msgstr "타입:"
 msgid "Angle:"
 msgstr "각도:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "색상/채도/명도 수정"
 
@@ -1098,11 +1142,11 @@ msgstr "색상:"
 msgid "Steps:"
 msgstr "단계:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1707,6 +1751,10 @@ msgstr "창 FPS 제한 설정"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "프로그램의 FPS를 제한합니다. 숫자가 낮을수록, CPU 사용량은 낮아지지만 프로그램의 속도가 느려지고, 거칠어지고 응답하지 않습니다. 0은 제한이 없음을 의미합니다"
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "관심 없는 창 정지"
@@ -1984,11 +2032,19 @@ msgstr "수평"
 msgid "Enable horizontal mirrored drawing"
 msgstr "수평 대칭 그리기 활성화"
 
+msgid "Vertical"
+msgstr "수직"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "수직 대칭 그리기 활성화"
 
-msgid "Vertical"
-msgstr "수직"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "현재 프레임:"
@@ -2005,10 +2061,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2203,6 +2259,10 @@ msgstr "현재 레이어와 그 아래 레이어를 병합"
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2507,6 +2567,26 @@ msgstr "기본 채우기 색:"
 msgid "A default background color of a new image"
 msgstr "새 이미지의 기본 배경 색"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr "비율 고정"
 
@@ -2674,6 +2754,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "닫기"
 
@@ -3016,6 +3112,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -3027,12 +3127,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/la_LA.po b/Translations/la_LA.po
index 572a21757..d3e699b4b 100644
--- a/Translations/la_LA.po
+++ b/Translations/la_LA.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Latin\n"
 "Language: la_LA\n"
-"PO-Revision-Date: 2024-08-03 01:17\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/lt_LT.po b/Translations/lt_LT.po
index 5a792c7d3..1a747aff2 100644
--- a/Translations/lt_LT.po
+++ b/Translations/lt_LT.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Lithuanian\n"
 "Language: lt_LT\n"
-"PO-Revision-Date: 2024-08-03 00:15\n"
+"PO-Revision-Date: 2024-10-17 14:10\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/lv_LV.po b/Translations/lv_LV.po
index 48ddd694e..0b87a1653 100644
--- a/Translations/lv_LV.po
+++ b/Translations/lv_LV.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Latvian\n"
 "Language: lv_LV\n"
-"PO-Revision-Date: 2024-08-01 22:07\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "Labi"
@@ -231,6 +231,10 @@ msgstr "Apmest vertikāli"
 msgid "Preferences"
 msgstr "Iestatījumi"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "Flīžu režīms"
 
@@ -556,6 +560,10 @@ msgstr ""
 msgid "Resize:"
 msgstr "Mainīt izmēru:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr "Atcelt eksportēšanu"
 
@@ -836,6 +844,10 @@ msgstr "Systēmas valoda"
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -902,6 +914,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -950,12 +971,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Atsātināt"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Ārlīnija"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -968,6 +992,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1027,7 +1071,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1097,11 +1141,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1669,6 +1713,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1945,11 +1993,19 @@ msgstr "Horizontāli"
 msgid "Enable horizontal mirrored drawing"
 msgstr "IIeslēgt horizontālo spoguļskata zīmēšanu"
 
+msgid "Vertical"
+msgstr "Vertikāls"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Ieslēgt vertikālo spoguļskata zīmēšanu"
 
-msgid "Vertical"
-msgstr "Vertikāls"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "Patreizējais kadrs:"
@@ -1966,10 +2022,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2163,6 +2219,10 @@ msgstr "Apvienot aktuālo slāni ar apakšējo slāni"
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2467,6 +2527,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2634,6 +2714,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2976,6 +3072,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2987,12 +3087,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/mk_MK.po b/Translations/mk_MK.po
index e24c29a37..c01bd4e78 100644
--- a/Translations/mk_MK.po
+++ b/Translations/mk_MK.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Macedonian\n"
 "Language: mk_MK\n"
-"PO-Revision-Date: 2024-08-03 00:15\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/ml_IN.po b/Translations/ml_IN.po
index b3574641d..d3d2f5876 100644
--- a/Translations/ml_IN.po
+++ b/Translations/ml_IN.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Malayalam\n"
 "Language: ml_IN\n"
-"PO-Revision-Date: 2024-08-01 22:07\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "ഓക്കേ"
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/mr_IN.po b/Translations/mr_IN.po
index 98a205fc4..e6bd9894e 100644
--- a/Translations/mr_IN.po
+++ b/Translations/mr_IN.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Marathi\n"
 "Language: mr_IN\n"
-"PO-Revision-Date: 2024-08-03 00:15\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/ms_MY.po b/Translations/ms_MY.po
index 6256e3ba8..296dc1cdc 100644
--- a/Translations/ms_MY.po
+++ b/Translations/ms_MY.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Malay\n"
 "Language: ms_MY\n"
-"PO-Revision-Date: 2024-08-03 00:15\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/nb_NO.po b/Translations/nb_NO.po
index ca8ed7fa0..706577ce7 100644
--- a/Translations/nb_NO.po
+++ b/Translations/nb_NO.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Norwegian Bokmal\n"
 "Language: nb_NO\n"
-"PO-Revision-Date: 2024-08-01 22:07\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "OK"
@@ -231,6 +231,10 @@ msgstr "Speilvend Vertikalt"
 msgid "Preferences"
 msgstr "Preferanser"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "Flismodus"
 
@@ -556,6 +560,10 @@ msgstr "Bla gjennom"
 msgid "Resize:"
 msgstr "Endre størrelse:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr "Avbryt Eksport"
 
@@ -836,6 +844,10 @@ msgstr "Systemspråk"
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -902,6 +914,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -950,12 +971,15 @@ msgstr "Endre Blå Kanal"
 msgid "Modify Alpha Channel"
 msgstr "Endre Alpha Kanal"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Avmettning"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Omriss"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -968,6 +992,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr "Gradient"
 
@@ -1027,7 +1071,7 @@ msgstr "Type:"
 msgid "Angle:"
 msgstr "Vinkel:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "Justér Fargetone/Metning/Verdi"
 
@@ -1097,11 +1141,11 @@ msgstr "Farger:"
 msgid "Steps:"
 msgstr "Trinn:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1706,6 +1750,10 @@ msgstr "Sett prorgammets grense for Bilder Per Sekund, BPS:"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "Setter grensen for hvor mange bilder per sekund programmet kan ha. Lavere tall bruker mindre prosessorkraft, men programmet går saktere, mer hakkete og kan slutte å svare. 0 betyr at det ikke er noen grense."
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "Sett programmet på pause når det mister fokus"
@@ -1983,11 +2031,19 @@ msgstr "Horisontal"
 msgid "Enable horizontal mirrored drawing"
 msgstr "Aktivér horisontaltspeilet tegning"
 
+msgid "Vertical"
+msgstr "Vertikal"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Aktivér vertikaltspeilet tegning"
 
-msgid "Vertical"
-msgstr "Vertikal"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "Gjeldende bilde:"
@@ -2004,10 +2060,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2202,6 +2258,10 @@ msgstr "Slå sammen dette laget med laget nedenfor"
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2506,6 +2566,26 @@ msgstr "Standard fyllfarge:"
 msgid "A default background color of a new image"
 msgstr "En standard bakgrunnsfarge for et nytt bilde"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr "Lås størrelsesforhold"
 
@@ -2673,6 +2753,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "Lukk"
 
@@ -3016,6 +3112,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -3027,12 +3127,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/nl_NL.po b/Translations/nl_NL.po
index def22b7d1..ecc1ddf3b 100644
--- a/Translations/nl_NL.po
+++ b/Translations/nl_NL.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Dutch\n"
 "Language: nl_NL\n"
-"PO-Revision-Date: 2024-08-01 22:06\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "Oké"
@@ -231,6 +231,10 @@ msgstr "Verticaal spiegelen"
 msgid "Preferences"
 msgstr "Instellingen"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "Tegelmodus"
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/pl_PL.po b/Translations/pl_PL.po
index 48cc7cb60..e1f71cc43 100644
--- a/Translations/pl_PL.po
+++ b/Translations/pl_PL.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Polish\n"
 "Language: pl_PL\n"
-"PO-Revision-Date: 2024-08-02 18:31\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "OK"
@@ -233,6 +233,10 @@ msgstr "Odbij w pionie"
 msgid "Preferences"
 msgstr "Ustawienia"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "Tryb kafelkowy"
 
@@ -559,6 +563,10 @@ msgstr "Przeglądaj"
 msgid "Resize:"
 msgstr "Zmień rozmiar:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr "Jakość:"
+
 msgid "Cancel Export"
 msgstr "Anuluj eksportowanie"
 
@@ -656,7 +664,7 @@ msgid "Refresh files."
 msgstr "Odśwież pliki."
 
 msgid "Toggle the visibility of hidden files."
-msgstr ""
+msgstr "Przełącz widoczność ukrytych plików."
 
 msgid "Directories & Files:"
 msgstr "Pliki oraz katalogi:"
@@ -669,51 +677,51 @@ msgstr "Plik:"
 
 #. Found in "Open" and "Save" file dialogs. Searches all file types.
 msgid "All Files"
-msgstr ""
+msgstr "Wszystkie pliki"
 
 #. Found in the "Open" file dialog. Searches all file types supported by Pixelorama.
 msgid "All Recognized"
-msgstr ""
+msgstr "Wszystkie rozpoznane"
 
 #. Found in "Open" and "Save" file dialogs. Searches Pixelorama Project files only (.pxo).
 msgid "Pixelorama Project"
-msgstr ""
+msgstr "Projekt Pixelorama"
 
 #. Found in the "Open" file dialog. Searches PNG files only. (Note that PNG is a file type and should remain untranslated)
 msgid "PNG Image"
-msgstr ""
+msgstr "Obraz PNG"
 
 #. Found in the "Open" file dialog. Searches BMP files only. (Note that BMP is a file type and should remain untranslated)
 msgid "BMP Image"
-msgstr ""
+msgstr "Obraz BMP"
 
 #. Found in the "Open" file dialog. Searches "Radiance HDR" files only. (Note that "Radiance HDR" is a file type and is better untranslated)
 msgid "Radiance HDR Image"
-msgstr ""
+msgstr "Obraz Radiance HDR"
 
 #. Found in the "Open" file dialog. Searches JPEG files only. (Note that JPEG is a file type and should remain untranslated)
 msgid "JPEG Image"
-msgstr ""
+msgstr "Obraz JPEG"
 
 #. Found in the "Open" file dialog. Searches SVG files only. (Note that SVG is a file type and should remain untranslated)
 msgid "SVG Image"
-msgstr ""
+msgstr "Obraz SVG"
 
 #. Found in the "Open" file dialog. Searches TGA files only. (Note that TGA is a file type and should remain untranslated)
 msgid "TGA Image"
-msgstr ""
+msgstr "Obraz TGA"
 
 #. Found in the "Open" file dialog. Searches WebP files only. (Note that WebP is a file type and should remain untranslated)
 msgid "WebP Image"
-msgstr ""
+msgstr "Obraz WebP"
 
 #. Found in the "Open" file dialog. Searches Pixelorama palette files only (.json).
 msgid "Pixelorama palette"
-msgstr ""
+msgstr "Paleta typu Pixelorama"
 
 #. Found in the "Open" file dialog. Searches GIMP palette files only (.gpl). (Note that GIMP is a software and should remain untranslated)
 msgid "GIMP palette"
-msgstr ""
+msgstr "Paleta typu GIMP"
 
 #. Found in the export dialog. It is a button that when pressed, shows more options.
 msgid "Advanced options"
@@ -839,6 +847,10 @@ msgstr "Język systemowy"
 msgid "Display scale:"
 msgstr "Pokaż Skalę:"
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr "Rozmiar czcionki:"
@@ -905,6 +917,15 @@ msgstr "Kolor tła z:"
 msgid "Background color:"
 msgstr "Kolor tła:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr "Kolor lewego narzędzia:"
 
@@ -953,12 +974,15 @@ msgstr "Modyfikuj kanał niebieski"
 msgid "Modify Alpha Channel"
 msgstr "Modyfikuj kanał alfa"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Desaturacja (zmniejsz nasycenie)"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
-msgstr "Krawędź"
+msgstr "Obrys"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "Cień"
 
@@ -971,6 +995,26 @@ msgstr "Przesunięcie Y:"
 msgid "Shadow color:"
 msgstr "Kolor cienia:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr "Gradient"
 
@@ -1031,7 +1075,7 @@ msgstr "Typ:"
 msgid "Angle:"
 msgstr "Kąt:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "Dostosuj Odcień/Nasycenie/Wartość"
 
@@ -1101,11 +1145,11 @@ msgstr "Kolory:"
 msgid "Steps:"
 msgstr "Kroki:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr "Paletyzacja"
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr "Pixelizuj"
 
@@ -1317,15 +1361,15 @@ msgid "Rectangular Selection\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
 msgstr "Okrągłe zaznaczanie\n\n"
-"%s na lewy przycisk myszy\n"
-"%s na prawy przycisk myszy"
+"%s dla lewego przycisku myszy\n"
+"%s dla prawego przycisku myszy"
 
 msgid "Elliptical Selection\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
 msgstr "Zaznaczenie eliptyczne \n\n"
-"%s na lewy przycisk myszy\n"
-"%s na prawy przycisk myszy"
+"%s dla lewego przycisku myszy\n"
+"%s dla prawego przycisku myszy"
 
 msgid "Polygonal Selection\n\n"
 "%s for left mouse button\n"
@@ -1340,34 +1384,36 @@ msgid "Select By Color\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
 msgstr "Zaznacz poprzez kolor\n\n"
-"%s na lewy przycisk myszy\n"
-"%s na prawy przycisk myszy"
+"%s dla lewego przycisku myszy\n"
+"%s dla prawego przycisku myszy"
 
 msgid "Magic Wand\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
 msgstr "Magiczna różczka\n\n"
-"%s na lewy przycisk myszy\n"
-"%s na prawy przycisk myszy"
+"%s dla lewego przycisku myszy\n"
+"%s dla prawego przycisku myszy"
 
 msgid "Lasso / Free Select Tool\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
 msgstr "Lasso / narzędzie swobodnego zaznaczania\n\n"
-"%s na lewy przycisk myszy\n"
-"%s na prawy przycisk myszy"
+"%s dla lewego przycisku myszy\n"
+"%s dla prawego przycisku myszy"
 
 msgid "Select by Drawing\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
-msgstr ""
+msgstr "Zaznacz rysując\n\n"
+"%s dla lewego przycisku myszy\n"
+"%s dla prawego przycisku myszy"
 
 msgid "Move\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
 msgstr "Przenieś \n\n"
-"%s na lewy przycisk myszy\n"
-"%s na prawy przycisk myszy"
+"%s dla lewego przycisku myszy\n"
+"%s dla prawego przycisku myszy"
 
 msgid "Zoom\n\n"
 "%s for left mouse button\n"
@@ -1394,7 +1440,8 @@ msgstr "Wybór koloru\n\n"
 
 msgid "Crop\n\n"
 "Resize the canvas"
-msgstr ""
+msgstr "Przytnij\n\n"
+"Zmień rozmiar płótna"
 
 msgid "Pencil\n\n"
 "%s for left mouse button\n"
@@ -1410,23 +1457,23 @@ msgid "Eraser\n\n"
 "%s for right mouse button\n\n"
 "Hold %s to make a line"
 msgstr "Gumka\n\n"
-"%s na lewy przycisk myszy\n"
-"%s na prawy przycisk myszy\n\n"
+"%s dla lewego przycisku myszy\n"
+"%s dla prawego przycisku myszy\n\n"
 "Przytrzymaj %s aby użyć w linii prostej"
 
 msgid "Bucket\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
 msgstr "Wiaderko\n\n"
-"%s na lewy przycisk myszy\n"
-"%s na prawy przycisk myszy"
+"%s dla lewego przycisku myszy\n"
+"%s dla prawego przycisku myszy"
 
 msgid "Shading Tool\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
 msgstr "Narzędzie cieniowania\n\n"
-"%s na lewy przycisk myszy\n"
-"%s na prawy przycisk myszy"
+"%s dla lewego przycisku myszy\n"
+"%s dla prawego przycisku myszy"
 
 msgid "Line Tool\n\n"
 "%s for left mouse button\n"
@@ -1462,8 +1509,8 @@ msgid "Rectangle Tool\n\n"
 "Hold %s to center the shape on the click origin\n"
 "Hold %s to displace the shape's origin"
 msgstr "Prostokąt\n\n"
-"%s na lewy przycisk myszy\n"
-"%s na prawy przycisk myszy\n\n"
+"%s dla lewego przycisku myszy\n"
+"%s dla prawego przycisku myszy\n\n"
 "Przytrzymaj %s aby stworzyć kształt 1:1\n"
 "Przytrzymaj %s aby wyśrodkować kształt na miejscu kliknięcia\n"
 "Przytrzymaj %s aby przemieścić pozycję źródłową kształtu"
@@ -1475,8 +1522,8 @@ msgid "Ellipse Tool\n\n"
 "Hold %s to center the shape on the click origin\n"
 "Hold %s to displace the shape's origin"
 msgstr "Elipsa\n\n"
-"%s na lewy przycisk myszy\n"
-"%s na prawy przycisk myszy\n\n"
+"%s dla lewego przycisku myszy\n"
+"%s dla prawego przycisku myszy\n\n"
 "Przytrzymaj %s aby stworzyć kształt 1:1\n"
 "Przytrzymaj %s aby wyśrodkować kształt na miejscu kliknięcia\n"
 "Przytrzymaj %s aby przemieścić pozycję źródłową kształtu"
@@ -1499,7 +1546,7 @@ msgstr "Podmień lewy kolor z prawym kolorem."
 
 #. Tooltip of the average color button, found in the color picker panel. Shows the average color between the two selected.
 msgid "Average Color:"
-msgstr ""
+msgstr "Średnia kolorów:"
 
 msgid "Reset the colors to their default state (black for left, white for right)"
 msgstr "Resetuje kolory do stanu domyślnego (czarny po lewej, biały po prawej)"
@@ -1510,7 +1557,7 @@ msgstr "Wybierz kolor z ekranu."
 
 #. Tooltip of the color text field found in the color picker panel that lets users change the color by hex code or english name ("red" cannot be translated).
 msgid "Enter a hex code (\"#ff0000\") or named color (\"red\")."
-msgstr ""
+msgstr "Wpisz kod hex (\"#ff0000\") lub angielską nazwę koloru (\"red\")."
 
 #. Tooltip of the button found in the color picker panel that lets users change the shape of the color picker.
 msgid "Select a picker shape."
@@ -1522,19 +1569,19 @@ msgstr "Opcje kolorów"
 
 #. Tooltip of the button with three dots found under color options in the color picker panel that lets users change the mode of the color picker/sliders.
 msgid "Select a picker mode."
-msgstr ""
+msgstr "Wybierz tryb próbnika."
 
 #. Checkbox found in the menu of the button with three dots found under color options in the color picker panel.
 msgid "Colorized Sliders"
-msgstr ""
+msgstr "Kolorowe suwaki"
 
 #. Shows saved colors in certain color picker menus.
 msgid "Swatches"
-msgstr ""
+msgstr "Próbki"
 
 #. Found under color options in the color picker panel.
 msgid "Recent Colors"
-msgstr ""
+msgstr "Ostatnie kolory"
 
 msgid "Left tool"
 msgstr "Lewe narzędzie"
@@ -1717,6 +1764,10 @@ msgstr "Ustaw limit FPS dla aplikacji:"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "Ustawia limit klatek aplikacji na sekundę. Im niższa liczba, tym niższe zużycie procesora, ale aplikacja staje się wolniejsza. 0 oznacza, że nie ma limitu."
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr "Maksymalna liczba cofnięć zmian:"
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "Zapauzuj aplikację, gdy straci skupienie"
@@ -1727,7 +1778,7 @@ msgstr "Jeśli ta opcja jest włączona i okno aplikacji traci skupienie, to pro
 
 #. An option found in the preferences, under the Performance section. Refers to the screen being updated (redrawn) continuously.
 msgid "Update continuously"
-msgstr ""
+msgstr "Odświeżaj bezustannie"
 
 #. Found in the preferences, hint of the "Update continuously" option.
 msgid "If this is toggled on, the application will redraw the screen continuously, even while it's not used. Turning this off helps lower CPU and GPU usage when idle."
@@ -1994,11 +2045,19 @@ msgstr "Poziome"
 msgid "Enable horizontal mirrored drawing"
 msgstr "Włącza lustrzane odbicie w poziomie podczas rysowania"
 
+msgid "Vertical"
+msgstr "Pionowe"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Włącza lustrzane odbicie w pionie podczas rysowania"
 
-msgid "Vertical"
-msgstr "Pionowe"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "Obecna klatka:"
@@ -2010,22 +2069,22 @@ msgid "Current frame as spritesheet"
 msgstr "Obecna klatka jako spritesheet"
 
 msgid "Jump to the first frame"
-msgstr ""
+msgstr "Skocz do pierwszej klatki"
 
 msgid "Go to the previous frame"
+msgstr "Idć do poprzedniej klatki"
+
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
-msgstr ""
-
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
-msgstr ""
+msgstr "Idź do następnej klatki"
 
 msgid "Jump to the last frame"
-msgstr ""
+msgstr "Skocz do ostatniej klatki"
 
 msgid "Timeline settings"
 msgstr "Ustawienia osi czasu"
@@ -2090,7 +2149,7 @@ msgstr "Jeśli jest zaznaczone, animacja odtwarza się tylko na klatkach z tym s
 
 #. Found in the timeline, inside the timeline settings. It's a slider that sets the size of the cel buttons in the timeline.
 msgid "Cel size:"
-msgstr "Rozmiar komórki:"
+msgstr "Rozmiar kalki:"
 
 #. Found in the timeline, inside the timeline settings. If this is enabled, the past and future frames will have appear tinted.
 msgid "Color mode"
@@ -2148,7 +2207,7 @@ msgid "Layer properties"
 msgstr "Właściwości warstwy"
 
 msgid "Cel properties"
-msgstr "Właściwości komórki"
+msgstr "Właściwości kalki"
 
 msgid "Tag properties"
 msgstr "Właściwości tagu"
@@ -2213,6 +2272,10 @@ msgstr "Połącz obecną warstwę z warstwą powyżej"
 msgid "Blend mode:"
 msgstr "Rodzaj mieszania:"
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr "Normalny"
@@ -2518,6 +2581,26 @@ msgstr "Domyślny kolor wypełnienia:"
 msgid "A default background color of a new image"
 msgstr "Domyślny kolor tła dla nowego obrazu"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr "Wymuś współczynnik proporcji"
 
@@ -2685,6 +2768,22 @@ msgstr "Znak(i) rozdzielające:"
 msgid "The character(s) that separate the file name and the frame number"
 msgstr "Znak(i) oddzielające nazwę pliku od numeru klatki"
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "Zamknij"
 
@@ -3031,6 +3130,10 @@ msgstr "Dolny promień:"
 msgid "Text:"
 msgstr "Tekst:"
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr "Rozmiar piksela:"
@@ -3042,12 +3145,19 @@ msgstr "Krok krzywej:"
 msgid "Horizontal alignment:"
 msgstr "Poziome wyrównanie:"
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr "Lewo"
 
 msgid "Right"
 msgstr "Prawo"
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr "Siła:"
@@ -3153,24 +3263,25 @@ msgstr "Monochromatyczny"
 
 #. Found in the Reference Images panel when no reference image has been imported.
 msgid "When opening an image, it may be imported as a reference."
-msgstr ""
+msgstr "Otwierając obraz, można go zaimportować jako obraz odniesienia."
 
 #. Found in the Reference Images panel after a reference image has been imported.
 msgid "Select an image below to change its properties.\n"
 "Note that you cannot draw while a reference image is selected."
-msgstr ""
+msgstr "Wybierz obraz poniżej, aby zmienić jego proporcje.\n"
+"Uwaga: nie możesz rysować, podczas gdy obraz odniesienia jest wybrany."
 
 #. Removes the selected reference image.
 msgid "Remove"
-msgstr ""
+msgstr "Usuń"
 
 #. A tooltip to tell users to hold the Shift key while clicking the remove button
 msgid "Hold Shift while pressing to instantly remove."
-msgstr ""
+msgstr "Przytrzymaj Shift przy kliknięciu, aby usunąć natychmiastowo."
 
 #. Shown in the confirmation dialog for removing a reference image.
 msgid "Are you sure you want to remove this reference image? It will not be deleted from your file system."
-msgstr ""
+msgstr "Czy jesteś pewny usunięcia tego obrazu odniesienia? Nie zostanie on usunięty z twojego systemu."
 
 #. Moves the reference image up in the list
 msgid "Move the selected reference image to the right"
@@ -3198,35 +3309,35 @@ msgstr "Skaluj wybrany obraz referencyjny"
 
 #. Button to select no reference images in the Reference Images panel.
 msgid "none"
-msgstr ""
+msgstr "brak"
 
 #. Resets the Transform of the selected reference image on the canvas.
 msgid "Reset Transform"
-msgstr ""
+msgstr "Reset przekształceń"
 
 #. Position of the selected reference image on the canvas.
 msgid "Position"
-msgstr ""
+msgstr "Pozycja"
 
 #. Scale of the selected reference image on the canvas.
 msgid "Scale"
-msgstr ""
+msgstr "Skala"
 
 #. Rotation of the selected reference image on the canvas.
 msgid "Rotation"
-msgstr ""
+msgstr "Obrót"
 
 #. Toggle filter of the selected reference image on the canvas.
 msgid "Filter"
-msgstr ""
+msgstr "Filtr"
 
 #. Opacity of the selected reference image on the canvas.
 msgid "Opacity"
-msgstr ""
+msgstr "Przezroczystość"
 
 #. Color clamping of the selected reference image on the canvas.
 msgid "Color Clamping"
-msgstr ""
+msgstr "Ograniczanie koloru"
 
 #. Used in checkbuttons (like on/off switches) that enable/disable something.
 msgid "Enabled"
diff --git a/Translations/pt_BR.po b/Translations/pt_BR.po
index 7ad0218b9..27b6e3baf 100644
--- a/Translations/pt_BR.po
+++ b/Translations/pt_BR.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Portuguese, Brazilian\n"
 "Language: pt_BR\n"
-"PO-Revision-Date: 2024-08-03 01:17\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "OK"
@@ -233,6 +233,10 @@ msgstr "Inverter Verticalmente"
 msgid "Preferences"
 msgstr "Preferências"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "Modo de Tile"
 
@@ -560,6 +564,10 @@ msgstr "Localizar"
 msgid "Resize:"
 msgstr "Redimensionar:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr "Qualidade:"
+
 msgid "Cancel Export"
 msgstr "Cancelar exportação"
 
@@ -840,6 +848,10 @@ msgstr "Linguagem do Sistema"
 msgid "Display scale:"
 msgstr "Mostrar escala:"
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr "Tamanho da fonte:"
@@ -906,6 +918,15 @@ msgstr "Cor de fundo de:"
 msgid "Background color:"
 msgstr "Cor de fundo:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr "Cor da ferramenta esquerda:"
 
@@ -954,12 +975,15 @@ msgstr "Modificar O Canal Azul"
 msgid "Modify Alpha Channel"
 msgstr "Modificar O Canal Alfa"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Dessaturação"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Contorno"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "Sombra projetada"
 
@@ -972,6 +996,26 @@ msgstr "Deslocar Y:"
 msgid "Shadow color:"
 msgstr "Cor da sombra:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr "Desfoque gaussiano"
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr "Tipo de desfoque:"
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr "Quantidade de desfoque:"
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr "Raio de desfocagem:"
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr "Direção do desfoque:"
+
 msgid "Gradient"
 msgstr "Gradiente"
 
@@ -1032,7 +1076,7 @@ msgstr "Tipo:"
 msgid "Angle:"
 msgstr "Ângulo:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "Ajustar Matiz/Saturação/Valor"
 
@@ -1102,11 +1146,11 @@ msgstr "Cores:"
 msgid "Steps:"
 msgstr "Etapas:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr "Paletizar"
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr "Pixelizar"
 
@@ -1722,6 +1766,10 @@ msgstr "Definir o limite de FPS do aplicativo:"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "Define o limite de FPS (quadros por segundo) do aplicativo. Quanto menor o número, menor o uso da CPU, mas o aplicativo fica mais lento, com qualidade ruim e sem resposta. 0 significa que não há limite."
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr "Máximo de ações salvas para desfazer:"
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "Pausar aplicativo quando perder o foco"
@@ -1999,11 +2047,19 @@ msgstr "Horizontal"
 msgid "Enable horizontal mirrored drawing"
 msgstr "Ativar desenho com espelhamento horizontal"
 
+msgid "Vertical"
+msgstr "Vertical"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Ativar desenho com espelhamento vertical"
 
-msgid "Vertical"
-msgstr "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "Quadro atual:"
@@ -2020,11 +2076,11 @@ msgstr "Pular para o primeiro quadro"
 msgid "Go to the previous frame"
 msgstr "Ir para o quadro anterior"
 
-msgid "Play the animation backwards (from end to beginning)"
-msgstr "Reproduzir animação de trás para frente (do fim ao início)"
+msgid "Play the animation backwards"
+msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
-msgstr "Reproduzir animação (do início ao fim)"
+msgid "Play the animation forward"
+msgstr ""
 
 msgid "Go to the next frame"
 msgstr "Ir para o próximo quadro"
@@ -2218,6 +2274,10 @@ msgstr "Combinar camada atual com a de baixo"
 msgid "Blend mode:"
 msgstr "Modo de mesclagem:"
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr "Passar através"
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr "Normal"
@@ -2523,6 +2583,26 @@ msgstr "Cor de preenchimento padrão:"
 msgid "A default background color of a new image"
 msgstr "Cor de fundo padrão de uma nova imagem"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr "Fixar proporção"
 
@@ -2690,6 +2770,22 @@ msgstr "Usar caractere(s) de separação:"
 msgid "The character(s) that separate the file name and the frame number"
 msgstr "O(s) caractere(s) que separam o nome do arquivo e o número do quadro"
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr "Cortar imagens"
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr "Corta as imagens exportadas para sua parte visível, considerando cada pixel com um canal alfa diferente de zero como visível."
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "Fechar"
 
@@ -3035,6 +3131,10 @@ msgstr "Raio inferior:"
 msgid "Text:"
 msgstr "Texto:"
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr "Tamanho do pixel:"
@@ -3046,12 +3146,19 @@ msgstr "Passo da curva:"
 msgid "Horizontal alignment:"
 msgstr "Alinhamento horizontal:"
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr "Esquerda"
 
 msgid "Right"
 msgstr "Direita"
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr "Energia:"
diff --git a/Translations/pt_PT.po b/Translations/pt_PT.po
index 8aa4ca52d..3cd609b54 100644
--- a/Translations/pt_PT.po
+++ b/Translations/pt_PT.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Portuguese\n"
 "Language: pt_PT\n"
-"PO-Revision-Date: 2024-08-01 22:06\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "OK"
@@ -231,6 +231,10 @@ msgstr "Virar Verticalmente"
 msgid "Preferences"
 msgstr "Preferencias"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "Modo de Azuleijo"
 
@@ -556,6 +560,10 @@ msgstr "Pesquisar"
 msgid "Resize:"
 msgstr "Redimensionar:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr "Cancelar Exportar"
 
@@ -836,6 +844,10 @@ msgstr "Linguagem de Sistema"
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -902,6 +914,15 @@ msgstr "Cor de fundo de:"
 msgid "Background color:"
 msgstr "Cor de fundo:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr "Cor da ferramenta esquerda:"
 
@@ -950,12 +971,15 @@ msgstr "Alterar Canal Azul"
 msgid "Modify Alpha Channel"
 msgstr "Alterar Canal Alpha"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Dessaturação"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Contorno"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -968,6 +992,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr "Cor da sombra:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr "Gradiente"
 
@@ -1028,7 +1072,7 @@ msgstr "Tipo:"
 msgid "Angle:"
 msgstr "Angulo:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "Ajustar Hue/Saturação/Valor"
 
@@ -1098,11 +1142,11 @@ msgstr "Cores:"
 msgid "Steps:"
 msgstr "Passos:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1702,6 +1746,10 @@ msgstr "Define o limite de FPS da aplicação:"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "Define o limite de fotogramas por segundo da aplicação. Quanto mais baixo, mais baixo o uso do processador, no entanto, a aplicação fica mais lenta, com cortes, e pouco responsiva. 0 significa que não tem limite."
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "Pausar a aplicação quando perder o foco"
@@ -1978,11 +2026,19 @@ msgstr "Horizontal"
 msgid "Enable horizontal mirrored drawing"
 msgstr "Habilitar o desenho espelhado horizontalmente"
 
+msgid "Vertical"
+msgstr "Vertical"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Habilitar o desenho espelhado verticalmente"
 
-msgid "Vertical"
-msgstr "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "Fotograma atual:"
@@ -1999,10 +2055,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2197,6 +2253,10 @@ msgstr "Fundir a camada atual com a de baixo"
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2502,6 +2562,26 @@ msgstr "Cor de preenchimento padrão"
 msgid "A default background color of a new image"
 msgstr "Cor de fundo de uma nova imagem"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr "Trancar resolução"
 
@@ -2669,6 +2749,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "Fechar"
 
@@ -3012,6 +3108,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -3023,12 +3123,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/ro_RO.po b/Translations/ro_RO.po
index dfa1ea9a7..ebe51d9c2 100644
--- a/Translations/ro_RO.po
+++ b/Translations/ro_RO.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Romanian\n"
 "Language: ro_RO\n"
-"PO-Revision-Date: 2024-08-05 08:51\n"
+"PO-Revision-Date: 2024-10-22 10:34\n"
 
 msgid "OK"
 msgstr "OK"
@@ -231,6 +231,10 @@ msgstr "Răsturnare verticală"
 msgid "Preferences"
 msgstr "Preferințe"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr "Centrare pânză"
+
 msgid "Tile Mode"
 msgstr "Mod mozaic"
 
@@ -558,6 +562,10 @@ msgstr "Răsfoire"
 msgid "Resize:"
 msgstr "Redimensionare:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr "Calitate:"
+
 msgid "Cancel Export"
 msgstr "Anulare exportare"
 
@@ -838,6 +846,10 @@ msgstr "Limba sistemului"
 msgid "Display scale:"
 msgstr "Scară de afișare:"
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr "Font:"
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr "Dimensiunea fontului:"
@@ -904,6 +916,16 @@ msgstr "Culoare de fundal din:"
 msgid "Background color:"
 msgstr "Culoare de fundal:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr "Sincronizează opțiunile între instrumentele din stânga și cele din dreapta"
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr "Dacă această setare este activată, opțiunile vor fi sincronizate între instrumentul din stânga și cel din dreapta.\n"
+"De exemplu, ambele instrumente vor folosi o pensulă de aceeași mărime, iar modificarea setării pentru un instrument se va aplica instantaneu și pentru cealaltă."
+
 msgid "Left tool color:"
 msgstr "Culoarea instrumentului din stânga:"
 
@@ -952,12 +974,15 @@ msgstr "Modificare canal albastru"
 msgid "Modify Alpha Channel"
 msgstr "Modificare canal alfa"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Desaturație"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Contur"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "Umbră"
 
@@ -970,6 +995,26 @@ msgstr "Decalaj Y:"
 msgid "Shadow color:"
 msgstr "Culoarea umbrei:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr "Estompare gaussiană"
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr "Tip de estompare:"
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr "Cantitate de estompare:"
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr "Rază de estompare:"
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr "Direcția de estompare:"
+
 msgid "Gradient"
 msgstr "Degrade"
 
@@ -1030,7 +1075,7 @@ msgstr "Tip:"
 msgid "Angle:"
 msgstr "Unghi:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "Ajustare nuanță/saturație/valoare"
 
@@ -1100,11 +1145,11 @@ msgstr "Culori:"
 msgid "Steps:"
 msgstr "Pași:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr "Paletizare"
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr "Pixelizare"
 
@@ -1720,6 +1765,10 @@ msgstr "Setare limită de cadre pe secundă pentru aplicație:"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "Setează limita de cadre pe secundă a aplicației. Cu cât numărul este mai mic, cu atât utilizarea procesorului este mai redusă, însă aplicația devine mai lentă, variabilă și nereceptivă. 0 înseamnă că nu există limite."
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr "Pași max. de anulare:"
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "Întrerupe aplicația atunci când pierde focalizarea"
@@ -1997,11 +2046,19 @@ msgstr "Orizontal"
 msgid "Enable horizontal mirrored drawing"
 msgstr "Activează desenul oglindit orizontal"
 
+msgid "Vertical"
+msgstr "Vertical"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Activează desenul oglindit vertical"
 
-msgid "Vertical"
-msgstr "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr "Mutare în centrul pânzei"
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr "Mutare în centrul de vizualizare"
 
 msgid "Current frame:"
 msgstr "Cadrul actual:"
@@ -2018,11 +2075,11 @@ msgstr "Sari la primul cadru"
 msgid "Go to the previous frame"
 msgstr "Deplasează-te la cadrul anterior"
 
-msgid "Play the animation backwards (from end to beginning)"
-msgstr "Redă animația înapoi (de la sfârșit până la început)"
+msgid "Play the animation backwards"
+msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
-msgstr "Redă animația înainte (de la început până la sfârșit)"
+msgid "Play the animation forward"
+msgstr ""
 
 msgid "Go to the next frame"
 msgstr "Deplasează-te la cadrul următor"
@@ -2216,6 +2273,10 @@ msgstr "Îmbină stratul actual cu cel de mai jos"
 msgid "Blend mode:"
 msgstr "Mod amestecare:"
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr "Trecere"
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr "Normal"
@@ -2521,6 +2582,26 @@ msgstr "Culoare implicită de umplere:"
 msgid "A default background color of a new image"
 msgstr "Culoarea implicită de fundal a unei imagini noi"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr "Resetează toate opțiunile disponibile în Preferințe"
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr "Resetează opțiunile de cronologie"
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr "Resetați toate opțiunile de instrumente"
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr "Elimină toate extensiile"
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr "Șterge lista de fișiere recent deschisă"
+
 msgid "Lock aspect ratio"
 msgstr "Blocare raport aspect"
 
@@ -2688,6 +2769,22 @@ msgstr "Caractere separatoare:"
 msgid "The character(s) that separate the file name and the frame number"
 msgstr "Caracterele care separă numele fișierului și numărul cadrului"
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr "Trunchiere imagini"
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr "Trunchiază imaginile exportate până la porțiunea lor vizibilă, considerând fiecare pixel cu un canal alfa non-zero ca fiind vizibil."
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr "Decupează conținutul imaginii la selecție"
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr "Exportă doar conținut care se află în limitele unei zone selectate."
+
 msgid "Close"
 msgstr "Închide"
 
@@ -3034,6 +3131,10 @@ msgstr "Rază inferioară:"
 msgid "Text:"
 msgstr "Text:"
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr "Adâncime:"
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr "Dimensiune pixeli:"
@@ -3045,12 +3146,19 @@ msgstr "Pasul curbei:"
 msgid "Horizontal alignment:"
 msgstr "Aliniere orizontală:"
 
+msgid "Vertical alignment:"
+msgstr "Aliniere verticală:"
+
 msgid "Left"
 msgstr "Stânga"
 
 msgid "Right"
 msgstr "Dreapta"
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr "Spațiere între linii:"
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr "Energie:"
diff --git a/Translations/ru_RU.po b/Translations/ru_RU.po
index 1b497651b..b3e16a3f1 100644
--- a/Translations/ru_RU.po
+++ b/Translations/ru_RU.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Russian\n"
 "Language: ru_RU\n"
-"PO-Revision-Date: 2024-08-01 22:06\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "OK"
@@ -231,6 +231,10 @@ msgstr "Отразить по вертикали"
 msgid "Preferences"
 msgstr "Настройки"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "Режим тайла"
 
@@ -329,16 +333,16 @@ msgid "Mirror View"
 msgstr "Зеркальный вид"
 
 msgid "Show Grid"
-msgstr "Показывать сетку"
+msgstr "Показать сетку"
 
 msgid "Show Pixel Grid"
 msgstr "Показать пиксельную сетку"
 
 msgid "Show Rulers"
-msgstr "Показывать линейки"
+msgstr "Показать линейки"
 
 msgid "Show Guides"
-msgstr "Показывать направляющие"
+msgstr "Показать направляющие"
 
 #. Found under the View menu.
 msgid "Show Mouse Guides"
@@ -558,6 +562,10 @@ msgstr "Обзор"
 msgid "Resize:"
 msgstr "Изменить размер:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr "Отменить экспорт"
 
@@ -637,25 +645,25 @@ msgid "Export dimensions:"
 msgstr "Размер для экспорта:"
 
 msgid "Save a File"
-msgstr ""
+msgstr "Сохранить файл"
 
 msgid "Go to previous folder."
-msgstr ""
+msgstr "Перейти к предыдущей папке."
 
 msgid "Go to next folder."
-msgstr ""
+msgstr "Перейти к следующей папке."
 
 msgid "Go to parent folder."
-msgstr ""
+msgstr "Перейти в родительскую папку."
 
 msgid "Path:"
 msgstr "Путь:"
 
 msgid "Refresh files."
-msgstr ""
+msgstr "Обновить файлы."
 
 msgid "Toggle the visibility of hidden files."
-msgstr ""
+msgstr "Переключение видимости скрытых файлов."
 
 msgid "Directories & Files:"
 msgstr "Папки и файлы:"
@@ -668,23 +676,23 @@ msgstr "Файл:"
 
 #. Found in "Open" and "Save" file dialogs. Searches all file types.
 msgid "All Files"
-msgstr ""
+msgstr "Все файлы"
 
 #. Found in the "Open" file dialog. Searches all file types supported by Pixelorama.
 msgid "All Recognized"
-msgstr ""
+msgstr "Все распознано"
 
 #. Found in "Open" and "Save" file dialogs. Searches Pixelorama Project files only (.pxo).
 msgid "Pixelorama Project"
-msgstr ""
+msgstr "Проект Pixelorama"
 
 #. Found in the "Open" file dialog. Searches PNG files only. (Note that PNG is a file type and should remain untranslated)
 msgid "PNG Image"
-msgstr ""
+msgstr "Изображение PNG"
 
 #. Found in the "Open" file dialog. Searches BMP files only. (Note that BMP is a file type and should remain untranslated)
 msgid "BMP Image"
-msgstr ""
+msgstr "Изображение BMP"
 
 #. Found in the "Open" file dialog. Searches "Radiance HDR" files only. (Note that "Radiance HDR" is a file type and is better untranslated)
 msgid "Radiance HDR Image"
@@ -692,27 +700,27 @@ msgstr ""
 
 #. Found in the "Open" file dialog. Searches JPEG files only. (Note that JPEG is a file type and should remain untranslated)
 msgid "JPEG Image"
-msgstr ""
+msgstr "Изображение JPEG"
 
 #. Found in the "Open" file dialog. Searches SVG files only. (Note that SVG is a file type and should remain untranslated)
 msgid "SVG Image"
-msgstr ""
+msgstr "Изображение SVG"
 
 #. Found in the "Open" file dialog. Searches TGA files only. (Note that TGA is a file type and should remain untranslated)
 msgid "TGA Image"
-msgstr ""
+msgstr "Изображение TGA"
 
 #. Found in the "Open" file dialog. Searches WebP files only. (Note that WebP is a file type and should remain untranslated)
 msgid "WebP Image"
-msgstr ""
+msgstr "Изображение WebP"
 
 #. Found in the "Open" file dialog. Searches Pixelorama palette files only (.json).
 msgid "Pixelorama palette"
-msgstr ""
+msgstr "Палитра Pixelorama"
 
 #. Found in the "Open" file dialog. Searches GIMP palette files only (.gpl). (Note that GIMP is a software and should remain untranslated)
 msgid "GIMP palette"
-msgstr ""
+msgstr "Палитра GIMP"
 
 #. Found in the export dialog. It is a button that when pressed, shows more options.
 msgid "Advanced options"
@@ -838,6 +846,10 @@ msgstr "Системный язык"
 msgid "Display scale:"
 msgstr "Масштаб интерфейса:"
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr "Размер шрифта:"
@@ -904,6 +916,15 @@ msgstr "Источник цвета фона:"
 msgid "Background color:"
 msgstr "Цвет фона:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr "Цвет левого инструмента:"
 
@@ -952,12 +973,15 @@ msgstr "Изменять синий канал"
 msgid "Modify Alpha Channel"
 msgstr "Изменять альфа-канал"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Обесцвечивание"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Обводка"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "Отбросить тень"
 
@@ -970,6 +994,26 @@ msgstr "Смещение по Y:"
 msgid "Shadow color:"
 msgstr "Цвет тени:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr "Градиент"
 
@@ -1029,7 +1073,7 @@ msgstr "Тип:"
 msgid "Angle:"
 msgstr "Угол:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "Изменить Оттенок/Насыщенность/Яркость"
 
@@ -1051,31 +1095,31 @@ msgstr "Яркость:"
 
 #. An image effect. Adjusts the brightness and contrast of the colors of an image.
 msgid "Adjust Brightness/Contrast"
-msgstr ""
+msgstr "Регулировка яркости/контрастности"
 
 #. Refers to the brightness of the colors of an image.
 msgid "Brightness:"
-msgstr ""
+msgstr "Яркость:"
 
 #. Refers to the contrast of the colors of an image.
 msgid "Contrast:"
-msgstr ""
+msgstr "Контраст:"
 
 #. Refers to the red value of the colors of an image.
 msgid "Red value:"
-msgstr ""
+msgstr "Значение красного:"
 
 #. Refers to the green value of the colors of an image.
 msgid "Green value:"
-msgstr ""
+msgstr "Значение зеленого:"
 
 #. Refers to the blue value of the colors of an image.
 msgid "Blue value:"
-msgstr ""
+msgstr "Значение синего:"
 
 #. Refers to a color that tints an image.
 msgid "Tint color:"
-msgstr ""
+msgstr "Цвет плитки:"
 
 #. Refers to the factor (how much) a color tints an image.
 msgid "Tint effect factor:"
@@ -1099,11 +1143,11 @@ msgstr "Цвета:"
 msgid "Steps:"
 msgstr "Шаги:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr "Паллетизация"
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr "Пикселизация"
 
@@ -1358,7 +1402,9 @@ msgstr "Лассо / свободное выделение\n\n"
 msgid "Select by Drawing\n\n"
 "%s for left mouse button\n"
 "%s for right mouse button"
-msgstr ""
+msgstr "Выбор по рисунку\n\n"
+"%s левой кнопкой мыши\n"
+"%s для правой кнопки мыши"
 
 msgid "Move\n\n"
 "%s for left mouse button\n"
@@ -1497,7 +1543,7 @@ msgstr "Поменять левый и правый цвета местами."
 
 #. Tooltip of the average color button, found in the color picker panel. Shows the average color between the two selected.
 msgid "Average Color:"
-msgstr ""
+msgstr "Средний цвет:"
 
 msgid "Reset the colors to their default state (black for left, white for right)"
 msgstr "Сбросить цвета по умолчанию (слева черный, справа белый)"
@@ -1532,7 +1578,7 @@ msgstr ""
 
 #. Found under color options in the color picker panel.
 msgid "Recent Colors"
-msgstr ""
+msgstr "Недавние цвета"
 
 msgid "Left tool"
 msgstr "Левый инструмент"
@@ -1607,7 +1653,7 @@ msgid "Isometric"
 msgstr "Изометрическая"
 
 msgid "All"
-msgstr "Обе"
+msgstr "Все"
 
 #. Found in the Preferences, in the Canvas tab.
 msgid "Rectangular grid size:"
@@ -1715,6 +1761,10 @@ msgstr "Ограничение кадров в секунду:"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "Устанавливает лимит на количество кадров в секунду для программы. Чем ниже это число, тем меньше используется процессор, но приложение становится медленнее, дольше реагирует на действия, а движения будут менее плавными. 0 значит отсутствие лимита."
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr "Максимум шагов отмены:"
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "Приостановить приложение при потере фокуса"
@@ -1725,7 +1775,7 @@ msgstr "Если этот параметр включен, то, когда ок
 
 #. An option found in the preferences, under the Performance section. Refers to the screen being updated (redrawn) continuously.
 msgid "Update continuously"
-msgstr ""
+msgstr "Постоянно обновлять"
 
 #. Found in the preferences, hint of the "Update continuously" option.
 msgid "If this is toggled on, the application will redraw the screen continuously, even while it's not used. Turning this off helps lower CPU and GPU usage when idle."
@@ -1992,11 +2042,19 @@ msgstr "Горизонально"
 msgid "Enable horizontal mirrored drawing"
 msgstr "Режим рисования с горизонтальным зеркалированием"
 
+msgid "Vertical"
+msgstr "Вертикально"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Режим рисования с вертикальным зеркалированием"
 
-msgid "Vertical"
-msgstr "Вертикально"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "Текущий кадр:"
@@ -2008,22 +2066,22 @@ msgid "Current frame as spritesheet"
 msgstr "Текущий кадр как спрайт лист"
 
 msgid "Jump to the first frame"
-msgstr ""
+msgstr "Перейти к первому кадру"
 
 msgid "Go to the previous frame"
+msgstr "На предыдущий кадр"
+
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
-msgstr ""
-
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
-msgstr ""
+msgstr "На следующий кадр"
 
 msgid "Jump to the last frame"
-msgstr ""
+msgstr "Перейти на последний кадр"
 
 msgid "Timeline settings"
 msgstr "Настройка таймлана"
@@ -2157,7 +2215,7 @@ msgstr "Новый тег"
 
 #. Found on the popup menu that appears when a user right-clicks on a frame button. When clicked, it allows users to paste/import tags from other opened projects.
 msgid "Import Tag"
-msgstr ""
+msgstr "Импорт метки"
 
 #. Found on the popup menu that appears when a user right-clicks on a frame button. When clicked, the order of the selected frames is being reversed.
 msgid "Reverse Frames"
@@ -2211,6 +2269,10 @@ msgstr "Объединить слой ниже с текущим"
 msgid "Blend mode:"
 msgstr "Режим смешивания:"
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr "Пропуск"
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr "Нормальный"
@@ -2516,6 +2578,26 @@ msgstr "Цвет заливки по умолчанию:"
 msgid "A default background color of a new image"
 msgstr "Цвет фона по умолчанию для нового изображения"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr "Заблокировать соотношение сторон"
 
@@ -2523,7 +2605,7 @@ msgid "Portrait"
 msgstr "Портретная"
 
 msgid "Landscape"
-msgstr "Горизонтальное"
+msgstr "Горизонтальная"
 
 msgid "Templates:"
 msgstr "Шаблоны:"
@@ -2683,6 +2765,22 @@ msgstr "Разделитель символов:"
 msgid "The character(s) that separate the file name and the frame number"
 msgstr "Символы, разделяющие имя файла и номер кадра"
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "Закрыть"
 
@@ -3028,6 +3126,10 @@ msgstr "Нижний радиус:"
 msgid "Text:"
 msgstr "Текст:"
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr "Размер пикселя:"
@@ -3039,12 +3141,19 @@ msgstr "Шаг кривой:"
 msgid "Horizontal alignment:"
 msgstr "Горизонтальное выравнивание:"
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr "Слева"
 
 msgid "Right"
 msgstr "Справа"
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr "Энергия:"
@@ -3159,11 +3268,11 @@ msgstr ""
 
 #. Removes the selected reference image.
 msgid "Remove"
-msgstr ""
+msgstr "Удалить"
 
 #. A tooltip to tell users to hold the Shift key while clicking the remove button
 msgid "Hold Shift while pressing to instantly remove."
-msgstr ""
+msgstr "Удерживайте Shift, чтобы мгновенно удалить."
 
 #. Shown in the confirmation dialog for removing a reference image.
 msgid "Are you sure you want to remove this reference image? It will not be deleted from your file system."
@@ -3195,31 +3304,31 @@ msgstr "Масштабировать выбранное референсное 
 
 #. Button to select no reference images in the Reference Images panel.
 msgid "none"
-msgstr ""
+msgstr "нет"
 
 #. Resets the Transform of the selected reference image on the canvas.
 msgid "Reset Transform"
-msgstr ""
+msgstr "Сбросить трансформацию"
 
 #. Position of the selected reference image on the canvas.
 msgid "Position"
-msgstr ""
+msgstr "Положение"
 
 #. Scale of the selected reference image on the canvas.
 msgid "Scale"
-msgstr ""
+msgstr "Масштаб"
 
 #. Rotation of the selected reference image on the canvas.
 msgid "Rotation"
-msgstr ""
+msgstr "Поворот"
 
 #. Toggle filter of the selected reference image on the canvas.
 msgid "Filter"
-msgstr ""
+msgstr "Фильтр"
 
 #. Opacity of the selected reference image on the canvas.
 msgid "Opacity"
-msgstr ""
+msgstr "Непрозрачность"
 
 #. Color clamping of the selected reference image on the canvas.
 msgid "Color Clamping"
diff --git a/Translations/si_LK.po b/Translations/si_LK.po
index 0a9716f8b..178dd210c 100644
--- a/Translations/si_LK.po
+++ b/Translations/si_LK.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Sinhala\n"
 "Language: si_LK\n"
-"PO-Revision-Date: 2024-08-01 22:07\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "හරි"
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr "පිරික්සන්න"
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr "පද්ධතියේ භාෂාව"
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr "පියවර:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/sk_SK.po b/Translations/sk_SK.po
index 7ae663596..1b0b2de66 100644
--- a/Translations/sk_SK.po
+++ b/Translations/sk_SK.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Slovak\n"
 "Language: sk_SK\n"
-"PO-Revision-Date: 2024-08-03 00:15\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/sl_SI.po b/Translations/sl_SI.po
index b3671aefa..d93252fb0 100644
--- a/Translations/sl_SI.po
+++ b/Translations/sl_SI.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Slovenian\n"
 "Language: sl_SI\n"
-"PO-Revision-Date: 2024-08-03 00:15\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/sq_AL.po b/Translations/sq_AL.po
index 7cfcef81d..7596b659a 100644
--- a/Translations/sq_AL.po
+++ b/Translations/sq_AL.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Albanian\n"
 "Language: sq_AL\n"
-"PO-Revision-Date: 2024-08-01 22:06\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "Ne rregull"
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/sr_SP.po b/Translations/sr_SP.po
index 781381c2c..f084e0976 100644
--- a/Translations/sr_SP.po
+++ b/Translations/sr_SP.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Serbian (Cyrillic)\n"
 "Language: sr_SP\n"
-"PO-Revision-Date: 2024-08-01 22:06\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "ОК"
@@ -231,6 +231,10 @@ msgstr "Обрни вертикално"
 msgid "Preferences"
 msgstr "Подешавања"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "Бешавни режим"
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr "Системски језик"
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr "Тип:"
 msgid "Angle:"
 msgstr "Угао:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr "Боја:"
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/sv_SE.po b/Translations/sv_SE.po
index add5c6404..f876ca01c 100644
--- a/Translations/sv_SE.po
+++ b/Translations/sv_SE.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Swedish\n"
 "Language: sv_SE\n"
-"PO-Revision-Date: 2024-08-01 22:07\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "Okej"
@@ -231,6 +231,10 @@ msgstr "Vänd Lodrätt"
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr "Bläddra"
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr "Typ:"
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr "Färger:"
 msgid "Steps:"
 msgstr "Steg:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,11 +1984,19 @@ msgstr "Horisontell"
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr "Vertikal"
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
-msgstr "Vertikal"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr ""
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "Stäng"
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/sw_KE.po b/Translations/sw_KE.po
index 56134b6b6..b148c7051 100644
--- a/Translations/sw_KE.po
+++ b/Translations/sw_KE.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Swahili\n"
 "Language: sw_KE\n"
-"PO-Revision-Date: 2024-08-03 00:15\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/ta_IN.po b/Translations/ta_IN.po
index 6722db854..4880f4fd9 100644
--- a/Translations/ta_IN.po
+++ b/Translations/ta_IN.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Tamil\n"
 "Language: ta_IN\n"
-"PO-Revision-Date: 2024-08-03 00:15\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/th_TH.po b/Translations/th_TH.po
index d41f3e3dc..c0b81d2f0 100644
--- a/Translations/th_TH.po
+++ b/Translations/th_TH.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Thai\n"
 "Language: th_TH\n"
-"PO-Revision-Date: 2024-08-03 00:15\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/tlh_AA.po b/Translations/tlh_AA.po
index c96ac168e..fa6e14540 100644
--- a/Translations/tlh_AA.po
+++ b/Translations/tlh_AA.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Klingon\n"
 "Language: tlh_AA\n"
-"PO-Revision-Date: 2024-08-03 01:17\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr ""
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/tr_TR.po b/Translations/tr_TR.po
index 7e3863d9d..849b69329 100644
--- a/Translations/tr_TR.po
+++ b/Translations/tr_TR.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Turkish\n"
 "Language: tr_TR\n"
-"PO-Revision-Date: 2024-08-02 13:34\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "Tamam"
@@ -233,6 +233,10 @@ msgstr "Dikey Döndür"
 msgid "Preferences"
 msgstr "Tercihler"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "Döşeme Kipi"
 
@@ -560,6 +564,10 @@ msgstr "Gözat"
 msgid "Resize:"
 msgstr "Boyutlandır:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr "Kalite:"
+
 msgid "Cancel Export"
 msgstr "Dışarı Aktarmayı İptal Et"
 
@@ -840,6 +848,10 @@ msgstr "Sistem Dili"
 msgid "Display scale:"
 msgstr "Ekran ölçeği:"
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr "Yazı tipi boyutu:"
@@ -906,6 +918,15 @@ msgstr "Şuradan arkaplan rengi:"
 msgid "Background color:"
 msgstr "Arkaplan rengi:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr "Sol araç rengi:"
 
@@ -954,12 +975,15 @@ msgstr "Mavi Kanalı Düzenle"
 msgid "Modify Alpha Channel"
 msgstr "Alfa Kanalını Düzenle"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Doygunluğu azalt"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Anahat"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "Gölge"
 
@@ -972,6 +996,26 @@ msgstr "Uzaklık Y:"
 msgid "Shadow color:"
 msgstr "Gölge rengi:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr "Gauss Bulanıklığı"
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr "Bulanıklık türü:"
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr "Bulanıklık miktarı:"
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr "Bulanıklık yarıçapı:"
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr "Bulanıklık yönü:"
+
 msgid "Gradient"
 msgstr "Gradyan"
 
@@ -1032,7 +1076,7 @@ msgstr "Tür:"
 msgid "Angle:"
 msgstr "Açı:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "Renk Tonu/Doygunluk/Değer Ayarla"
 
@@ -1102,11 +1146,11 @@ msgstr "Renkler:"
 msgid "Steps:"
 msgstr "Adımlar:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr "Paletleştir"
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr "Pikselleştir"
 
@@ -1722,6 +1766,10 @@ msgstr "Uygulama FPS sınırını ayarla:"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "Uygulamanın saniyedeki kare sınırını ayarlar. Rakam ne kadar düşük olursa CPU kullanımı o kadar düşük olur, ancak uygulama daha yavaş, kesikli ve tepkisiz hale gelir. 0, sınır olmadığı anlamına gelir."
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr "Azami geri alma adımı:"
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "Odağı kaybettiğinde uygulamayı duraklat"
@@ -1999,11 +2047,19 @@ msgstr "Yatay"
 msgid "Enable horizontal mirrored drawing"
 msgstr "Çizim için yatay aynamalamayı etkinleştir"
 
+msgid "Vertical"
+msgstr "Dikey"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Çizim için dikey aynamalamayı etkinleştir"
 
-msgid "Vertical"
-msgstr "Dikey"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr "Tuval merkezine taşı"
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr "Görünüm merkezine taşı"
 
 msgid "Current frame:"
 msgstr "Geçerli kare:"
@@ -2020,11 +2076,11 @@ msgstr "İlk kareye atla"
 msgid "Go to the previous frame"
 msgstr "Önceki kareye git"
 
-msgid "Play the animation backwards (from end to beginning)"
-msgstr "Animasyonu tersten oynat (sondan başa)"
+msgid "Play the animation backwards"
+msgstr "Canlandırmayı geri oynat"
 
-msgid "Play the animation forward (from beginning to end)"
-msgstr "Animasyonu ileri oynat (baştan sonra)"
+msgid "Play the animation forward"
+msgstr "Canlandırmayı ileri oynat"
 
 msgid "Go to the next frame"
 msgstr "Sonraki kareye git"
@@ -2218,6 +2274,10 @@ msgstr "Aktif katmanı alttaki katmanla birleştir"
 msgid "Blend mode:"
 msgstr "Harmanlama kipi:"
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr "Doğrudan geçiş"
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr "Normal"
@@ -2523,6 +2583,26 @@ msgstr "Varsayılan dolgu rengi:"
 msgid "A default background color of a new image"
 msgstr "Yeni resmin varsayılan arkaplan rengi"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr "Tercihler'deki tüm seçenekleri sıfırla"
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr "Zaman çizelgesi seçeneklerini sıfırla"
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr "Tüm araç seçeneklerini sıfırla"
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr "Tüm uzantıları kaldır"
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr "Geçerli seçilmiş dosya listesini temizle"
+
 msgid "Lock aspect ratio"
 msgstr "En boy oranını kilitle"
 
@@ -2690,6 +2770,22 @@ msgstr "Ayırcı karakter(ler):"
 msgid "The character(s) that separate the file name and the frame number"
 msgstr "Dosya adını ve kare numarasını ayıran karakter(ler)"
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr "Görüntüleri kırp"
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr "Dışa aktarılan görüntüleri görünür kısımlarına kırpar, sıfır olmayan alfa kanalına sahip her piksel görünür kabul edilir."
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "Kapat"
 
@@ -3036,6 +3132,10 @@ msgstr "Alt yarıçap:"
 msgid "Text:"
 msgstr "Metin:"
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr "Piksel boyutu:"
@@ -3047,12 +3147,19 @@ msgstr "Eğri adımı:"
 msgid "Horizontal alignment:"
 msgstr "Yatay hizalama:"
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr "Sol"
 
 msgid "Right"
 msgstr "Sağ"
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr "Enerji:"
diff --git a/Translations/uk_UA.po b/Translations/uk_UA.po
index 9e3365fda..60e4f530e 100644
--- a/Translations/uk_UA.po
+++ b/Translations/uk_UA.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Ukrainian\n"
 "Language: uk_UA\n"
-"PO-Revision-Date: 2024-08-01 22:07\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "Гаразд"
@@ -233,6 +233,10 @@ msgstr "Віддзеркалити по вертикалі"
 msgid "Preferences"
 msgstr "Налаштування"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "Безшовний режим"
 
@@ -560,6 +564,10 @@ msgstr "Огляд"
 msgid "Resize:"
 msgstr "Змінити розмір:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr "Скасувати експорт"
 
@@ -840,6 +848,10 @@ msgstr "Мова системи"
 msgid "Display scale:"
 msgstr "Масштаб екрану:"
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -906,6 +918,15 @@ msgstr "Колір фону з:"
 msgid "Background color:"
 msgstr "Колір фону:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr "Колір лівого інструменту:"
 
@@ -954,12 +975,15 @@ msgstr "Змінити синій канал"
 msgid "Modify Alpha Channel"
 msgstr "Змінити альфа-канал"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "Знебарвлення"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "Контур"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "Тінь"
 
@@ -972,6 +996,26 @@ msgstr "Зсув за Y:"
 msgid "Shadow color:"
 msgstr "Колір тіні:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr "Градієнт"
 
@@ -1032,7 +1076,7 @@ msgstr "Тип:"
 msgid "Angle:"
 msgstr "Кут:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "Змінити Відтінки/Насиченість/Яскравість"
 
@@ -1102,11 +1146,11 @@ msgstr "Кольори:"
 msgid "Steps:"
 msgstr "Кроки:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1713,6 +1757,10 @@ msgstr "Встановити обмеження FPS додатку:"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "Встановлює обмеження кадрів в секунду. Чим нижче значення, ти менше додаток використовує CPU, але програма починає працювати повільніше, стає менш стабільною і може не реагувати. 0 означає, що немає ніяких обмежень."
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "Призупиняти програму, коли вона не має фокусу"
@@ -1990,11 +2038,19 @@ msgstr "Горизонтально"
 msgid "Enable horizontal mirrored drawing"
 msgstr "Увімкнути горизонтальне віддзеркалення для малювання"
 
+msgid "Vertical"
+msgstr "Вертикально"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "Увімкнути вертикальне віддзеркалення для малювання"
 
-msgid "Vertical"
-msgstr "Вертикально"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "Поточний кадр:"
@@ -2011,10 +2067,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2209,6 +2265,10 @@ msgstr "Об’єднати поточний шар з шаром під ним"
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2514,6 +2574,26 @@ msgstr "Стандартний колір заливки:"
 msgid "A default background color of a new image"
 msgstr "Стандартний фоновий колір нового зображення"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr "Зафіксувати співвідношення сторін"
 
@@ -2681,6 +2761,22 @@ msgstr "Роздільні символ(и):"
 msgid "The character(s) that separate the file name and the frame number"
 msgstr "Символ(и), що розділяють назву файлу та номер кадра"
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "Закрити"
 
@@ -3026,6 +3122,10 @@ msgstr "Нижній радіус:"
 msgid "Text:"
 msgstr "Текст:"
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr "Розмір пікселя:"
@@ -3037,12 +3137,19 @@ msgstr "Крок кривої:"
 msgid "Horizontal alignment:"
 msgstr "Горизонтальне вирівнювання:"
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr "Вліво"
 
 msgid "Right"
 msgstr "Вправо"
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr "Енергія:"
diff --git a/Translations/vi_VN.po b/Translations/vi_VN.po
index 63ecedb6c..03222f24f 100644
--- a/Translations/vi_VN.po
+++ b/Translations/vi_VN.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Vietnamese\n"
 "Language: vi_VN\n"
-"PO-Revision-Date: 2024-08-01 22:07\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "OK"
@@ -231,6 +231,10 @@ msgstr ""
 msgid "Preferences"
 msgstr ""
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr ""
 
@@ -555,6 +559,10 @@ msgstr ""
 msgid "Resize:"
 msgstr ""
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr ""
 
@@ -835,6 +843,10 @@ msgstr ""
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr ""
 msgid "Modify Alpha Channel"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr ""
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr ""
 
@@ -1026,7 +1070,7 @@ msgstr ""
 msgid "Angle:"
 msgstr ""
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr ""
 
@@ -1096,11 +1140,11 @@ msgstr ""
 msgid "Steps:"
 msgstr ""
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1660,6 +1704,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1936,10 +1984,18 @@ msgstr ""
 msgid "Enable horizontal mirrored drawing"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Enable vertical mirrored drawing"
 msgstr ""
 
-msgid "Vertical"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
 msgstr ""
 
 msgid "Current frame:"
@@ -1957,10 +2013,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2153,6 +2209,10 @@ msgstr ""
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2457,6 +2517,26 @@ msgstr ""
 msgid "A default background color of a new image"
 msgstr ""
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2624,6 +2704,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr ""
 
@@ -2966,6 +3062,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2977,12 +3077,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/Translations/zh_CN.po b/Translations/zh_CN.po
index 790d6e6c7..8093e4f3e 100644
--- a/Translations/zh_CN.po
+++ b/Translations/zh_CN.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Chinese Simplified\n"
 "Language: zh_CN\n"
-"PO-Revision-Date: 2024-08-01 22:07\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "确定"
@@ -233,6 +233,10 @@ msgstr "垂直翻转"
 msgid "Preferences"
 msgstr "首选项"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "平铺模式"
 
@@ -560,6 +564,10 @@ msgstr "浏览"
 msgid "Resize:"
 msgstr "调整大小:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr "质量:"
+
 msgid "Cancel Export"
 msgstr "取消导出"
 
@@ -840,6 +848,10 @@ msgstr "系统语言"
 msgid "Display scale:"
 msgstr "显示比例:"
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr "字体大小:"
@@ -906,6 +918,15 @@ msgstr "背景颜色从:"
 msgid "Background color:"
 msgstr "背景颜色:"
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr "左侧工具颜色:"
 
@@ -954,12 +975,15 @@ msgstr "修改蓝色通道"
 msgid "Modify Alpha Channel"
 msgstr "修改 Alpha 通道"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "去饱和"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "轮廓"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr "阴影"
 
@@ -972,6 +996,26 @@ msgstr "偏移 Y:"
 msgid "Shadow color:"
 msgstr "阴影颜色:"
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr "高斯模糊"
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr "模糊类型:"
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr "模糊数量:"
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr "模糊半径:"
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr "模糊方向:"
+
 msgid "Gradient"
 msgstr "渐变"
 
@@ -1032,7 +1076,7 @@ msgstr "类型:"
 msgid "Angle:"
 msgstr "角度:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "调整色相/饱和度/值"
 
@@ -1054,35 +1098,35 @@ msgstr "值:"
 
 #. An image effect. Adjusts the brightness and contrast of the colors of an image.
 msgid "Adjust Brightness/Contrast"
-msgstr ""
+msgstr "调整亮度/对比度"
 
 #. Refers to the brightness of the colors of an image.
 msgid "Brightness:"
-msgstr ""
+msgstr "亮度:"
 
 #. Refers to the contrast of the colors of an image.
 msgid "Contrast:"
-msgstr ""
+msgstr "对比度:"
 
 #. Refers to the red value of the colors of an image.
 msgid "Red value:"
-msgstr ""
+msgstr "红色值:"
 
 #. Refers to the green value of the colors of an image.
 msgid "Green value:"
-msgstr ""
+msgstr "绿色值:"
 
 #. Refers to the blue value of the colors of an image.
 msgid "Blue value:"
-msgstr ""
+msgstr "蓝色值:"
 
 #. Refers to a color that tints an image.
 msgid "Tint color:"
-msgstr ""
+msgstr "色调颜色:"
 
 #. Refers to the factor (how much) a color tints an image.
 msgid "Tint effect factor:"
-msgstr ""
+msgstr "色调影响因素:"
 
 msgid "Apply"
 msgstr "应用"
@@ -1102,11 +1146,11 @@ msgstr "颜色:"
 msgid "Steps:"
 msgstr "步骤:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr "调色板"
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr "像素化"
 
@@ -1721,6 +1765,10 @@ msgstr "设置应用程序 FPS 限制:"
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr "设置应用程序帧每秒的限制。 数字越低,CPU 使用率越低,但应用程序变慢,限制且反应不灵。0 表示没有限制。"
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr "最大撤消步骤:"
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr "失去焦点时暂停应用程序"
@@ -1731,11 +1779,11 @@ msgstr "如果打开此选项,当应用程序的窗口失去焦点时,它会
 
 #. An option found in the preferences, under the Performance section. Refers to the screen being updated (redrawn) continuously.
 msgid "Update continuously"
-msgstr ""
+msgstr "持续更新"
 
 #. Found in the preferences, hint of the "Update continuously" option.
 msgid "If this is toggled on, the application will redraw the screen continuously, even while it's not used. Turning this off helps lower CPU and GPU usage when idle."
-msgstr ""
+msgstr "如果启用此功能,应用程序将不断重绘屏幕,即使不使用屏幕也是如此。关闭此功能有助于降低空闲时的 CPU 和 GPU 使用率。"
 
 #. An option found in the preferences, under the Performance section.
 msgid "Enable window transparency"
@@ -1998,11 +2046,19 @@ msgstr "水平"
 msgid "Enable horizontal mirrored drawing"
 msgstr "启用水平镜像绘图"
 
+msgid "Vertical"
+msgstr "垂直"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "启用垂直镜像绘图"
 
-msgid "Vertical"
-msgstr "垂直"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "当前帧:"
@@ -2019,11 +2075,11 @@ msgstr "跳转到第一帧"
 msgid "Go to the previous frame"
 msgstr "转到上一帧"
 
-msgid "Play the animation backwards (from end to beginning)"
-msgstr "向后播放动画(从结尾到开头)"
+msgid "Play the animation backwards"
+msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
-msgstr "向前播放动画(从头到尾)"
+msgid "Play the animation forward"
+msgstr ""
 
 msgid "Go to the next frame"
 msgstr "转到下一帧"
@@ -2163,7 +2219,7 @@ msgstr "新建标签"
 
 #. Found on the popup menu that appears when a user right-clicks on a frame button. When clicked, it allows users to paste/import tags from other opened projects.
 msgid "Import Tag"
-msgstr ""
+msgstr "导入标签"
 
 #. Found on the popup menu that appears when a user right-clicks on a frame button. When clicked, the order of the selected frames is being reversed.
 msgid "Reverse Frames"
@@ -2217,6 +2273,10 @@ msgstr "当前图层与下面图层合并"
 msgid "Blend mode:"
 msgstr "混合模式:"
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr "通过"
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr "Normal"
@@ -2522,6 +2582,26 @@ msgstr "默认填充颜色:"
 msgid "A default background color of a new image"
 msgstr "设置新建图像的背景颜色"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr "锁定长宽比"
 
@@ -2689,6 +2769,22 @@ msgstr "分隔符:"
 msgid "The character(s) that separate the file name and the frame number"
 msgstr "分隔文件名称和帧编号的字符(秒)"
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr "裁剪图像"
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr "将导出的图像变为可见部分,考虑到非零透明通道的每个像素。"
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "关闭"
 
@@ -3034,6 +3130,10 @@ msgstr "下半径:"
 msgid "Text:"
 msgstr "文本:"
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr "像素大小:"
@@ -3045,12 +3145,19 @@ msgstr "曲线步骤:"
 msgid "Horizontal alignment:"
 msgstr "水平对齐"
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr "左"
 
 msgid "Right"
 msgstr "右"
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr "能量:"
diff --git a/Translations/zh_TW.po b/Translations/zh_TW.po
index 6a35be7d4..3a0c17970 100644
--- a/Translations/zh_TW.po
+++ b/Translations/zh_TW.po
@@ -10,7 +10,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Chinese Traditional\n"
 "Language: zh_TW\n"
-"PO-Revision-Date: 2024-08-01 22:07\n"
+"PO-Revision-Date: 2024-10-17 14:11\n"
 
 msgid "OK"
 msgstr "確定"
@@ -231,6 +231,10 @@ msgstr "垂直翻轉"
 msgid "Preferences"
 msgstr "偏好設定"
 
+#. An option in the View menu. When selected, the canvas is being placed on the center of the screen.
+msgid "Center Canvas"
+msgstr ""
+
 msgid "Tile Mode"
 msgstr "拼圖模式"
 
@@ -555,6 +559,10 @@ msgstr "瀏覽"
 msgid "Resize:"
 msgstr "調整大小:"
 
+#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
+msgid "Quality:"
+msgstr ""
+
 msgid "Cancel Export"
 msgstr "取消輸出"
 
@@ -835,6 +843,10 @@ msgstr "系統語言"
 msgid "Display scale:"
 msgstr ""
 
+#. Refers to the font of a text.
+msgid "Font:"
+msgstr ""
+
 #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text.
 msgid "Font size:"
 msgstr ""
@@ -901,6 +913,15 @@ msgstr ""
 msgid "Background color:"
 msgstr ""
 
+#. Found in the preferences, under the Tools category.
+msgid "Share options between the left and the right tools"
+msgstr ""
+
+#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference.
+msgid "If this is enabled, options will be synced between the left and the right tool.\n"
+"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+msgstr ""
+
 msgid "Left tool color:"
 msgstr ""
 
@@ -949,12 +970,15 @@ msgstr "修改藍色色版"
 msgid "Modify Alpha Channel"
 msgstr "修改透明色版"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Desaturation"
 msgstr "去飽和"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Outline"
 msgstr "描邊"
 
+#. An image effect. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Drop Shadow"
 msgstr ""
 
@@ -967,6 +991,26 @@ msgstr ""
 msgid "Shadow color:"
 msgstr ""
 
+#. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur
+msgid "Gaussian Blur"
+msgstr ""
+
+#. The type of the Gaussian blur, an image effect.
+msgid "Blur type:"
+msgstr ""
+
+#. The applied amount of Gaussian blur, an image effect.
+msgid "Blur amount:"
+msgstr ""
+
+#. The applied radius of Gaussian blur, an image effect.
+msgid "Blur radius:"
+msgstr ""
+
+#. The applied direction of Gaussian blur, an image effect.
+msgid "Blur direction:"
+msgstr ""
+
 msgid "Gradient"
 msgstr "顏色漸變"
 
@@ -1026,7 +1070,7 @@ msgstr "類型:"
 msgid "Angle:"
 msgstr "角度:"
 
-#. An image effect. Adjusts the hue, saturation and value of the colors of an image.
+#. An image effect. Adjusts the hue, saturation and value of the colors of an image. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Adjust Hue/Saturation/Value"
 msgstr "調整色相、飽和度、亮度"
 
@@ -1096,11 +1140,11 @@ msgstr "顏色:"
 msgid "Steps:"
 msgstr "色階數:"
 
-#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
+#. An image effect. It maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Palettize"
 msgstr ""
 
-#. An image effect. It makes the input image pixelated.
+#. An image effect. It makes the input image pixelated. See Pixelorama's documentation page for more information: https://www.oramainteractive.com/Pixelorama-Docs/user_manual/image_effects
 msgid "Pixelize"
 msgstr ""
 
@@ -1670,6 +1714,10 @@ msgstr ""
 msgid "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
 msgstr ""
 
+#. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use.
+msgid "Max undo steps:"
+msgstr ""
+
 #. An option found in the preferences, under the Performance section.
 msgid "Pause application when it loses focus"
 msgstr ""
@@ -1946,11 +1994,19 @@ msgstr "水平"
 msgid "Enable horizontal mirrored drawing"
 msgstr "開啟水平鏡像"
 
+msgid "Vertical"
+msgstr "垂直"
+
 msgid "Enable vertical mirrored drawing"
 msgstr "開啟垂直鏡像"
 
-msgid "Vertical"
-msgstr "垂直"
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to canvas center"
+msgstr ""
+
+#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide.
+msgid "Move to view center"
+msgstr ""
 
 msgid "Current frame:"
 msgstr "目前影格:"
@@ -1967,10 +2023,10 @@ msgstr ""
 msgid "Go to the previous frame"
 msgstr ""
 
-msgid "Play the animation backwards (from end to beginning)"
+msgid "Play the animation backwards"
 msgstr ""
 
-msgid "Play the animation forward (from beginning to end)"
+msgid "Play the animation forward"
 msgstr ""
 
 msgid "Go to the next frame"
@@ -2164,6 +2220,10 @@ msgstr "合併此圖層與下面的圖層"
 msgid "Blend mode:"
 msgstr ""
 
+#. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending.
+msgid "Pass through"
+msgstr ""
+
 #. Adjective, refers to something usual/regular, such as the normal blend mode.
 msgid "Normal"
 msgstr ""
@@ -2468,6 +2528,26 @@ msgstr "預設背景顏色:"
 msgid "A default background color of a new image"
 msgstr "新檔案的預設背景顏色"
 
+#. Found in the preferences, under the Reset category.
+msgid "Reset all options available in the Preferences"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset timeline options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Reset all tool options"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Remove all extensions"
+msgstr ""
+
+#. Found in the preferences, under the Reset category.
+msgid "Clear the recently opened file list"
+msgstr ""
+
 msgid "Lock aspect ratio"
 msgstr ""
 
@@ -2635,6 +2715,22 @@ msgstr ""
 msgid "The character(s) that separate the file name and the frame number"
 msgstr ""
 
+#. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images.
+msgid "Trim images"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "trim images" option.
+msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+msgstr ""
+
+#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area.
+msgid "Clip image content to selection"
+msgstr ""
+
+#. Found in the export dialog. Tooltip of the "clip image content to selection" option.
+msgid "Only export content that is within the bounds of a selected area."
+msgstr ""
+
 msgid "Close"
 msgstr "關閉"
 
@@ -2977,6 +3073,10 @@ msgstr ""
 msgid "Text:"
 msgstr ""
 
+#. Refers to the depth of something, such as the depth of a 3D object.
+msgid "Depth:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D.
 msgid "Pixel size:"
 msgstr ""
@@ -2988,12 +3088,19 @@ msgstr ""
 msgid "Horizontal alignment:"
 msgstr ""
 
+msgid "Vertical alignment:"
+msgstr ""
+
 msgid "Left"
 msgstr ""
 
 msgid "Right"
 msgstr ""
 
+#. Refers to the vertical space between lines in a text.
+msgid "Line spacing:"
+msgstr ""
+
 #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines.
 msgid "Energy:"
 msgstr ""
diff --git a/addons/README.md b/addons/README.md
index e42e3318d..263765b85 100644
--- a/addons/README.md
+++ b/addons/README.md
@@ -24,7 +24,7 @@ Files extracted from source:
 ## godot-dockable-container
 
 - Upstream: https://github.com/gilzoide/godot-dockable-container
-- Version: Based on [ddff84aa31e466101b4a75c7ff68d3a82701e387](https://github.com/gilzoide/godot-dockable-container/commit/ddff84aa31e466101b4a75c7ff68d3a82701e387), but with changes in layout.gd that add a `save_on_change` variable and a `save()` method.
+- Version: Based on [e852cbeeb3f06f62c559898b4cf5756858367766](https://github.com/OverloadedOrama/godot-dockable-container/commit/e852cbeeb3f06f62c559898b4cf5756858367766), but with changes in layout.gd that add a `save_on_change` variable and a `save()` method.
 - License: [CC0-1.0](https://github.com/gilzoide/godot-dockable-container/blob/main/LICENSE)
 
 ## SmartSlicer
diff --git a/addons/dockable_container/dockable_container.gd b/addons/dockable_container/dockable_container.gd
index 3913a68f5..496d683ab 100644
--- a/addons/dockable_container/dockable_container.gd
+++ b/addons/dockable_container/dockable_container.gd
@@ -54,6 +54,7 @@ const DragNDropPanel := preload("drag_n_drop_panel.gd")
 
 var _layout := DockableLayout.new()
 var _panel_container := Container.new()
+var _windows_container := Container.new()
 var _split_container := Container.new()
 var _drag_n_drop_panel := DragNDropPanel.new()
 var _drag_panel: DockablePanel
@@ -80,6 +81,8 @@ func _ready() -> void:
 	_split_container.name = "_split_container"
 	_split_container.mouse_filter = MOUSE_FILTER_PASS
 	_panel_container.add_child(_split_container)
+	_windows_container.name = "_windows_container"
+	get_parent().call_deferred("add_child", _windows_container)
 
 	_drag_n_drop_panel.name = "_drag_n_drop_panel"
 	_drag_n_drop_panel.mouse_filter = MOUSE_FILTER_PASS
@@ -161,6 +164,61 @@ func _drop_data(_position: Vector2, data) -> void:
 	queue_sort()
 
 
+func _add_floating_options(tab_container: DockablePanel) -> void:
+	var options := PopupMenu.new()
+	options.add_item("Make Floating")
+	options.id_pressed.connect(_toggle_floating.bind(tab_container))
+	options.size.y = 0
+	_windows_container.add_child(options)
+	tab_container.set_popup(options)
+
+
+## Required when converting a window back to panel.
+func _refresh_tabs_visible() -> void:
+	if tabs_visible:
+		tabs_visible = false
+		await get_tree().process_frame
+		await get_tree().process_frame
+		tabs_visible = true
+
+
+func _toggle_floating(_id: int, tab_container: DockablePanel) -> void:
+	var node_name := tab_container.get_tab_title(tab_container.current_tab)
+	var node := get_node(node_name)
+	if is_instance_valid(node):
+		var tab_position := maxi(tab_container.leaf.find_child(node), 0)
+		_convert_to_window(node, {"tab_position": tab_position, "tab_container": tab_container})
+	else:
+		print("Node ", node_name, " not found!")
+
+
+## Converts a panel to floating window.
+func _convert_to_window(content: Control, previous_data := {}) -> void:
+	var old_owner := content.owner
+	var data := {}
+	if content.name in layout.windows:
+		data = layout.windows[content.name]
+	var window := FloatingWindow.new(content, data)
+	_windows_container.add_child(window)
+	window.show()
+	_refresh_tabs_visible()
+	window.close_requested.connect(_convert_to_panel.bind(window, old_owner, previous_data))
+	window.data_changed.connect(layout.save_window_properties)
+
+
+## Converts a floating window into a panel.
+func _convert_to_panel(window: FloatingWindow, old_owner: Node, previous_data := {}) -> void:
+	var content := window.window_content
+	window.remove_child(content)
+	window.destroy()
+	add_child(content)
+	content.owner = old_owner
+	if previous_data.has("tab_container") and is_instance_valid(previous_data["tab_container"]):
+		var tab_position := previous_data.get("tab_position", 0) as int
+		previous_data["tab_container"].leaf.insert_node(tab_position, content)
+	_refresh_tabs_visible()
+
+
 func set_control_as_current_tab(control: Control) -> void:
 	assert(
 		control.get_parent_control() == self,
@@ -195,6 +253,16 @@ func set_layout(value: DockableLayout) -> void:
 		_layout.changed.disconnect(queue_sort)
 	_layout = value
 	_layout.changed.connect(queue_sort)
+	for window in _windows_container.get_children():
+		if not window.name in _layout.windows and window is FloatingWindow:
+			window.prevent_data_erasure = true  # We don't want to delete data.
+			window.close_requested.emit()  # Removes the window.
+			continue
+	for window: String in _layout.windows.keys():
+		var panel := find_child(window, false)
+		# Only those windows get created which were not previously created.
+		if panel:
+			_convert_to_window(panel)
 	_layout_dirty = true
 	queue_sort()
 
@@ -202,7 +270,7 @@ func set_layout(value: DockableLayout) -> void:
 func set_use_hidden_tabs_for_min_size(value: bool) -> void:
 	_use_hidden_tabs_for_min_size = value
 	for i in range(1, _panel_container.get_child_count()):
-		var panel = _panel_container.get_child(i)
+		var panel := _panel_container.get_child(i) as DockablePanel
 		panel.use_hidden_tabs_for_min_size = value
 
 
@@ -401,6 +469,7 @@ func _get_panel(idx: int) -> DockablePanel:
 	panel.hide_single_tab = _hide_single_tab
 	panel.use_hidden_tabs_for_min_size = _use_hidden_tabs_for_min_size
 	panel.set_tabs_rearrange_group(maxi(0, rearrange_group))
+	_add_floating_options(panel)
 	_panel_container.add_child(panel)
 	panel.tab_layout_changed.connect(_on_panel_tab_layout_changed.bind(panel))
 	return panel
diff --git a/addons/dockable_container/dockable_panel.gd b/addons/dockable_container/dockable_panel.gd
index d522027dd..a32bf6b28 100644
--- a/addons/dockable_container/dockable_panel.gd
+++ b/addons/dockable_container/dockable_panel.gd
@@ -40,6 +40,8 @@ func _exit_tree() -> void:
 	active_tab_rearranged.disconnect(_on_tab_changed)
 	tab_selected.disconnect(_on_tab_selected)
 	tab_changed.disconnect(_on_tab_changed)
+	if is_instance_valid(get_popup()):
+		get_popup().queue_free()
 
 
 func track_nodes(nodes: Array[Control], new_leaf: DockableLayoutPanel) -> void:
diff --git a/addons/dockable_container/floating_window.gd b/addons/dockable_container/floating_window.gd
new file mode 100644
index 000000000..386aa18b6
--- /dev/null
+++ b/addons/dockable_container/floating_window.gd
@@ -0,0 +1,73 @@
+class_name FloatingWindow
+extends Window
+
+## Emitted when the window's position or size changes, or when it's closed.
+signal data_changed
+
+var window_content: Control
+var prevent_data_erasure := false
+var _is_initialized := false
+
+
+func _init(content: Control, data := {}) -> void:
+	window_content = content
+	title = window_content.name
+	name = window_content.name
+	min_size = window_content.get_minimum_size()
+	unresizable = false
+	wrap_controls = true
+	always_on_top = true
+	ready.connect(_deserialize.bind(data))
+
+
+func _ready() -> void:
+	set_deferred(&"size", Vector2(300, 300))
+	await get_tree().process_frame
+	await get_tree().process_frame
+	if get_tree().current_scene.get_window().gui_embed_subwindows:
+		position = DisplayServer.window_get_size() / 2 - size / 2
+	else:
+		position = DisplayServer.screen_get_usable_rect().size / 2 - size / 2
+
+
+func _input(event: InputEvent) -> void:
+	if event is InputEventMouse:
+		# Emit `data_changed` when the window is being moved.
+		if not window_content.get_rect().has_point(event.position) and _is_initialized:
+			data_changed.emit(name, serialize())
+
+
+func serialize() -> Dictionary:
+	return {"size": size, "position": position}
+
+
+func _deserialize(data: Dictionary) -> void:
+	window_content.get_parent().remove_child(window_content)
+	window_content.visible = true
+	window_content.global_position = Vector2.ZERO
+	add_child(window_content)
+	size_changed.connect(window_size_changed)
+	if "position" in data:
+		await get_tree().process_frame
+		await get_tree().process_frame
+		position = data["position"]
+	if "size" in data:
+		set_deferred(&"size", data["size"])
+	_is_initialized = true
+
+
+func window_size_changed() -> void:
+	window_content.size = size
+	window_content.position = Vector2.ZERO
+	if _is_initialized:
+		data_changed.emit(name, serialize())
+
+
+func destroy() -> void:
+	size_changed.disconnect(window_size_changed)
+	queue_free()
+
+
+func _exit_tree() -> void:
+	if _is_initialized and !prevent_data_erasure:
+		data_changed.emit(name, {})
diff --git a/addons/dockable_container/icon.svg.import b/addons/dockable_container/icon.svg.import
index 0fab7ae49..595e57305 100644
--- a/addons/dockable_container/icon.svg.import
+++ b/addons/dockable_container/icon.svg.import
@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/icon.svg-35635e7bbda4487d4b2942da1d987df8.cte
 [params]
 
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/channel_pack=0
 mipmaps/generate=false
diff --git a/addons/dockable_container/layout.gd b/addons/dockable_container/layout.gd
index d0eb28938..409418185 100644
--- a/addons/dockable_container/layout.gd
+++ b/addons/dockable_container/layout.gd
@@ -23,6 +23,14 @@ enum { MARGIN_LEFT, MARGIN_RIGHT, MARGIN_TOP, MARGIN_BOTTOM, MARGIN_CENTER }
 		if value != _hidden_tabs:
 			_hidden_tabs = value
 			changed.emit()
+## A [Dictionary] of [StringName] and [Dictionary], containing data such as position and size.
+@export var windows := {}:
+	get:
+		return _windows
+	set(value):
+		if value != _windows:
+			_windows = value
+			changed.emit()
 @export var save_on_change := false:
 	set(value):
 		save_on_change = value
@@ -36,6 +44,7 @@ enum { MARGIN_LEFT, MARGIN_RIGHT, MARGIN_TOP, MARGIN_BOTTOM, MARGIN_CENTER }
 var _changed_signal_queued := false
 var _first_leaf: DockableLayoutPanel
 var _hidden_tabs: Dictionary
+var _windows: Dictionary
 var _leaf_by_node_name: Dictionary
 var _root: DockableLayoutNode = DockableLayoutPanel.new()
 
@@ -182,6 +191,15 @@ func set_tab_hidden(name: String, hidden: bool) -> void:
 	_on_root_changed()
 
 
+func save_window_properties(window_name: StringName, data: Dictionary) -> void:
+	var new_windows = windows.duplicate(true)
+	if data.is_empty():
+		new_windows.erase(window_name)
+	else:
+		new_windows[window_name] = data
+	windows = new_windows
+
+
 func is_tab_hidden(name: String) -> bool:
 	return _hidden_tabs.get(name, false)
 
diff --git a/addons/dockable_container/samples/TestScene.tscn b/addons/dockable_container/samples/TestScene.tscn
index 80ca9cc6a..311440da1 100644
--- a/addons/dockable_container/samples/TestScene.tscn
+++ b/addons/dockable_container/samples/TestScene.tscn
@@ -31,6 +31,8 @@ resource_name = "Layout"
 script = ExtResource("2")
 root = SubResource("Resource_hl8y1")
 hidden_tabs = {}
+windows = {}
+save_on_change = false
 
 [sub_resource type="Resource" id="Resource_ntwfj"]
 resource_name = "Tabs"
@@ -71,6 +73,8 @@ resource_name = "Layout"
 script = ExtResource("2")
 root = SubResource("Resource_jhibs")
 hidden_tabs = {}
+windows = {}
+save_on_change = false
 
 [node name="SampleScene" type="VBoxContainer"]
 anchors_preset = 15
diff --git a/assets/fonts/Roboto-Italic.ttf b/assets/fonts/Roboto-Italic.ttf
deleted file mode 100644
index 6a1cee5b2..000000000
Binary files a/assets/fonts/Roboto-Italic.ttf and /dev/null differ
diff --git a/assets/fonts/Roboto-Italic.ttf.import b/assets/fonts/Roboto-Italic.ttf.import
deleted file mode 100644
index 0e97040ef..000000000
--- a/assets/fonts/Roboto-Italic.ttf.import
+++ /dev/null
@@ -1,33 +0,0 @@
-[remap]
-
-importer="font_data_dynamic"
-type="FontFile"
-uid="uid://cy5lkye8vdr5t"
-path="res://.godot/imported/Roboto-Italic.ttf-1459ab7510a4240cd642ef0fe9caff7f.fontdata"
-
-[deps]
-
-source_file="res://assets/fonts/Roboto-Italic.ttf"
-dest_files=["res://.godot/imported/Roboto-Italic.ttf-1459ab7510a4240cd642ef0fe9caff7f.fontdata"]
-
-[params]
-
-Rendering=null
-antialiasing=1
-generate_mipmaps=false
-multichannel_signed_distance_field=false
-msdf_pixel_range=8
-msdf_size=48
-allow_system_fallback=true
-force_autohinter=false
-hinting=1
-subpixel_positioning=1
-oversampling=0.0
-Fallbacks=null
-fallbacks=[]
-Compress=null
-compress=true
-preload=[]
-language_support={}
-script_support={}
-opentype_features={}
diff --git a/assets/fonts/Roboto-Regular.ttf.import b/assets/fonts/Roboto-Regular.ttf.import
index 5a7e24eaa..619a45c73 100644
--- a/assets/fonts/Roboto-Regular.ttf.import
+++ b/assets/fonts/Roboto-Regular.ttf.import
@@ -15,6 +15,7 @@ dest_files=["res://.godot/imported/Roboto-Regular.ttf-e67097a08cc051e6b179dbaab4
 Rendering=null
 antialiasing=1
 generate_mipmaps=false
+disable_embedded_bitmaps=true
 multichannel_signed_distance_field=false
 msdf_pixel_range=8
 msdf_size=48
diff --git a/assets/graphics/misc/check_plain.png b/assets/graphics/misc/check_plain.png
new file mode 100644
index 000000000..a589dba2f
Binary files /dev/null and b/assets/graphics/misc/check_plain.png differ
diff --git a/assets/graphics/misc/check_plain.png.import b/assets/graphics/misc/check_plain.png.import
new file mode 100644
index 000000000..9cfa45d09
--- /dev/null
+++ b/assets/graphics/misc/check_plain.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d267xalp3p7ru"
+path="res://.godot/imported/check_plain.png-6f37534ee70be1593b3b1be7b4c80f23.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/misc/check_plain.png"
+dest_files=["res://.godot/imported/check_plain.png-6f37534ee70be1593b3b1be7b4c80f23.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/close.png b/assets/graphics/misc/close.png
new file mode 100644
index 000000000..654153791
Binary files /dev/null and b/assets/graphics/misc/close.png differ
diff --git a/assets/graphics/misc/close.png.import b/assets/graphics/misc/close.png.import
new file mode 100644
index 000000000..6f658d111
--- /dev/null
+++ b/assets/graphics/misc/close.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bnc78807k1xjv"
+path="res://.godot/imported/close.png-5725622e3d74d3527ee26e70390098f4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/misc/close.png"
+dest_files=["res://.godot/imported/close.png-5725622e3d74d3527ee26e70390098f4.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/layouts/Default.tres b/assets/layouts/Default.tres
index 95b086465..6f753dda1 100644
--- a/assets/layouts/Default.tres
+++ b/assets/layouts/Default.tres
@@ -175,4 +175,5 @@ hidden_tabs = {
 "Recorder": true,
 "Second Canvas": true
 }
+windows = {}
 save_on_change = false
diff --git a/assets/layouts/Tallscreen.tres b/assets/layouts/Tallscreen.tres
index 99b36b946..cf1252892 100644
--- a/assets/layouts/Tallscreen.tres
+++ b/assets/layouts/Tallscreen.tres
@@ -145,4 +145,5 @@ hidden_tabs = {
 "Recorder": true,
 "Second Canvas": true
 }
+windows = {}
 save_on_change = false
diff --git a/export_presets.cfg b/export_presets.cfg
index f61a79cd0..04d5efc40 100644
--- a/export_presets.cfg
+++ b/export_presets.cfg
@@ -1,8 +1,9 @@
 [preset.0]
 
-name="Linux/X11 64-bit"
-platform="Linux/X11"
+name="Linux 64-bit"
+platform="Linux"
 runnable=true
+advanced_options=false
 dedicated_server=false
 custom_features=""
 export_filter="exclude"
@@ -14,6 +15,7 @@ encryption_include_filters=""
 encryption_exclude_filters=""
 encrypt_pck=false
 encrypt_directory=false
+script_export_mode=2
 
 [preset.0.options]
 
@@ -21,10 +23,8 @@ custom_template/debug=""
 custom_template/release=""
 debug/export_console_wrapper=1
 binary_format/embed_pck=false
-texture_format/bptc=true
-texture_format/s3tc=true
-texture_format/etc=false
-texture_format/etc2=false
+texture_format/s3tc_bptc=true
+texture_format/etc2_astc=false
 binary_format/architecture="x86_64"
 ssh_remote_deploy/enabled=false
 ssh_remote_deploy/host="user@host_ip"
@@ -38,6 +38,10 @@ unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
 ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
 kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
 rm -rf \"{temp_dir}\""
+texture_format/bptc=true
+texture_format/s3tc=true
+texture_format/etc=false
+texture_format/etc2=false
 binary_format/64_bits=true
 texture_format/no_bptc_fallbacks=true
 
@@ -46,6 +50,7 @@ texture_format/no_bptc_fallbacks=true
 name="Windows Desktop 64-bit"
 platform="Windows Desktop"
 runnable=true
+advanced_options=false
 dedicated_server=false
 custom_features=""
 export_filter="exclude"
@@ -57,6 +62,7 @@ encryption_include_filters=""
 encryption_exclude_filters=""
 encrypt_pck=false
 encrypt_directory=false
+script_export_mode=2
 
 [preset.1.options]
 
@@ -64,10 +70,8 @@ custom_template/debug=""
 custom_template/release=""
 debug/export_console_wrapper=1
 binary_format/embed_pck=false
-texture_format/bptc=true
-texture_format/s3tc=true
-texture_format/etc=false
-texture_format/etc2=false
+texture_format/s3tc_bptc=true
+texture_format/etc2_astc=false
 binary_format/architecture="x86_64"
 codesign/enable=false
 codesign/timestamp=true
@@ -79,14 +83,16 @@ application/modify_resources=true
 application/icon="res://assets/graphics/icons/icon.ico"
 application/console_wrapper_icon=""
 application/icon_interpolation=4
-application/file_version="1.0.2.0"
-application/product_version="1.0.2.0"
+application/file_version="1.0.5.0"
+application/product_version="1.0.5.0"
 application/company_name="Orama Interactive"
 application/product_name="Pixelorama"
 application/file_description="Pixelorama - Your free & open-source sprite editor"
 application/copyright="Orama Interactive and contributors 2019-present"
 application/trademarks=""
 application/export_angle=0
+application/export_d3d12=0
+application/d3d12_agility_sdk_multiarch=true
 ssh_remote_deploy/enabled=false
 ssh_remote_deploy/host="user@host_ip"
 ssh_remote_deploy/port="22"
@@ -104,6 +110,10 @@ Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorActi
 ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
 Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
 Remove-Item -Recurse -Force '{temp_dir}'"
+texture_format/bptc=true
+texture_format/s3tc=true
+texture_format/etc=false
+texture_format/etc2=false
 binary_format/64_bits=true
 texture_format/no_bptc_fallbacks=true
 
@@ -112,6 +122,7 @@ texture_format/no_bptc_fallbacks=true
 name="Web"
 platform="Web"
 runnable=true
+advanced_options=false
 dedicated_server=false
 custom_features=""
 export_filter="exclude"
@@ -123,12 +134,14 @@ encryption_include_filters=""
 encryption_exclude_filters=""
 encrypt_pck=false
 encrypt_directory=false
+script_export_mode=2
 
 [preset.2.options]
 
 custom_template/debug=""
 custom_template/release=""
 variant/extensions_support=false
+variant/thread_support=false
 vram_texture_compression/for_desktop=true
 vram_texture_compression/for_mobile=false
 html/export_icon=true
@@ -138,6 +151,7 @@ html/canvas_resize_policy=2
 html/focus_canvas_on_start=true
 html/experimental_virtual_keyboard=false
 progressive_web_app/enabled=true
+progressive_web_app/ensure_cross_origin_isolation_headers=true
 progressive_web_app/offline_page=""
 progressive_web_app/display=1
 progressive_web_app/orientation=0
@@ -151,6 +165,7 @@ progressive_web_app/background_color=Color(0, 0, 0, 1)
 name="Windows Desktop 32-bit"
 platform="Windows Desktop"
 runnable=false
+advanced_options=false
 dedicated_server=false
 custom_features=""
 export_filter="exclude"
@@ -162,6 +177,7 @@ encryption_include_filters=""
 encryption_exclude_filters=""
 encrypt_pck=false
 encrypt_directory=false
+script_export_mode=2
 
 [preset.3.options]
 
@@ -169,10 +185,8 @@ custom_template/debug=""
 custom_template/release=""
 debug/export_console_wrapper=1
 binary_format/embed_pck=false
-texture_format/bptc=true
-texture_format/s3tc=true
-texture_format/etc=false
-texture_format/etc2=false
+texture_format/s3tc_bptc=true
+texture_format/etc2_astc=false
 binary_format/architecture="x86_32"
 codesign/enable=false
 codesign/timestamp=true
@@ -184,14 +198,16 @@ application/modify_resources=true
 application/icon="res://assets/graphics/icons/icon.ico"
 application/console_wrapper_icon=""
 application/icon_interpolation=4
-application/file_version="1.0.2.0"
-application/product_version="1.0.2.0"
+application/file_version="1.0.5.0"
+application/product_version="1.0.5.0"
 application/company_name="Orama Interactive"
 application/product_name="Pixelorama"
 application/file_description="Pixelorama - Your free & open-source sprite editor"
 application/copyright="Orama Interactive and contributors 2019-present"
 application/trademarks=""
 application/export_angle=0
+application/export_d3d12=0
+application/d3d12_agility_sdk_multiarch=true
 ssh_remote_deploy/enabled=false
 ssh_remote_deploy/host="user@host_ip"
 ssh_remote_deploy/port="22"
@@ -209,14 +225,19 @@ Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorActi
 ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
 Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
 Remove-Item -Recurse -Force '{temp_dir}'"
+texture_format/bptc=true
+texture_format/s3tc=true
+texture_format/etc=false
+texture_format/etc2=false
 binary_format/64_bits=false
 texture_format/no_bptc_fallbacks=true
 
 [preset.4]
 
-name="Linux/X11 32-bit"
-platform="Linux/X11"
+name="Linux 32-bit"
+platform="Linux"
 runnable=false
+advanced_options=false
 dedicated_server=false
 custom_features=""
 export_filter="exclude"
@@ -228,6 +249,7 @@ encryption_include_filters=""
 encryption_exclude_filters=""
 encrypt_pck=false
 encrypt_directory=false
+script_export_mode=2
 
 [preset.4.options]
 
@@ -235,10 +257,8 @@ custom_template/debug=""
 custom_template/release=""
 debug/export_console_wrapper=1
 binary_format/embed_pck=false
-texture_format/bptc=true
-texture_format/s3tc=true
-texture_format/etc=false
-texture_format/etc2=false
+texture_format/s3tc_bptc=true
+texture_format/etc2_astc=false
 binary_format/architecture="x86_32"
 ssh_remote_deploy/enabled=false
 ssh_remote_deploy/host="user@host_ip"
@@ -252,14 +272,19 @@ unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
 ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
 kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
 rm -rf \"{temp_dir}\""
+texture_format/bptc=true
+texture_format/s3tc=true
+texture_format/etc=false
+texture_format/etc2=false
 binary_format/64_bits=false
 texture_format/no_bptc_fallbacks=true
 
 [preset.5]
 
-name="Linux/X11 ARM64"
-platform="Linux/X11"
+name="Linux ARM64"
+platform="Linux"
 runnable=false
+advanced_options=false
 dedicated_server=false
 custom_features=""
 export_filter="exclude"
@@ -271,6 +296,7 @@ encryption_include_filters=""
 encryption_exclude_filters=""
 encrypt_pck=false
 encrypt_directory=false
+script_export_mode=2
 
 [preset.5.options]
 
@@ -278,10 +304,8 @@ custom_template/debug=""
 custom_template/release=""
 debug/export_console_wrapper=1
 binary_format/embed_pck=false
-texture_format/bptc=true
-texture_format/s3tc=true
-texture_format/etc=false
-texture_format/etc2=false
+texture_format/s3tc_bptc=true
+texture_format/etc2_astc=false
 binary_format/architecture="arm64"
 ssh_remote_deploy/enabled=false
 ssh_remote_deploy/host="user@host_ip"
@@ -295,14 +319,19 @@ unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
 ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
 kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
 rm -rf \"{temp_dir}\""
+texture_format/bptc=true
+texture_format/s3tc=true
+texture_format/etc=false
+texture_format/etc2=false
 binary_format/64_bits=false
 texture_format/no_bptc_fallbacks=true
 
 [preset.6]
 
-name="Linux/X11 ARM32"
-platform="Linux/X11"
+name="Linux ARM32"
+platform="Linux"
 runnable=false
+advanced_options=false
 dedicated_server=false
 custom_features=""
 export_filter="exclude"
@@ -314,6 +343,7 @@ encryption_include_filters=""
 encryption_exclude_filters=""
 encrypt_pck=false
 encrypt_directory=false
+script_export_mode=2
 
 [preset.6.options]
 
@@ -321,10 +351,8 @@ custom_template/debug=""
 custom_template/release=""
 debug/export_console_wrapper=1
 binary_format/embed_pck=false
-texture_format/bptc=true
-texture_format/s3tc=true
-texture_format/etc=false
-texture_format/etc2=false
+texture_format/s3tc_bptc=true
+texture_format/etc2_astc=false
 binary_format/architecture="arm32"
 ssh_remote_deploy/enabled=false
 ssh_remote_deploy/host="user@host_ip"
@@ -338,12 +366,17 @@ unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
 ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
 kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
 rm -rf \"{temp_dir}\""
+texture_format/bptc=true
+texture_format/s3tc=true
+texture_format/etc=false
+texture_format/etc2=false
 
 [preset.7]
 
 name="macOS"
 platform="macOS"
 runnable=true
+advanced_options=false
 dedicated_server=false
 custom_features=""
 export_filter="exclude"
@@ -355,6 +388,7 @@ encryption_include_filters=""
 encryption_exclude_filters=""
 encrypt_pck=false
 encrypt_directory=false
+script_export_mode=2
 
 [preset.7.options]
 
@@ -368,13 +402,14 @@ application/icon_interpolation=4
 application/bundle_identifier="com.orama-interactive.pixelorama"
 application/signature=""
 application/app_category="Graphics-design"
-application/short_version="1.0.2"
-application/version="1.0.2"
+application/short_version="1.0.5"
+application/version="1.0.5"
 application/copyright="Orama Interactive and contributors 2019-present"
 application/copyright_localized={}
 application/min_macos_version="10.12"
 application/export_angle=0
 display/high_res=true
+application/additional_plist_content=""
 xcode/platform_build="14C18"
 xcode/sdk_version="13.1"
 xcode/sdk_build="22C55"
@@ -433,6 +468,148 @@ privacy/network_volumes_usage_description=""
 privacy/network_volumes_usage_description_localized={}
 privacy/removable_volumes_usage_description=""
 privacy/removable_volumes_usage_description_localized={}
+privacy/tracking_enabled=false
+privacy/tracking_domains=PackedStringArray()
+privacy/collected_data/name/collected=false
+privacy/collected_data/name/linked_to_user=false
+privacy/collected_data/name/used_for_tracking=false
+privacy/collected_data/name/collection_purposes=0
+privacy/collected_data/email_address/collected=false
+privacy/collected_data/email_address/linked_to_user=false
+privacy/collected_data/email_address/used_for_tracking=false
+privacy/collected_data/email_address/collection_purposes=0
+privacy/collected_data/phone_number/collected=false
+privacy/collected_data/phone_number/linked_to_user=false
+privacy/collected_data/phone_number/used_for_tracking=false
+privacy/collected_data/phone_number/collection_purposes=0
+privacy/collected_data/physical_address/collected=false
+privacy/collected_data/physical_address/linked_to_user=false
+privacy/collected_data/physical_address/used_for_tracking=false
+privacy/collected_data/physical_address/collection_purposes=0
+privacy/collected_data/other_contact_info/collected=false
+privacy/collected_data/other_contact_info/linked_to_user=false
+privacy/collected_data/other_contact_info/used_for_tracking=false
+privacy/collected_data/other_contact_info/collection_purposes=0
+privacy/collected_data/health/collected=false
+privacy/collected_data/health/linked_to_user=false
+privacy/collected_data/health/used_for_tracking=false
+privacy/collected_data/health/collection_purposes=0
+privacy/collected_data/fitness/collected=false
+privacy/collected_data/fitness/linked_to_user=false
+privacy/collected_data/fitness/used_for_tracking=false
+privacy/collected_data/fitness/collection_purposes=0
+privacy/collected_data/payment_info/collected=false
+privacy/collected_data/payment_info/linked_to_user=false
+privacy/collected_data/payment_info/used_for_tracking=false
+privacy/collected_data/payment_info/collection_purposes=0
+privacy/collected_data/credit_info/collected=false
+privacy/collected_data/credit_info/linked_to_user=false
+privacy/collected_data/credit_info/used_for_tracking=false
+privacy/collected_data/credit_info/collection_purposes=0
+privacy/collected_data/other_financial_info/collected=false
+privacy/collected_data/other_financial_info/linked_to_user=false
+privacy/collected_data/other_financial_info/used_for_tracking=false
+privacy/collected_data/other_financial_info/collection_purposes=0
+privacy/collected_data/precise_location/collected=false
+privacy/collected_data/precise_location/linked_to_user=false
+privacy/collected_data/precise_location/used_for_tracking=false
+privacy/collected_data/precise_location/collection_purposes=0
+privacy/collected_data/coarse_location/collected=false
+privacy/collected_data/coarse_location/linked_to_user=false
+privacy/collected_data/coarse_location/used_for_tracking=false
+privacy/collected_data/coarse_location/collection_purposes=0
+privacy/collected_data/sensitive_info/collected=false
+privacy/collected_data/sensitive_info/linked_to_user=false
+privacy/collected_data/sensitive_info/used_for_tracking=false
+privacy/collected_data/sensitive_info/collection_purposes=0
+privacy/collected_data/contacts/collected=false
+privacy/collected_data/contacts/linked_to_user=false
+privacy/collected_data/contacts/used_for_tracking=false
+privacy/collected_data/contacts/collection_purposes=0
+privacy/collected_data/emails_or_text_messages/collected=false
+privacy/collected_data/emails_or_text_messages/linked_to_user=false
+privacy/collected_data/emails_or_text_messages/used_for_tracking=false
+privacy/collected_data/emails_or_text_messages/collection_purposes=0
+privacy/collected_data/photos_or_videos/collected=false
+privacy/collected_data/photos_or_videos/linked_to_user=false
+privacy/collected_data/photos_or_videos/used_for_tracking=false
+privacy/collected_data/photos_or_videos/collection_purposes=0
+privacy/collected_data/audio_data/collected=false
+privacy/collected_data/audio_data/linked_to_user=false
+privacy/collected_data/audio_data/used_for_tracking=false
+privacy/collected_data/audio_data/collection_purposes=0
+privacy/collected_data/gameplay_content/collected=false
+privacy/collected_data/gameplay_content/linked_to_user=false
+privacy/collected_data/gameplay_content/used_for_tracking=false
+privacy/collected_data/gameplay_content/collection_purposes=0
+privacy/collected_data/customer_support/collected=false
+privacy/collected_data/customer_support/linked_to_user=false
+privacy/collected_data/customer_support/used_for_tracking=false
+privacy/collected_data/customer_support/collection_purposes=0
+privacy/collected_data/other_user_content/collected=false
+privacy/collected_data/other_user_content/linked_to_user=false
+privacy/collected_data/other_user_content/used_for_tracking=false
+privacy/collected_data/other_user_content/collection_purposes=0
+privacy/collected_data/browsing_history/collected=false
+privacy/collected_data/browsing_history/linked_to_user=false
+privacy/collected_data/browsing_history/used_for_tracking=false
+privacy/collected_data/browsing_history/collection_purposes=0
+privacy/collected_data/search_hhistory/collected=false
+privacy/collected_data/search_hhistory/linked_to_user=false
+privacy/collected_data/search_hhistory/used_for_tracking=false
+privacy/collected_data/search_hhistory/collection_purposes=0
+privacy/collected_data/user_id/collected=false
+privacy/collected_data/user_id/linked_to_user=false
+privacy/collected_data/user_id/used_for_tracking=false
+privacy/collected_data/user_id/collection_purposes=0
+privacy/collected_data/device_id/collected=false
+privacy/collected_data/device_id/linked_to_user=false
+privacy/collected_data/device_id/used_for_tracking=false
+privacy/collected_data/device_id/collection_purposes=0
+privacy/collected_data/purchase_history/collected=false
+privacy/collected_data/purchase_history/linked_to_user=false
+privacy/collected_data/purchase_history/used_for_tracking=false
+privacy/collected_data/purchase_history/collection_purposes=0
+privacy/collected_data/product_interaction/collected=false
+privacy/collected_data/product_interaction/linked_to_user=false
+privacy/collected_data/product_interaction/used_for_tracking=false
+privacy/collected_data/product_interaction/collection_purposes=0
+privacy/collected_data/advertising_data/collected=false
+privacy/collected_data/advertising_data/linked_to_user=false
+privacy/collected_data/advertising_data/used_for_tracking=false
+privacy/collected_data/advertising_data/collection_purposes=0
+privacy/collected_data/other_usage_data/collected=false
+privacy/collected_data/other_usage_data/linked_to_user=false
+privacy/collected_data/other_usage_data/used_for_tracking=false
+privacy/collected_data/other_usage_data/collection_purposes=0
+privacy/collected_data/crash_data/collected=false
+privacy/collected_data/crash_data/linked_to_user=false
+privacy/collected_data/crash_data/used_for_tracking=false
+privacy/collected_data/crash_data/collection_purposes=0
+privacy/collected_data/performance_data/collected=false
+privacy/collected_data/performance_data/linked_to_user=false
+privacy/collected_data/performance_data/used_for_tracking=false
+privacy/collected_data/performance_data/collection_purposes=0
+privacy/collected_data/other_diagnostic_data/collected=false
+privacy/collected_data/other_diagnostic_data/linked_to_user=false
+privacy/collected_data/other_diagnostic_data/used_for_tracking=false
+privacy/collected_data/other_diagnostic_data/collection_purposes=0
+privacy/collected_data/environment_scanning/collected=false
+privacy/collected_data/environment_scanning/linked_to_user=false
+privacy/collected_data/environment_scanning/used_for_tracking=false
+privacy/collected_data/environment_scanning/collection_purposes=0
+privacy/collected_data/hands/collected=false
+privacy/collected_data/hands/linked_to_user=false
+privacy/collected_data/hands/used_for_tracking=false
+privacy/collected_data/hands/collection_purposes=0
+privacy/collected_data/head/collected=false
+privacy/collected_data/head/linked_to_user=false
+privacy/collected_data/head/used_for_tracking=false
+privacy/collected_data/head/collection_purposes=0
+privacy/collected_data/other_data_types/collected=false
+privacy/collected_data/other_data_types/linked_to_user=false
+privacy/collected_data/other_data_types/used_for_tracking=false
+privacy/collected_data/other_data_types/collection_purposes=0
 ssh_remote_deploy/enabled=false
 ssh_remote_deploy/host="user@host_ip"
 ssh_remote_deploy/port="22"
@@ -450,6 +627,7 @@ rm -rf \"{temp_dir}\""
 name="Android"
 platform="Android"
 runnable=true
+advanced_options=false
 dedicated_server=false
 custom_features=""
 export_filter="exclude"
@@ -461,12 +639,16 @@ encryption_include_filters=""
 encryption_exclude_filters=""
 encrypt_pck=false
 encrypt_directory=false
+script_export_mode=2
 
 [preset.8.options]
 
 custom_template/debug=""
 custom_template/release=""
 gradle_build/use_gradle_build=false
+gradle_build/gradle_build_directory=""
+gradle_build/android_source_template=""
+gradle_build/compress_native_libraries=false
 gradle_build/export_format=0
 gradle_build/min_sdk=""
 gradle_build/target_sdk=""
@@ -475,7 +657,7 @@ architectures/arm64-v8a=true
 architectures/x86=false
 architectures/x86_64=false
 version/code=1
-version/name="1.0"
+version/name="1.0.5"
 package/unique_name="com.orama_interactive.pixelorama"
 package/name="Pixelorama"
 package/signed=true
@@ -567,13 +749,13 @@ permissions/install_location_provider=false
 permissions/install_packages=false
 permissions/install_shortcut=false
 permissions/internal_system_window=false
-permissions/internet=false
+permissions/internet=true
 permissions/kill_background_processes=false
 permissions/location_hardware=false
 permissions/manage_accounts=false
 permissions/manage_app_tokens=false
 permissions/manage_documents=false
-permissions/manage_external_storage=false
+permissions/manage_external_storage=true
 permissions/master_clear=false
 permissions/media_content_control=false
 permissions/modify_audio_settings=false
diff --git a/installer/pixelorama.nsi b/installer/pixelorama.nsi
index df1d9f8d3..3f030ebc0 100644
--- a/installer/pixelorama.nsi
+++ b/installer/pixelorama.nsi
@@ -6,7 +6,7 @@
 ; Helper variables so that we don't change 20 instances of the version for every update
 
   !define APPNAME "Pixelorama"
-  !define APPVERSION "v1.0.1"
+  !define APPVERSION "v1.0.4"
   !define COMPANYNAME "Orama Interactive"
 
 
diff --git a/installer/po/es-ES.po b/installer/po/es-ES.po
index 82074735c..4b4565177 100644
--- a/installer/po/es-ES.po
+++ b/installer/po/es-ES.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: pixelorama\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-05-07 04:44\n"
-"PO-Revision-Date: 2021-05-21 17:41\n"
+"PO-Revision-Date: 2024-08-10 16:40\n"
 "Last-Translator: \n"
 "Language-Team: Spanish\n"
 "Language: es_ES\n"
@@ -40,7 +40,7 @@ msgstr "Desinstalar ${APPNAME} ${APPVERSION}"
 #. un.SecConfig
 #: ..\pixelorama.nsi:88
 msgid "Remove configuration files (optional)"
-msgstr "Remover archivos de configuración (opcional)"
+msgstr "Eliminar archivos de configuración (opcional)"
 
 #. DESC_SecInstall
 #: ..\pixelorama.nsi:200
diff --git a/installer/po/ru-RU.po b/installer/po/ru-RU.po
index f8ff896e0..7461602d7 100644
--- a/installer/po/ru-RU.po
+++ b/installer/po/ru-RU.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: pixelorama\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-05-07 04:44\n"
-"PO-Revision-Date: 2021-05-21 17:41\n"
+"PO-Revision-Date: 2024-10-20 12:52\n"
 "Last-Translator: \n"
 "Language-Team: Russian\n"
 "Language: ru_RU\n"
@@ -65,5 +65,5 @@ msgstr "Удаляет ${APPNAME} ${APPVERSION} и удаляет все ярл
 #. DESC_un.SecConfig
 #: ..\pixelorama.nsi:204
 msgid "Removes configuration files for ${APPNAME}."
-msgstr "Удаляет файлы конфигурации для ${APPNAME}."
+msgstr "Удаление файлов конфигурации для ${APPNAME}."
 
diff --git a/project.godot b/project.godot
index 2944c9210..0961a757d 100644
--- a/project.godot
+++ b/project.godot
@@ -12,11 +12,11 @@ config_version=5
 
 config/name="Pixelorama"
 config/description="Unleash your creativity with Pixelorama, a powerful and accessible open-source pixel art multitool. Whether you want to create sprites, tiles, animations, or just express yourself in the language of pixel art, this software will realize your pixel-perfect dreams with a vast toolbox of features."
-config/version="v1.0.2-dev"
+config/version="v1.0.5-dev"
 run/main_scene="res://src/Main.tscn"
 config/use_custom_user_dir=true
 config/custom_user_dir_name="pixelorama"
-config/features=PackedStringArray("4.2")
+config/features=PackedStringArray("4.3")
 run/low_processor_mode=true
 boot_splash/bg_color=Color(0.145098, 0.145098, 0.164706, 1)
 boot_splash/image="res://assets/graphics/splash.png"
@@ -24,8 +24,8 @@ boot_splash/use_filter=false
 config/icon="res://assets/graphics/icons/icon.png"
 config/macos_native_icon="res://assets/graphics/icons/icon.icns"
 config/windows_native_icon="res://assets/graphics/icons/icon.ico"
-config/ExtensionsAPI_Version=4
-config/Pxo_Version=3
+config/ExtensionsAPI_Version=5
+config/Pxo_Version=4
 
 [audio]
 
@@ -54,6 +54,7 @@ gdscript/warnings/narrowing_conversion=false
 
 window/size/viewport_width=1280
 window/size/viewport_height=720
+window/energy_saving/keep_screen_on=false
 window/per_pixel_transparency/allowed.android=false
 window/per_pixel_transparency/allowed.web=false
 
@@ -61,6 +62,11 @@ window/per_pixel_transparency/allowed.web=false
 
 enabled=PackedStringArray("res://addons/aimg_io/plugin.cfg", "res://addons/dockable_container/plugin.cfg", "res://addons/keychain/plugin.cfg")
 
+[global_group]
+
+CanvasCameras=""
+CanvasPreviews=""
+
 [importer_defaults]
 
 texture={
@@ -89,15 +95,15 @@ texture={
 zoom_in={
 "deadzone": 0.5,
 "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":4,"canceled":false,"pressed":false,"double_click":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":61,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194437,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":61,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194437,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 zoom_out={
 "deadzone": 0.5,
 "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":5,"canceled":false,"pressed":false,"double_click":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":45,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194435,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":45,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194435,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 middle_mouse={
@@ -117,493 +123,495 @@ right_mouse={
 }
 left_pencil_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":80,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":80,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 right_pencil_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":80,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":80,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 left_eraser_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 right_eraser_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 left_fill_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":66,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":66,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 right_fill_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":66,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":66,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 left_rectangle_select_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":82,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":82,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 right_rectangle_select_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":82,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":82,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 copy={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":67,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":67,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 cut={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":88,"physical_keycode":88,"key_label":88,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":88,"physical_keycode":88,"key_label":88,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 paste={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":86,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":86,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 paste_in_place={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":true,"shift_pressed":false,"pressed":false,"keycode":86,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":true,"shift_pressed":false,"pressed":false,"keycode":86,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 delete={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194312,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194312,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 left_shading_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":85,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":85,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 right_shading_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":85,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":85,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 toggle_fullscreen={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194342,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194342,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 left_colorpicker_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":79,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":79,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 right_colorpicker_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":79,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":79,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 shift={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 ctrl={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 pan={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 , Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":3,"canceled":false,"pressed":false,"double_click":false,"script":null)
 ]
 }
 new_file={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":78,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":78,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 open_file={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":79,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":79,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 save_file={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 save_file_as={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 export_file={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 export_file_as={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 quit={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":81,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":81,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 undo={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":8,"canceled":false,"pressed":false,"double_click":false,"script":null)
 ]
 }
 redo={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":89,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":89,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(138, 9),"global_position":Vector2(147, 55),"factor":1.0,"button_index":9,"canceled":false,"pressed":true,"double_click":false,"script":null)
 ]
 }
 show_grid={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":71,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":71,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 show_rulers={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":82,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":82,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 show_guides={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":70,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":70,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 left_zoom_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 right_zoom_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 switch_colors={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":88,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":88,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 go_to_first_frame={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194317,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194317,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 go_to_last_frame={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194318,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194318,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 go_to_previous_frame={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194319,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194319,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 go_to_next_frame={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194321,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194321,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 play_backwards={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194335,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194335,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 play_forward={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194336,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194336,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 zen_mode={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194341,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194341,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 open_docs={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194332,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194332,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 mirror_view={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":77,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":77,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 left_pan_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":77,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":77,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 right_pan_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":77,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":77,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 show_pixel_grid={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":72,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":72,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 clear_selection={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":68,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":68,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 left_rectangletool_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 right_rectangletool_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 left_ellipsetool_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":67,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":67,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 right_ellipsetool_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":67,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":67,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 left_move_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":84,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":84,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 right_move_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":84,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":84,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 select_all={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":65,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":65,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 invert_selection={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":73,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":73,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 left_color_select_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 right_color_select_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 left_magic_wand_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":81,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":81,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 right_magic_wand_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":81,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":81,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 transformation_confirm={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194310,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194310,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 transformation_cancel={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194305,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194305,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 left_linetool_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":76,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":76,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 right_linetool_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":76,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":76,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 left_ellipse_select_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":89,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":89,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 right_ellipse_select_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":89,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":89,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 left_lasso_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":70,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":70,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 right_lasso_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":70,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":70,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 left_polygon_select_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":75,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":75,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 right_polygon_select_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":75,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":75,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 new_brush={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":66,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":66,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 moveable_panels={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194340,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194340,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 change_tool_mode={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 draw_create_line={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 draw_snap_angle={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 shape_perfect={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 shape_center={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 shape_displace={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 selection_add={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 selection_subtract={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 selection_intersect={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":4194326,"key_label":4194326,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":4194326,"key_label":4194326,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 transform_snap_axis={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 transform_snap_grid={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 transform_move_selection_only={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 transform_copy_selection_content={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":true,"meta_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":true,"meta_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 draw_color_picker={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 camera_left={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194319,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194319,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":2,"axis_value":-1.0,"script":null)
 ]
 }
 camera_right={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194321,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194321,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":2,"axis_value":1.0,"script":null)
 ]
 }
 camera_up={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194320,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194320,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":3,"axis_value":-1.0,"script":null)
 ]
 }
 camera_down={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194322,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194322,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":3,"axis_value":1.0,"script":null)
 ]
 }
 move_mouse_left={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194442,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194442,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
 ]
 }
 move_mouse_right={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194444,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194444,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
 ]
 }
 move_mouse_up={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194446,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194446,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
 ]
 }
 move_mouse_down={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194440,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194440,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
 ]
@@ -622,7 +630,7 @@ activate_right_tool={
 }
 open_last_project={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":84,"physical_keycode":0,"key_label":0,"unicode":84,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":84,"physical_keycode":0,"key_label":0,"unicode":84,"location":0,"echo":false,"script":null)
 ]
 }
 preferences={
@@ -719,12 +727,12 @@ about_pixelorama={
 }
 left_paint_selection_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":73,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":73,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 right_paint_selection_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":73,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":73,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 brush_size_increment={
@@ -739,12 +747,12 @@ brush_size_decrement={
 }
 new_layer={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194311,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194311,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 remove_layer={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":true,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194312,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":true,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194312,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 move_layer_up={
@@ -757,7 +765,7 @@ move_layer_down={
 }
 clone_layer={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194311,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194311,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 merge_down_layer={
@@ -766,17 +774,17 @@ merge_down_layer={
 }
 add_frame={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194311,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194311,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 remove_frame={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194312,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194312,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 clone_frame={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":4194311,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":4194311,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 move_frame_left={
@@ -825,22 +833,22 @@ onion_skinning_settings={
 }
 reference_rotate={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194326,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194326,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 reference_scale={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194328,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194328,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 reference_quick_menu={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":true,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":true,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 cancel_reference_transform={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 project_properties={
@@ -857,28 +865,52 @@ pixelize={
 }
 go_to_previous_layer={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 go_to_next_layer={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
 left_curvetool_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":74,"physical_keycode":0,"key_label":0,"unicode":106,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":74,"physical_keycode":0,"key_label":0,"unicode":106,"location":0,"echo":false,"script":null)
 ]
 }
 right_curvetool_tool={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":74,"physical_keycode":0,"key_label":0,"unicode":106,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":74,"physical_keycode":0,"key_label":0,"unicode":106,"location":0,"echo":false,"script":null)
 ]
 }
 alpha_lock={
 "deadzone": 0.5,
 "events": []
 }
+change_layer_automatically={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":0,"physical_keycode":4194328,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+gaussian_blur={
+"deadzone": 0.5,
+"events": []
+}
+next_project={
+"deadzone": 0.5,
+"events": [null, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":true,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+previous_project={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":true,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+center_canvas={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":67,"physical_keycode":0,"key_label":0,"unicode":67,"location":0,"echo":false,"script":null)
+]
+}
 
 [input_devices]
 
diff --git a/src/Autoload/DrawingAlgos.gd b/src/Autoload/DrawingAlgos.gd
index befb565e7..d3b89d733 100644
--- a/src/Autoload/DrawingAlgos.gd
+++ b/src/Autoload/DrawingAlgos.gd
@@ -53,8 +53,18 @@ func blend_layers(
 		if DisplayServer.get_name() == "headless":
 			blend_layers_headless(image, project, layer, cel, origin)
 		else:
-			var cel_image := layer.display_effects(cel)
-			textures.append(cel_image)
+			if layer is GroupLayer and layer.blend_mode != BaseLayer.BlendModes.PASS_THROUGH:
+				var cel_image := (layer as GroupLayer).blend_children(frame)
+				textures.append(cel_image)
+			else:
+				var cel_image := layer.display_effects(cel)
+				textures.append(cel_image)
+			if (
+				layer.is_blended_by_ancestor()
+				and not only_selected_cels
+				and not only_selected_layers
+			):
+				include = false
 			set_layer_metadata_image(layer, cel, metadata_image, ordered_index, include)
 	if DisplayServer.get_name() != "headless":
 		var texture_array := Texture2DArray.new()
@@ -84,9 +94,14 @@ func set_layer_metadata_image(
 		image.set_pixel(index, 1, Color())
 	# Store the clipping mask boolean
 	if layer.clipping_mask:
-		image.set_pixel(index, 3, Color.WHITE)
+		image.set_pixel(index, 3, Color.RED)
 	else:
 		image.set_pixel(index, 3, Color.BLACK)
+	if not include:
+		# Store a small red value as a way to indicate that this layer should be skipped
+		# Used for layers such as child layers of a group, so that the group layer itself can
+		# successfully be used as a clipping mask with the layer below it.
+		image.set_pixel(index, 3, Color(0.2, 0.0, 0.0, 0.0))
 
 
 func blend_layers_headless(
diff --git a/src/Autoload/Export.gd b/src/Autoload/Export.gd
index 10a6bfadc..ecd1105af 100644
--- a/src/Autoload/Export.gd
+++ b/src/Autoload/Export.gd
@@ -46,8 +46,13 @@ var custom_exporter_generators := {}
 var current_tab := ExportTab.IMAGE
 ## All frames and their layers processed/blended into images
 var processed_images: Array[ProcessedImage] = []
+## Dictionary of [Frame] and [Image] that contains all of the blended frames.
+## Changes when [method cache_blended_frames] is called.
+var blended_frames := {}
 var export_json := false
 var split_layers := false
+var trim_images := false
+var erase_unselected_area := false
 
 # Spritesheet options
 var orientation := Orientation.COLUMNS
@@ -59,6 +64,7 @@ var export_layers := 0
 var number_of_frames := 1
 var direction := AnimationDirection.FORWARD
 var resize := 100
+var save_quality := 0.75  ## Used when saving jpg and webp images. Goes from 0 to 1.
 var interpolation := Image.INTERPOLATE_NEAREST
 var include_tag_in_filename := false
 var new_dir_for_each_frame_tag := false  ## We don't need to store this after export
@@ -135,11 +141,15 @@ func remove_custom_file_format(id: int) -> void:
 
 
 func external_export(project := Global.current_project) -> void:
+	cache_blended_frames(project)
 	process_data(project)
 	export_processed_images(true, Global.export_dialog, project)
 
 
 func process_data(project := Global.current_project) -> void:
+	var frames := _calculate_frames(project)
+	if frames.size() > blended_frames.size():
+		cache_blended_frames(project)
 	match current_tab:
 		ExportTab.IMAGE:
 			process_animation(project)
@@ -147,6 +157,15 @@ func process_data(project := Global.current_project) -> void:
 			process_spritesheet(project)
 
 
+func cache_blended_frames(project := Global.current_project) -> void:
+	blended_frames.clear()
+	var frames := _calculate_frames(project)
+	for frame in frames:
+		var image := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
+		_blend_layers(image, frame)
+		blended_frames[frame] = image
+
+
 func process_spritesheet(project := Global.current_project) -> void:
 	processed_images.clear()
 	# Range of frames determined by tags
@@ -250,7 +269,7 @@ func process_spritesheet(project := Global.current_project) -> void:
 				origin.y = project.size.y * tag_origins[0]
 				origin.x = 0
 				tag_origins[0] += 1
-		_blend_layers(whole_image, frame, origin)
+		whole_image.blend_rect(blended_frames[frame], Rect2i(Vector2i.ZERO, project.size), origin)
 
 	processed_images.append(ProcessedImage.new(whole_image, 0))
 
@@ -269,7 +288,16 @@ func process_animation(project := Global.current_project) -> void:
 				)
 		else:
 			var image := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
-			_blend_layers(image, frame)
+			image.copy_from(blended_frames[frame])
+			if erase_unselected_area and project.has_selection:
+				var crop := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
+				var selection_image = project.selection_map.return_cropped_copy(project.size)
+				crop.blit_rect_mask(
+					image, selection_image, Rect2i(Vector2i.ZERO, image.get_size()), Vector2i.ZERO
+				)
+				image.copy_from(crop)
+			if trim_images:
+				image = image.get_region(image.get_used_rect())
 			var duration := frame.duration * (1.0 / project.fps)
 			processed_images.append(ProcessedImage.new(image, project.frames.find(frame), duration))
 
@@ -438,7 +466,7 @@ func export_processed_images(
 					)
 				elif project.file_format == FileFormat.JPEG:
 					JavaScriptBridge.download_buffer(
-						processed_images[i].image.save_jpg_to_buffer(),
+						processed_images[i].image.save_jpg_to_buffer(save_quality),
 						export_paths[i].get_file(),
 						"image/jpeg"
 					)
@@ -450,7 +478,7 @@ func export_processed_images(
 				elif project.file_format == FileFormat.WEBP:
 					err = processed_images[i].image.save_webp(export_paths[i])
 				elif project.file_format == FileFormat.JPEG:
-					err = processed_images[i].image.save_jpg(export_paths[i])
+					err = processed_images[i].image.save_jpg(export_paths[i], save_quality)
 				if err != OK:
 					Global.popup_error(
 						tr("File failed to save. Error code %s (%s)") % [err, error_string(err)]
diff --git a/src/Autoload/ExtensionsApi.gd b/src/Autoload/ExtensionsApi.gd
index 3c987f25e..93b8a8897 100644
--- a/src/Autoload/ExtensionsApi.gd
+++ b/src/Autoload/ExtensionsApi.gd
@@ -162,14 +162,17 @@ class GeneralAPI:
 	func get_canvas() -> Canvas:
 		return Global.canvas
 
+	## Returns a new ValueSlider. Useful for editing floating values
 	func create_value_slider() -> ValueSlider:
 		return ValueSlider.new()
 
+	## Returns a new ValueSliderV2. Useful for editing 2D vectors.
 	func create_value_slider_v2() -> ValueSliderV2:
-		return ValueSliderV2.new()
+		return preload("res://src/UI/Nodes/ValueSliderV2.tscn").instantiate()
 
+	## Returns a new ValueSliderV3. Useful for editing 3D vectors.
 	func create_value_slider_v3() -> ValueSliderV3:
-		return ValueSliderV3.new()
+		return preload("res://src/UI/Nodes/ValueSliderV3.tscn").instantiate()
 
 
 ## Gives ability to add/remove items from menus in the top bar.
@@ -238,7 +241,7 @@ class DialogAPI:
 	func get_dialogs_parent_node() -> Node:
 		return Global.control.get_node("Dialogs")
 
-	## Tells pixelorama that some dialog is about to open or close.
+	## Informs Pixelorama that some dialog is about to open or close.
 	func dialog_open(open: bool) -> void:
 		Global.dialog_open(open)
 
@@ -255,7 +258,7 @@ class PanelAPI:
 			return dockable.tabs_visible
 
 	## Adds the [param node] as a tab. Initially it's placed on the same panel as the tools tab,
-	## but can be changed through adding custom layouts.
+	## but it's position can be changed through editing a layout.
 	func add_node_as_tab(node: Node) -> void:
 		var dockable := _get_dockable_container_ui()
 		var top_menu_container := Global.top_menu_container
@@ -378,6 +381,10 @@ class PanelAPI:
 
 ## Gives access to theme related functions.
 class ThemeAPI:
+	## Returns the Themes autoload. Allows interacting with themes on a more deeper level.
+	func autoload() -> Themes:
+		return Themes
+
 	## Adds the [param theme] to [code]Edit -> Preferences -> Interface -> Themes[/code].
 	func add_theme(theme: Theme) -> void:
 		Themes.add_theme(theme)
@@ -401,25 +408,52 @@ class ThemeAPI:
 			push_error("No theme found at index: ", idx)
 			return false
 
-	## Remove the [param theme] from preferences.
+	## Removes the [param theme] from preferences.
 	func remove_theme(theme: Theme) -> void:
 		Themes.remove_theme(theme)
 		ExtensionsApi.remove_action("ThemeAPI", "add_theme")
 
+	## Adds a new font.
+	func add_font(font: Font) -> void:
+		Global.loaded_fonts.append(font)
+		Global.font_loaded.emit()
+
+	## Removes a loaded font.
+	## If that font is the current one of the interface, set it back to Roboto.
+	func remove_font(font: Font) -> void:
+		var font_index := Global.loaded_fonts.find(font)
+		if font_index == -1:
+			return
+		if Global.theme_font_index == font_index:
+			Global.theme_font_index = 1
+		Global.loaded_fonts.remove_at(font_index)
+		Global.font_loaded.emit()
+
+	## Sets a font as the current one for the interface. The font must have been
+	## added beforehand by [method add_font].
+	func set_font(font: Font) -> void:
+		var font_index := Global.loaded_fonts.find(font)
+		if font_index > -1:
+			Global.theme_font_index = font_index
+
 
 ## Gives ability to add/remove tools.
 class ToolAPI:
 	# gdlint: ignore=constant-name
 	const LayerTypes := Global.LayerTypes
 
+	## Returns the Tools autoload. Allows interacting with tools on a more deeper level.
+	func autoload() -> Tools:
+		return Tools
+
 	## Adds a tool to pixelorama with name [param tool_name] (without spaces),
 	## display name [param display_name], tool scene [param scene], layers that the tool works
 	## on [param layer_types] defined by [constant LayerTypes],
 	## [param extra_hint] (text that appears when mouse havers tool icon), primary shortcut
 	## name [param shortcut] and any extra shortcuts [param extra_shortcuts].
-	## [br][br]At the moment extensions can't make their own shortcuts so you can ignore
-	## [param shortcut] and [param extra_shortcuts].
-	## [br] to determine the position of tool in tool list, use [param insert_point]
+	## [br][br]At the moment extensions can't make their own shortcuts so you can leave
+	## [param shortcut] and [param extra_shortcuts] as [code][][/code].
+	## [br] To determine the position of tool in tool list, use [param insert_point]
 	## (if you leave it empty then the added tool will be placed at bottom)
 	func add_tool(
 		tool_name: String,
@@ -472,7 +506,7 @@ class SelectionAPI:
 	## Moves a selection to [param destination],
 	## with content if [param with_content] is [code]true[/code].
 	## If [param transform_standby] is [code]true[/code] then the transformation will not be
-	## applied immediatelyunless [kbd]Enter[/kbd] is pressed.
+	## applied immediately unless [kbd]Enter[/kbd] is pressed.
 	func move_selection(
 		destination: Vector2i, with_content := true, transform_standby := false
 	) -> void:
@@ -500,6 +534,10 @@ class SelectionAPI:
 			Global.canvas.selection.move_borders_start()
 		else:
 			Global.canvas.selection.transform_content_start()
+
+		if Global.canvas.selection.original_bitmap.is_empty():  # To avoid copying twice.
+			Global.canvas.selection.original_bitmap.copy_from(Global.current_project.selection_map)
+
 		Global.canvas.selection.big_bounding_rectangle.size = new_size
 		Global.canvas.selection.resize_selection()
 		Global.canvas.selection.move_borders_end()
@@ -527,14 +565,14 @@ class SelectionAPI:
 	func paste(in_place := false) -> void:
 		Global.canvas.selection.paste(in_place)
 
-	## Deletes the drawing on current cel enclosed within the selection's area.
+	## Erases the drawing on current cel enclosed within the selection's area.
 	func delete_content(selected_cels := true) -> void:
 		Global.canvas.selection.delete(selected_cels)
 
 
 ## Gives access to basic project manipulation functions.
 class ProjectAPI:
-	## The project currently in focus
+	## The project currently in focus.
 	var current_project: Project:
 		set(value):
 			Global.tabs.current_tab = Global.projects.find(value)
@@ -575,9 +613,9 @@ class ProjectAPI:
 	func get_project_info(project: Project) -> Dictionary:
 		return project.serialize()
 
-	## Selects the cels and makes the last entry of [param selected_array] as the current cel
-	## [param selected_array] is an [Array] of [Arrays] of 2 integers (frame & layer).[br]
-	## Frames are counted from left to right, layers are counted from bottom to top.
+	## Selects the cels and makes the last entry of [param selected_array] as the current cel.
+	## [param selected_array] is an [Array] of [Arrays] of 2 integers (frame & layer respectively).
+	## [br]Frames are counted from left to right, layers are counted from bottom to top.
 	## Frames/layers start at "0" and end at [param project.frames.size() - 1] and
 	## [param project.layers.size() - 1] respectively.
 	func select_cels(selected_array := [[0, 0]]) -> void:
@@ -652,6 +690,11 @@ class ExportAPI:
 	# gdlint: ignore=constant-name
 	const ExportTab := Export.ExportTab
 
+	## Returns the Export autoload.
+	## Allows interacting with the export workflow on a more deeper level.
+	func autoload() -> Export:
+		return Export
+
 	## [param format_info] has keys: [code]extension[/code] and [code]description[/code]
 	## whose values are of type [String] e.g:[codeblock]
 	## format_info = {"extension": ".gif", "description": "GIF Image"}
@@ -664,7 +707,8 @@ class ExportAPI:
 	## (Note: [code]processed_images[/code] is an array of ProcessedImage resource which further
 	## has parameters [param image] and [param duration])[br]
 	## If the value of [param tab] is not in [constant ExportTab] then the format will be added to
-	## both tabs. Returns the index of exporter, which can be used to remove exporter later.
+	## both tabs.
+	## [br]Returns the index of exporter, which can be used to remove exporter later.
 	func add_export_option(
 		format_info: Dictionary,
 		exporter_generator: Object,
@@ -703,18 +747,27 @@ class ExportAPI:
 
 ## Gives access to adding custom import options.
 class ImportAPI:
+	## Returns the OpenSave autoload. Contains code to handle file loading.
+	## It also contains code to handle project saving (.pxo)
+	func open_save_autoload() -> OpenSave:
+		return OpenSave
+
+	## Returns the Import autoload. Manages import of brushes and patterns.
+	func import_autoload() -> Import:
+		return Import
+
 	## [param import_scene] is a scene preload that will be instanced and added to "import options"
-	## section of pixelorama's import dialogs and will appears whenever [param import_name] is
+	## section of pixelorama's import dialogs and will appear whenever [param import_name] is
 	## chosen from import menu.
 	## [br]
-	## [param import_scene] must have a a script containing:[br]
+	## [param import_scene] must have a script containing:[br]
 	## 1. An optional variable named [code]import_preview_dialog[/code] of type [ConfirmationDialog],
 	## If present, it will automatically be assigned a reference to the relevant import dialog's
 	## [code]ImportPreviewDialog[/code] class so that you can easily access variables and
 	## methods of that class. (This variable is meant to be read-only)[br]
-	## 2. The method [method initiate_import] which takes 2 arguments: [code]path[/code],
-	## [code]image[/code], which are automatically passed to [method initiate_import] at
-	## time of import.
+	## 2. The method [method initiate_import], which takes 2 arguments: [code]path[/code],
+	## [code]image[/code]. Values will automatically be passed to these arguments at the
+	## time of import.[br]Returns the id of the importer.
 	func add_import_option(import_name: StringName, import_scene_preload: PackedScene) -> int:
 		var id := OpenSave.add_import_option(import_name, import_scene_preload)
 		ExtensionsApi.add_action("ImportAPI", "add_import_option")
@@ -728,11 +781,15 @@ class ImportAPI:
 		ExtensionsApi.remove_action("ImportAPI", "add_import_option")
 
 
-## Gives access to palettes.
+## Gives access to palette related stuff.
 class PaletteAPI:
-	## Creates and adds a new [Palette] with name [param palette_name] with [param data]
-	## in the form of a [Dictionary].
-	## An example of [code]data[/code] dictionary will be:[codeblock]
+	## Returns the Palettes autoload. Allows interacting with palettes on a more deeper level.
+	func autoload() -> Palettes:
+		return Palettes
+
+	## Creates and adds a new [Palette] with name [param palette_name] containing [param data].
+	## [param data] is a [Dictionary] containing the palette information.
+	## An example of [code]data[/code] will be:[codeblock]
 	## {
 	## "colors": [
 	##  {
@@ -811,7 +868,8 @@ class SignalsAPI:
 	# PROJECT RELATED SIGNALS
 	## Connects/disconnects a signal to [param callable], that emits
 	## whenever a new project is created.[br]
-	## [b]Binds: [/b]It has one bind of type [code]Project[/code] which is the newly created project
+	## [b]Binds: [/b]It has one bind of type [code]Project[/code] which is the newly
+	## created project.
 	func signal_project_created(callable: Callable, is_disconnecting := false) -> void:
 		_connect_disconnect(Global.project_created, callable, is_disconnecting)
 
@@ -867,7 +925,7 @@ class SignalsAPI:
 	## Connects/disconnects a signal to [param callable], that emits
 	## whenever preview is about to be drawn.[br]
 	## [b]Binds: [/b]It has one bind of type [Dictionary] with keys: [code]exporter_id[/code],
-	## [code]export_tab[/code], [code]preview_images[/code], [code]durations[/code]
-	## [br] Use this if you plan on changing preview of export
+	## [code]export_tab[/code], [code]preview_images[/code], [code]durations[/code].[br]
+	## Use this if you plan on changing preview of export.
 	func signal_export_about_to_preview(callable: Callable, is_disconnecting := false) -> void:
 		_connect_disconnect(Global.export_dialog.about_to_preview, callable, is_disconnecting)
diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd
index adf1abb6e..21a04d459 100644
--- a/src/Autoload/Global.gd
+++ b/src/Autoload/Global.gd
@@ -12,6 +12,7 @@ signal project_about_to_switch  ## Emitted before a project is about to be switc
 signal project_switched  ## Emitted whenever you switch to some other project tab.
 signal cel_switched  ## Emitted whenever you select a different cel.
 signal project_data_changed(project: Project)  ## Emitted when project data is modified.
+signal font_loaded  ## Emitted when a new font has been loaded, or an old one gets unloaded.
 
 enum LayerTypes { PIXEL, GROUP, THREE_D }
 enum GridTypes { CARTESIAN, ISOMETRIC, ALL }
@@ -27,6 +28,7 @@ enum FileMenu { NEW, OPEN, OPEN_LAST_PROJECT, RECENT, SAVE, SAVE_AS, EXPORT, EXP
 enum EditMenu { UNDO, REDO, COPY, CUT, PASTE, PASTE_IN_PLACE, DELETE, NEW_BRUSH, PREFERENCES }
 ## Enumeration of items present in the View Menu.
 enum ViewMenu {
+	CENTER_CANVAS,
 	TILE_MODE,
 	TILE_MODE_OFFSETS,
 	GREYSCALE_VIEW,
@@ -63,12 +65,13 @@ enum EffectsMenu {
 	PALETTIZE,
 	PIXELIZE,
 	POSTERIZE,
+	GAUSSIAN_BLUR,
 	GRADIENT,
 	GRADIENT_MAP,
 	SHADER
 }
 ## Enumeration of items present in the Select Menu.
-enum SelectMenu { SELECT_ALL, CLEAR_SELECTION, INVERT, TILE_MODE }
+enum SelectMenu { SELECT_ALL, CLEAR_SELECTION, INVERT, TILE_MODE, MODIFY }
 ## Enumeration of items present in the Help Menu.
 enum HelpMenu {
 	VIEW_SPLASH_SCREEN,
@@ -117,8 +120,6 @@ const HOME_SUBDIR_NAME := "pixelorama"
 const CONFIG_SUBDIR_NAME := "pixelorama_data"
 ## The path of the directory where the UI layouts are being stored.
 const LAYOUT_DIR := "user://layouts"
-const VALUE_SLIDER_V2_TSCN := preload("res://src/UI/Nodes/ValueSliderV2.tscn")
-const GRADIENT_EDIT_TSCN := preload("res://src/UI/Nodes/GradientEdit.tscn")
 
 ## It is path to the executable's base drectory.
 var root_directory := "."
@@ -134,7 +135,18 @@ var config_cache := ConfigFile.new()
 var loaded_locales: PackedStringArray = LANGUAGES_DICT.keys()
 
 var projects: Array[Project] = []  ## Array of currently open projects.
-var current_project: Project  ## The project that currently in focus.
+var current_project: Project:  ## The project that currently in focus.
+	set(value):
+		current_project = value
+		if top_menu_container.file_menu:
+			if current_project is ResourceProject:
+				top_menu_container.file_menu.set_item_disabled(FileMenu.SAVE_AS, true)
+				top_menu_container.file_menu.set_item_disabled(FileMenu.EXPORT, true)
+				top_menu_container.file_menu.set_item_disabled(FileMenu.EXPORT_AS, true)
+			else:
+				top_menu_container.file_menu.set_item_disabled(FileMenu.SAVE_AS, false)
+				top_menu_container.file_menu.set_item_disabled(FileMenu.EXPORT, false)
+				top_menu_container.file_menu.set_item_disabled(FileMenu.EXPORT_AS, false)
 ## The index of project that is currently in focus.
 var current_project_index := 0:
 	set(value):
@@ -153,6 +165,9 @@ var default_layouts: Array[DockableLayout] = [
 	preload("res://assets/layouts/Tallscreen.tres"),
 ]
 var layouts: Array[DockableLayout] = []
+var loaded_fonts: Array[Font] = [
+	ThemeDB.fallback_font, preload("res://assets/fonts/Roboto-Regular.ttf")
+]
 
 # Canvas related stuff
 ## Tells if the user allowed to draw on the canvas. Usually it is temporarily set to
@@ -196,6 +211,24 @@ var integer_zoom := false:
 
 ## Found in Preferences. The scale of the interface.
 var shrink := 1.0
+var theme_font := loaded_fonts[theme_font_index]:
+	set(value):
+		theme_font = value
+		if is_instance_valid(control) and is_instance_valid(control.theme):
+			control.theme.default_font = theme_font
+## Found in Preferences. The index of the font used by the interface.
+var theme_font_index := 1:
+	set(value):
+		theme_font_index = value
+		if theme_font_index < loaded_fonts.size():
+			theme_font = loaded_fonts[theme_font_index]
+		else:
+			var available_font_names := get_available_font_names()
+			if theme_font_index < available_font_names.size():
+				var font_name := available_font_names[theme_font_index]
+				theme_font = find_font_from_name(font_name)
+			else:
+				theme_font = loaded_fonts[1]  # Fall back to Roboto if out of bounds
 ## Found in Preferences. The font size used by the interface.
 var font_size := 16
 ## Found in Preferences. If [code]true[/code], the interface dims on popups.
@@ -263,6 +296,11 @@ var tool_button_size := ButtonSize.SMALL:
 			return
 		tool_button_size = value
 		Tools.set_button_size(tool_button_size)
+## Found in Preferences.
+var share_options_between_tools := false:
+	set(value):
+		share_options_between_tools = value
+		Tools.attempt_config_share(MOUSE_BUTTON_LEFT)
 ## Found in Preferences. The left tool color.
 var left_tool_color := Color("0086cf"):
 	set(value):
@@ -465,13 +503,21 @@ var selection_border_color_2 := Color.BLACK:
 
 ## Found in Preferences. If [code]true[/code], Pixelorama pauses when unfocused to save cpu usage.
 var pause_when_unfocused := true
-## Found in Preferences. The max fps, Pixelorama is allowed to use (does not limit fps if it is 0).
+## Found in Preferences. The maximum FPS value Pixelorama can reach. 0 means no limit.
 var fps_limit := 0:
 	set(value):
 		if value == fps_limit:
 			return
 		fps_limit = value
 		Engine.max_fps = fps_limit
+## Found in Preferences. The maximum amount of undo steps projects can use. 0 means no limit.
+var max_undo_steps := 0:
+	set(value):
+		if value == max_undo_steps:
+			return
+		max_undo_steps = value
+		for project in projects:
+			project.undo_redo.max_steps = max_undo_steps
 ## Found in Preferences. Affects the per_pixel_transparency project setting.
 ## If [code]true[/code], it allows for the window to be transparent.
 ## This affects performance, so keep it [code]false[/code] if you don't need it.
@@ -543,7 +589,10 @@ var draw_grid := false
 ## If [code]true[/code], the pixel grid is visible.
 var draw_pixel_grid := false
 ## If [code]true[/code], the rulers are visible.
-var show_rulers := true
+var show_rulers := true:
+	set(value):
+		show_rulers = value
+		get_tree().set_group(&"CanvasRulers", "visible", value)
 ## If [code]true[/code], the guides are visible.
 var show_guides := true
 ## If [code]true[/code], the mouse guides are visible.
@@ -583,40 +632,18 @@ var cel_button_scene: PackedScene = load("res://src/UI/Timeline/CelButton.tscn")
 
 ## The control node (aka Main node). It has the [param Main.gd] script attached.
 @onready var control := get_tree().current_scene as Control
-
 ## The project tabs bar. It has the [param Tabs.gd] script attached.
 @onready var tabs: TabBar = control.find_child("TabBar")
 ## Contains viewport of the main canvas. It has the [param ViewportContainer.gd] script attached.
 @onready var main_viewport: SubViewportContainer = control.find_child("SubViewportContainer")
 ## The main canvas node. It has the [param Canvas.gd] script attached.
 @onready var canvas: Canvas = main_viewport.find_child("Canvas")
-## Contains viewport of the second canvas preview.
-## It has the [param ViewportContainer.gd] script attached.
-@onready var second_viewport: SubViewportContainer = control.find_child("Second Canvas")
-## The panel container of the canvas preview.
-## It has the [param CanvasPreviewContainer.gd] script attached.
-@onready var canvas_preview_container: Container = control.find_child("Canvas Preview")
 ## The global tool options. It has the [param GlobalToolOptions.gd] script attached.
 @onready var global_tool_options: PanelContainer = control.find_child("Global Tool Options")
-## Contains viewport of the canvas preview.
-@onready var small_preview_viewport: SubViewportContainer = canvas_preview_container.find_child(
-	"PreviewViewportContainer"
-)
 ## Camera of the main canvas.
 @onready var camera: CanvasCamera = main_viewport.find_child("Camera2D")
-## Camera of the second canvas preview.
-@onready var camera2: CanvasCamera = second_viewport.find_child("Camera2D2")
-## Camera of the canvas preview.
-@onready var camera_preview: CanvasCamera = control.find_child("CameraPreview")
-## Array of cameras used in Pixelorama.
-@onready var cameras := [camera, camera2, camera_preview]
-## Horizontal ruler of the main canvas. It has the [param HorizontalRuler.gd] script attached.
-@onready var horizontal_ruler: BaseButton = control.find_child("HorizontalRuler")
-## Vertical ruler of the main canvas. It has the [param VerticalRuler.gd] script attached.
-@onready var vertical_ruler: BaseButton = control.find_child("VerticalRuler")
 ## Transparent checker of the main canvas. It has the [param TransparentChecker.gd] script attached.
 @onready var transparent_checker: ColorRect = control.find_child("TransparentChecker")
-
 ## The perspective editor. It has the [param PerspectiveEditor.gd] script attached.
 @onready var perspective_editor := control.find_child("Perspective Editor")
 ## The top menu container. It has the [param TopMenuContainer.gd] script attached.
@@ -625,8 +652,6 @@ var cel_button_scene: PackedScene = load("res://src/UI/Timeline/CelButton.tscn")
 @onready var cursor_position_label: Label = top_menu_container.find_child("CursorPosition")
 ## The animation timeline. It has the [param AnimationTimeline.gd] script attached.
 @onready var animation_timeline: Panel = control.find_child("Animation Timeline")
-## The timer used by the animation timeline.
-@onready var animation_timer: Timer = animation_timeline.find_child("AnimationTimer")
 ## The container of frame buttons
 @onready var frame_hbox: HBoxContainer = animation_timeline.find_child("FrameHBox")
 ## The container of layer buttons
@@ -635,17 +660,12 @@ var cel_button_scene: PackedScene = load("res://src/UI/Timeline/CelButton.tscn")
 @onready var cel_vbox: VBoxContainer = animation_timeline.find_child("CelVBox")
 ## The container of animation tags.
 @onready var tag_container: Control = animation_timeline.find_child("TagContainer")
-
 ## The brushes popup dialog used to display brushes.
 ## It has the [param BrushesPopup.gd] script attached.
 @onready var brushes_popup: Popup = control.find_child("BrushesPopup")
 ## The patterns popup dialog used to display patterns
 ## It has the [param PatternsPopup.gd] script attached.
 @onready var patterns_popup: Popup = control.find_child("PatternsPopup")
-## Dialog used to navigate and open images and projects.
-@onready var open_sprites_dialog: FileDialog = control.find_child("OpenSprite")
-## Dialog used to save (.pxo) projects.
-@onready var save_sprites_dialog: FileDialog = control.find_child("SaveSprite")
 ## Dialog used to export images. It has the [param ExportDialog.gd] script attached.
 @onready var export_dialog: AcceptDialog = control.find_child("ExportDialog")
 ## An error dialog to show errors.
@@ -745,11 +765,13 @@ func _initialize_keychain() -> void:
 		&"drop_shadow": Keychain.InputAction.new("", "Effects menu", true),
 		&"adjust_hsv": Keychain.InputAction.new("", "Effects menu", true),
 		&"adjust_brightness_contrast": Keychain.InputAction.new("", "Effects menu", true),
+		&"gaussian_blur": Keychain.InputAction.new("", "Effects menu", true),
 		&"gradient": Keychain.InputAction.new("", "Effects menu", true),
 		&"gradient_map": Keychain.InputAction.new("", "Effects menu", true),
 		&"palettize": Keychain.InputAction.new("", "Effects menu", true),
 		&"pixelize": Keychain.InputAction.new("", "Effects menu", true),
 		&"posterize": Keychain.InputAction.new("", "Effects menu", true),
+		&"center_canvas": Keychain.InputAction.new("", "View menu", true),
 		&"mirror_view": Keychain.InputAction.new("", "View menu", true),
 		&"show_grid": Keychain.InputAction.new("", "View menu", true),
 		&"show_pixel_grid": Keychain.InputAction.new("", "View menu", true),
@@ -765,9 +787,11 @@ func _initialize_keychain() -> void:
 		&"view_splash_screen": Keychain.InputAction.new("", "Help menu", true),
 		&"open_docs": Keychain.InputAction.new("", "Help menu", true),
 		&"issue_tracker": Keychain.InputAction.new("", "Help menu", true),
-		&"open_logs_folder": Keychain.InputAction.new("", "Help menu", true),
+		&"open_editor_data_folder": Keychain.InputAction.new("", "Help menu", true),
 		&"changelog": Keychain.InputAction.new("", "Help menu", true),
 		&"about_pixelorama": Keychain.InputAction.new("", "Help menu", true),
+		&"previous_project": Keychain.InputAction.new("", "Canvas"),
+		&"next_project": Keychain.InputAction.new("", "Canvas"),
 		&"zoom_in": Keychain.InputAction.new("", "Canvas"),
 		&"zoom_out": Keychain.InputAction.new("", "Canvas"),
 		&"camera_left": Keychain.InputAction.new("", "Canvas"),
@@ -817,6 +841,7 @@ func _initialize_keychain() -> void:
 		&"draw_create_line": Keychain.InputAction.new("", "Draw tools", false),
 		&"draw_snap_angle": Keychain.InputAction.new("", "Draw tools", false),
 		&"draw_color_picker": Keychain.InputAction.new("Quick color picker", "Draw tools", false),
+		&"change_layer_automatically": Keychain.InputAction.new("", "Tools", false),
 		&"shape_perfect": Keychain.InputAction.new("", "Shape tools", false),
 		&"shape_center": Keychain.InputAction.new("", "Shape tools", false),
 		&"shape_displace": Keychain.InputAction.new("", "Shape tools", false),
@@ -940,8 +965,8 @@ func undo_or_redo(
 
 	await RenderingServer.frame_post_draw
 	canvas.queue_redraw()
-	second_viewport.get_child(0).get_node("CanvasPreview").queue_redraw()
-	canvas_preview_container.canvas_preview.queue_redraw()
+	for canvas_preview in get_tree().get_nodes_in_group("CanvasPreviews"):
+		canvas_preview.queue_redraw()
 	if !project.has_changed:
 		if project == current_project:
 			get_window().title = get_window().title + "(*)"
@@ -1029,6 +1054,32 @@ func find_nearest_locale(locale: String) -> String:
 	return closest_locale
 
 
+func get_available_font_names() -> PackedStringArray:
+	var font_names := PackedStringArray()
+	for font in loaded_fonts:
+		var font_name := font.get_font_name()
+		if font_name in font_names:
+			continue
+		font_names.append(font_name)
+	for system_font_name in OS.get_system_fonts():
+		if system_font_name in font_names:
+			continue
+		font_names.append(system_font_name)
+	return font_names
+
+
+func find_font_from_name(font_name: String) -> Font:
+	for font in loaded_fonts:
+		if font.get_font_name() == font_name:
+			return font
+	for system_font_name in OS.get_system_fonts():
+		if system_font_name == font_name:
+			var system_font := SystemFont.new()
+			system_font.font_names = [font_name]
+			return system_font
+	return ThemeDB.fallback_font
+
+
 ## Used by undo/redo operations to store compressed images in memory.
 ## [param redo_data] and [param undo_data] are Dictionaries,
 ## with keys of type [Image] and [Dictionary] values, coming from [member Image.data].
@@ -1078,257 +1129,3 @@ func _save_to_override_file() -> void:
 	file.store_line("[display]\n")
 	file.store_line("window/subwindows/embed_subwindows=%s" % single_window_mode)
 	file.store_line("window/per_pixel_transparency/allowed=%s" % window_transparency)
-
-
-func create_ui_for_shader_uniforms(
-	shader: Shader,
-	params: Dictionary,
-	parent_node: Control,
-	value_changed: Callable,
-	file_selected: Callable
-) -> void:
-	var code := shader.code.split("\n")
-	var uniforms: PackedStringArray = []
-	for line in code:
-		if line.begins_with("uniform"):
-			uniforms.append(line)
-
-	for uniform in uniforms:
-		# Example uniform:
-		# uniform float parameter_name : hint_range(0, 255) = 100.0;
-		var uniform_split := uniform.split("=")
-		var u_value := ""
-		if uniform_split.size() > 1:
-			u_value = uniform_split[1].replace(";", "").strip_edges()
-		else:
-			uniform_split[0] = uniform_split[0].replace(";", "").strip_edges()
-
-		var u_left_side := uniform_split[0].split(":")
-		var u_hint := ""
-		if u_left_side.size() > 1:
-			u_hint = u_left_side[1].strip_edges()
-			u_hint = u_hint.replace(";", "")
-
-		var u_init := u_left_side[0].split(" ")
-		var u_type := u_init[1]
-		var u_name := u_init[2]
-		var humanized_u_name := Keychain.humanize_snake_case(u_name) + ":"
-
-		if u_type == "float" or u_type == "int":
-			var label := Label.new()
-			label.text = humanized_u_name
-			label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
-			var slider := ValueSlider.new()
-			slider.allow_greater = true
-			slider.allow_lesser = true
-			slider.size_flags_horizontal = Control.SIZE_EXPAND_FILL
-			var min_value := 0.0
-			var max_value := 255.0
-			var step := 1.0
-			var range_values_array: PackedStringArray
-			if "hint_range" in u_hint:
-				var range_values: String = u_hint.replace("hint_range(", "")
-				range_values = range_values.replace(")", "").strip_edges()
-				range_values_array = range_values.split(",")
-
-			if u_type == "float":
-				if range_values_array.size() >= 1:
-					min_value = float(range_values_array[0])
-				else:
-					min_value = 0.01
-
-				if range_values_array.size() >= 2:
-					max_value = float(range_values_array[1])
-
-				if range_values_array.size() >= 3:
-					step = float(range_values_array[2])
-				else:
-					step = 0.01
-
-				if u_value != "":
-					slider.value = float(u_value)
-			else:
-				if range_values_array.size() >= 1:
-					min_value = int(range_values_array[0])
-
-				if range_values_array.size() >= 2:
-					max_value = int(range_values_array[1])
-
-				if range_values_array.size() >= 3:
-					step = int(range_values_array[2])
-
-				if u_value != "":
-					slider.value = int(u_value)
-			if params.has(u_name):
-				slider.value = params[u_name]
-			else:
-				params[u_name] = slider.value
-			slider.min_value = min_value
-			slider.max_value = max_value
-			slider.step = step
-			slider.value_changed.connect(value_changed.bind(u_name))
-			slider.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
-			var hbox := HBoxContainer.new()
-			hbox.add_child(label)
-			hbox.add_child(slider)
-			parent_node.add_child(hbox)
-		elif u_type == "vec2" or u_type == "ivec2" or u_type == "uvec2":
-			var label := Label.new()
-			label.text = humanized_u_name
-			label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
-			var vector2 := _vec2str_to_vector2(u_value)
-			var slider := VALUE_SLIDER_V2_TSCN.instantiate() as ValueSliderV2
-			slider.show_ratio = true
-			slider.allow_greater = true
-			if u_type != "uvec2":
-				slider.allow_lesser = true
-			slider.size_flags_horizontal = Control.SIZE_EXPAND_FILL
-			slider.value = vector2
-			if params.has(u_name):
-				slider.value = params[u_name]
-			else:
-				params[u_name] = slider.value
-			slider.value_changed.connect(value_changed.bind(u_name))
-			var hbox := HBoxContainer.new()
-			hbox.add_child(label)
-			hbox.add_child(slider)
-			parent_node.add_child(hbox)
-		elif u_type == "vec4":
-			if "source_color" in u_hint:
-				var label := Label.new()
-				label.text = humanized_u_name
-				label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
-				var color := _vec4str_to_color(u_value)
-				var color_button := ColorPickerButton.new()
-				color_button.custom_minimum_size = Vector2(20, 20)
-				color_button.color = color
-				if params.has(u_name):
-					color_button.color = params[u_name]
-				else:
-					params[u_name] = color_button.color
-				color_button.color_changed.connect(value_changed.bind(u_name))
-				color_button.size_flags_horizontal = Control.SIZE_EXPAND_FILL
-				color_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
-				var hbox := HBoxContainer.new()
-				hbox.add_child(label)
-				hbox.add_child(color_button)
-				parent_node.add_child(hbox)
-		elif u_type == "sampler2D":
-			if u_name == "selection":
-				continue
-			if u_name == "palette_texture":
-				var palette := Palettes.current_palette
-				var palette_texture := ImageTexture.create_from_image(palette.convert_to_image())
-				value_changed.call(palette_texture, u_name)
-				Palettes.palette_selected.connect(
-					func(_name): _shader_change_palette(value_changed, u_name)
-				)
-				palette.data_changed.connect(
-					func(): _shader_update_palette_texture(palette, value_changed, u_name)
-				)
-				continue
-			var label := Label.new()
-			label.text = humanized_u_name
-			label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
-			var hbox := HBoxContainer.new()
-			hbox.add_child(label)
-			if u_name.begins_with("gradient_"):
-				var gradient_edit := GRADIENT_EDIT_TSCN.instantiate() as GradientEditNode
-				gradient_edit.size_flags_horizontal = Control.SIZE_EXPAND_FILL
-				if params.has(u_name) and params[u_name] is GradientTexture2D:
-					gradient_edit.set_gradient_texture(params[u_name])
-				else:
-					params[u_name] = gradient_edit.texture
-				# This needs to be call_deferred because GradientTexture2D gets updated next frame.
-				# Without this, the texture is purple.
-				value_changed.call_deferred(gradient_edit.texture, u_name)
-				gradient_edit.updated.connect(
-					func(_gradient, _cc): value_changed.call(gradient_edit.texture, u_name)
-				)
-				hbox.add_child(gradient_edit)
-			else:
-				var file_dialog := FileDialog.new()
-				file_dialog.file_mode = FileDialog.FILE_MODE_OPEN_FILE
-				file_dialog.access = FileDialog.ACCESS_FILESYSTEM
-				file_dialog.size = Vector2(384, 281)
-				file_dialog.file_selected.connect(file_selected.bind(u_name))
-				file_dialog.use_native_dialog = use_native_file_dialogs
-				var button := Button.new()
-				button.text = "Load texture"
-				button.pressed.connect(file_dialog.popup_centered)
-				button.size_flags_horizontal = Control.SIZE_EXPAND_FILL
-				button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
-				hbox.add_child(button)
-				parent_node.add_child(file_dialog)
-			parent_node.add_child(hbox)
-
-		elif u_type == "bool":
-			var label := Label.new()
-			label.text = humanized_u_name
-			label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
-			var checkbox := CheckBox.new()
-			checkbox.text = "On"
-			if u_value == "true":
-				checkbox.button_pressed = true
-			if params.has(u_name):
-				checkbox.button_pressed = params[u_name]
-			else:
-				params[u_name] = checkbox.button_pressed
-			checkbox.toggled.connect(value_changed.bind(u_name))
-			checkbox.size_flags_horizontal = Control.SIZE_EXPAND_FILL
-			checkbox.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
-			var hbox := HBoxContainer.new()
-			hbox.add_child(label)
-			hbox.add_child(checkbox)
-			parent_node.add_child(hbox)
-
-
-func _vec2str_to_vector2(vec2: String) -> Vector2:
-	vec2 = vec2.replace("uvec2", "vec2")
-	vec2 = vec2.replace("ivec2", "vec2")
-	vec2 = vec2.replace("vec2(", "")
-	vec2 = vec2.replace(")", "")
-	var vec_values := vec2.split(",")
-	if vec_values.size() == 0:
-		return Vector2.ZERO
-	var y := float(vec_values[0])
-	if vec_values.size() == 2:
-		y = float(vec_values[1])
-	var vector2 := Vector2(float(vec_values[0]), y)
-	return vector2
-
-
-func _vec4str_to_color(vec4: String) -> Color:
-	vec4 = vec4.replace("vec4(", "")
-	vec4 = vec4.replace(")", "")
-	var rgba_values := vec4.split(",")
-	var red := float(rgba_values[0])
-
-	var green := float(rgba_values[0])
-	if rgba_values.size() >= 2:
-		green = float(rgba_values[1])
-
-	var blue := float(rgba_values[0])
-	if rgba_values.size() >= 3:
-		blue = float(rgba_values[2])
-
-	var alpha := float(rgba_values[0])
-	if rgba_values.size() == 4:
-		alpha = float(rgba_values[3])
-	var color := Color(red, green, blue, alpha)
-	return color
-
-
-func _shader_change_palette(value_changed: Callable, parameter_name: String) -> void:
-	var palette := Palettes.current_palette
-	_shader_update_palette_texture(palette, value_changed, parameter_name)
-	#if not palette.data_changed.is_connected(_shader_update_palette_texture):
-	palette.data_changed.connect(
-		func(): _shader_update_palette_texture(palette, value_changed, parameter_name)
-	)
-
-
-func _shader_update_palette_texture(
-	palette: Palette, value_changed: Callable, parameter_name: String
-) -> void:
-	value_changed.call(ImageTexture.create_from_image(palette.convert_to_image()), parameter_name)
diff --git a/src/Autoload/OpenSave.gd b/src/Autoload/OpenSave.gd
index 037fe503c..466c9275e 100644
--- a/src/Autoload/OpenSave.gd
+++ b/src/Autoload/OpenSave.gd
@@ -276,7 +276,6 @@ func open_pxo_file(path: String, is_backup := false, replace_empty := true) -> v
 		# Loading a backup should not change window title and save path
 		new_project.save_path = path
 		get_window().title = new_project.name + " - Pixelorama " + Global.current_version
-		Global.save_sprites_dialog.current_path = path
 		# Set last opened project path and save
 		Global.config_cache.set_value("data", "current_dir", path.get_base_dir())
 		Global.config_cache.set_value("data", "last_project_path", path)
diff --git a/src/Autoload/Palettes.gd b/src/Autoload/Palettes.gd
index d7209aebd..4aa1c8588 100644
--- a/src/Autoload/Palettes.gd
+++ b/src/Autoload/Palettes.gd
@@ -4,7 +4,7 @@ signal palette_selected(palette_name: String)
 signal new_palette_created
 signal new_palette_imported
 
-enum SortOptions { NEW_PALETTE, REVERSE, HUE, SATURATION, VALUE, RED, GREEN, BLUE, ALPHA }
+enum SortOptions {NEW_PALETTE, REVERSE, HUE, SATURATION, VALUE, LIGHTNESS, RED, GREEN, BLUE, ALPHA}
 ## Presets for creating a new palette
 enum NewPalettePresetType {EMPTY, FROM_CURRENT_PALETTE, FROM_CURRENT_SPRITE, FROM_CURRENT_SELECTION}
 ## Color options when user creates a new palette from current sprite or selection
@@ -69,7 +69,7 @@ func save_palette(palette: Palette = current_palette) -> void:
 	palette.path = save_path
 	var err := palette.save_to_file()
 	if err != OK:
-		Global.notification_label("Failed to save palette")
+		Global.popup_error("Failed to save palette. Error code %s (%s)" % [err, error_string(err)])
 
 
 func copy_palette() -> void:
@@ -463,9 +463,9 @@ func _import_gpl(path: String, text: String) -> Palette:
 			comments += line.trim_prefix("#") + "\n"
 			# Some programs output palette name in a comment for old format
 			if line.begins_with("#Palette Name: "):
-				palette_name = line.replace("#Palette Name: ", "")
+				palette_name = line.replace("#Palette Name: ", "").strip_edges()
 		elif line.begins_with("Name: "):
-			palette_name = line.replace("Name: ", "")
+			palette_name = line.replace("Name: ", "").strip_edges()
 		elif line.begins_with("Columns: "):
 			# The width of the palette.
 			line = line.trim_prefix("Columns: ").strip_edges()
diff --git a/src/Autoload/Themes.gd b/src/Autoload/Themes.gd
index 9128c33a8..b9d47076b 100644
--- a/src/Autoload/Themes.gd
+++ b/src/Autoload/Themes.gd
@@ -27,6 +27,7 @@ func _ready() -> void:
 		change_theme(theme_id)
 	else:
 		change_clear_color()
+		change_icon_colors()
 
 
 func add_theme(theme: Theme) -> void:
@@ -42,6 +43,8 @@ func remove_theme(theme: Theme) -> void:
 func change_theme(id: int) -> void:
 	theme_index = id
 	var theme := themes[id]
+	if theme.default_font != Global.theme_font:
+		theme.default_font = Global.theme_font
 	theme.default_font_size = Global.font_size
 	theme.set_font_size("font_size", "HeaderSmall", Global.font_size + 2)
 	var icon_color := theme.get_color("modulate_color", "Icons")
diff --git a/src/Autoload/Tools.gd b/src/Autoload/Tools.gd
index e09e5f482..b236f3d7a 100644
--- a/src/Autoload/Tools.gd
+++ b/src/Autoload/Tools.gd
@@ -1,7 +1,11 @@
+# gdlint: ignore=max-public-methods
 extends Node
 
 signal color_changed(color: Color, button: int)
+signal config_changed(slot_idx: int, config: Dictionary)
+@warning_ignore("unused_signal")
 signal flip_rotated(flip_x, flip_y, rotate_90, rotate_180, rotate_270)
+signal options_reset
 
 enum Dynamics { NONE, PRESSURE, VELOCITY }
 
@@ -315,6 +319,7 @@ class Slot:
 
 
 func _ready() -> void:
+	options_reset.connect(reset_options)
 	Global.cel_switched.connect(_cel_switched)
 	_tool_buttons = Global.control.find_child("ToolButtons")
 	for t in tools:
@@ -370,6 +375,40 @@ func _ready() -> void:
 	_show_relevant_tools(layer_type)
 
 
+## Syncs the other tool using the config of tool located at [param from_idx].[br]
+## NOTE: For optimization, if there is already a ready made config available, then we will use that
+## instead of re-calculating the config, else we have no choice but to re-generate it
+func attempt_config_share(from_idx: int, config: Dictionary = {}) -> void:
+	if not Global.share_options_between_tools:
+		return
+	if _slots.is_empty():
+		return
+	if config.is_empty() and _slots[from_idx]:
+		var from_slot: Slot = _slots.get(from_idx, null)
+		if from_slot:
+			var from_tool = from_slot.tool_node
+			if from_tool.has_method("get_config"):
+				config = from_tool.get_config()
+	var target_slot: Slot = _slots.get(MOUSE_BUTTON_LEFT, null)
+	if from_idx == MOUSE_BUTTON_LEFT:
+		target_slot = _slots.get(MOUSE_BUTTON_RIGHT, null)
+	if is_instance_valid(target_slot):
+		if (
+			target_slot.tool_node.has_method("set_config")
+			and target_slot.tool_node.has_method("update_config")
+		):
+			target_slot.tool_node.set("is_syncing", true)
+			target_slot.tool_node.set_config(config)
+			target_slot.tool_node.update_config()
+			target_slot.tool_node.set("is_syncing", false)
+
+
+func reset_options() -> void:
+	default_color()
+	assign_tool(get_tool(MOUSE_BUTTON_LEFT).tool_node.name, MOUSE_BUTTON_LEFT, true)
+	assign_tool(get_tool(MOUSE_BUTTON_RIGHT).tool_node.name, MOUSE_BUTTON_RIGHT, true)
+
+
 func add_tool_button(t: Tool, insert_pos := -1) -> void:
 	var tool_button: BaseButton = _tool_button_scene.instantiate()
 	tool_button.name = t.name
@@ -392,9 +431,13 @@ func remove_tool(t: Tool) -> void:
 
 
 func set_tool(tool_name: String, button: int) -> void:
+	# To prevent any unintentional syncing, we will temporarily disconnect the signal
+	if config_changed.is_connected(attempt_config_share):
+		config_changed.disconnect(attempt_config_share)
 	var slot: Slot = _slots[button]
 	var panel: Node = _panels[button]
 	var node: Node = tools[tool_name].instantiate_scene()
+	var config_slot := MOUSE_BUTTON_LEFT if button == MOUSE_BUTTON_RIGHT else MOUSE_BUTTON_RIGHT
 	if button == MOUSE_BUTTON_LEFT:  # As guides are only moved with left mouse
 		if tool_name == "Pan":  # tool you want to give more access at guides
 			Global.move_guides_on_canvas = true
@@ -413,13 +456,23 @@ func set_tool(tool_name: String, button: int) -> void:
 	elif button == MOUSE_BUTTON_RIGHT:
 		_right_tools_per_layer_type[_curr_layer_type] = tool_name
 
+	# Wait for config to get loaded, then re-connect and sync
+	await get_tree().process_frame
+	if not config_changed.is_connected(attempt_config_share):
+		config_changed.connect(attempt_config_share)
+	attempt_config_share(config_slot)  # Sync it with the other tool
 
-func assign_tool(tool_name: String, button: int) -> void:
+
+func get_tool(button: int) -> Slot:
+	return _slots[button]
+
+
+func assign_tool(tool_name: String, button: int, allow_refresh := false) -> void:
 	var slot: Slot = _slots[button]
 	var panel: Node = _panels[button]
 
 	if slot.tool_node != null:
-		if slot.tool_node.name == tool_name:
+		if slot.tool_node.name == tool_name and not allow_refresh:
 			return
 		panel.remove_child(slot.tool_node)
 		slot.tool_node.queue_free()
@@ -524,26 +577,34 @@ func handle_draw(position: Vector2i, event: InputEvent) -> void:
 	var draw_pos := position
 	if Global.mirror_view:
 		draw_pos.x = Global.current_project.size.x - position.x - 1
+	if event.is_action(&"activate_left_tool") or event.is_action(&"activate_right_tool"):
+		if Input.is_action_pressed(&"change_layer_automatically", true):
+			change_layer_automatically(draw_pos)
+			return
 
-	if event.is_action_pressed("activate_left_tool") and _active_button == -1 and not pen_inverted:
+	if event.is_action_pressed(&"activate_left_tool") and _active_button == -1 and not pen_inverted:
 		_active_button = MOUSE_BUTTON_LEFT
 		_slots[_active_button].tool_node.draw_start(draw_pos)
-	elif event.is_action_released("activate_left_tool") and _active_button == MOUSE_BUTTON_LEFT:
+	elif event.is_action_released(&"activate_left_tool") and _active_button == MOUSE_BUTTON_LEFT:
 		_slots[_active_button].tool_node.draw_end(draw_pos)
 		_active_button = -1
 	elif (
 		(
-			event.is_action_pressed("activate_right_tool")
+			event.is_action_pressed(&"activate_right_tool")
 			and _active_button == -1
 			and not pen_inverted
 		)
-		or (event.is_action_pressed("activate_left_tool") and _active_button == -1 and pen_inverted)
+		or (
+			event.is_action_pressed(&"activate_left_tool") and _active_button == -1 and pen_inverted
+		)
 	):
 		_active_button = MOUSE_BUTTON_RIGHT
 		_slots[_active_button].tool_node.draw_start(draw_pos)
 	elif (
-		(event.is_action_released("activate_right_tool") and _active_button == MOUSE_BUTTON_RIGHT)
-		or (event.is_action_released("activate_left_tool") and _active_button == MOUSE_BUTTON_RIGHT)
+		(event.is_action_released(&"activate_right_tool") and _active_button == MOUSE_BUTTON_RIGHT)
+		or (
+			event.is_action_released(&"activate_left_tool") and _active_button == MOUSE_BUTTON_RIGHT
+		)
 	):
 		_slots[_active_button].tool_node.draw_end(draw_pos)
 		_active_button = -1
@@ -632,3 +693,30 @@ func _show_relevant_tools(layer_type: Global.LayerTypes) -> void:
 
 func _is_tool_available(layer_type: int, t: Tool) -> bool:
 	return t.layer_types.is_empty() or layer_type in t.layer_types
+
+
+func change_layer_automatically(pos: Vector2i) -> void:
+	var project := Global.current_project
+	pos = project.tiles.get_canon_position(pos)
+	if pos.x < 0 or pos.y < 0:
+		return
+	var image := Image.new()
+	image.copy_from(project.get_current_cel().get_image())
+	if pos.x > image.get_width() - 1 or pos.y > image.get_height() - 1:
+		return
+
+	var curr_frame := project.frames[project.current_frame]
+	for layer in project.layers.size():
+		var layer_index := (project.layers.size() - 1) - layer
+		if project.layers[layer_index].is_visible_in_hierarchy():
+			image = curr_frame.cels[layer_index].get_image()
+			var color := image.get_pixelv(pos)
+			if not is_zero_approx(color.a):
+				# Change layer.
+				project.selected_cels.clear()
+				var frame_layer := [project.current_frame, layer_index]
+				if !project.selected_cels.has(frame_layer):
+					project.selected_cels.append(frame_layer)
+
+				project.change_cel(-1, layer_index)
+				break
diff --git a/src/Classes/Cel3DObject.gd b/src/Classes/Cel3DObject.gd
index b03f07ee0..b988d51ec 100644
--- a/src/Classes/Cel3DObject.gd
+++ b/src/Classes/Cel3DObject.gd
@@ -93,13 +93,16 @@ func serialize() -> Dictionary:
 				dict["mesh_ring_segments"] = mesh.ring_segments
 				dict["mesh_rings"] = mesh.rings
 			Type.TEXT:
+				dict["mesh_font_name"] = mesh.font.get_font_name()
 				dict["mesh_text"] = mesh.text
 				dict["mesh_pixel_size"] = mesh.pixel_size
 				dict["mesh_font_size"] = mesh.font_size
+				dict["mesh_depth"] = mesh.depth
 				dict["mesh_offset"] = mesh.offset
 				dict["mesh_curve_step"] = mesh.curve_step
 				dict["mesh_horizontal_alignment"] = mesh.horizontal_alignment
 				dict["mesh_vertical_alignment"] = mesh.vertical_alignment
+				dict["mesh_line_spacing"] = mesh.line_spacing
 	else:
 		dict["light_color"] = node3d_type.light_color
 		dict["light_energy"] = node3d_type.light_energy
@@ -154,13 +157,16 @@ func deserialize(dict: Dictionary) -> void:
 				mesh.ring_segments = dict["mesh_ring_segments"]
 				mesh.rings = dict["mesh_rings"]
 			Type.TEXT:
+				mesh.font = Global.find_font_from_name(dict["mesh_font_name"])
 				mesh.text = dict["mesh_text"]
 				mesh.pixel_size = dict["mesh_pixel_size"]
 				mesh.font_size = dict["mesh_font_size"]
+				mesh.depth = dict["mesh_depth"]
 				mesh.offset = dict["mesh_offset"]
 				mesh.curve_step = dict["mesh_curve_step"]
 				mesh.horizontal_alignment = dict["mesh_horizontal_alignment"]
 				mesh.vertical_alignment = dict["mesh_vertical_alignment"]
+				mesh.line_spacing = dict["mesh_line_spacing"]
 	else:
 		node3d_type.light_color = dict["light_color"]
 		node3d_type.light_energy = dict["light_energy"]
diff --git a/src/Classes/Layers/BaseLayer.gd b/src/Classes/Layers/BaseLayer.gd
index aa5898d07..bd67c1d50 100644
--- a/src/Classes/Layers/BaseLayer.gd
+++ b/src/Classes/Layers/BaseLayer.gd
@@ -1,3 +1,4 @@
+# gdlint: ignore=max-public-methods
 class_name BaseLayer
 extends RefCounted
 ## Base class for layer properties. Different layer types extend from this class.
@@ -9,7 +10,9 @@ signal visibility_changed  ## Emits when [member visible] is changed.
 ## is the blend layer, and the bottom layer is the base layer.
 ## For more information, refer to: [url]https://en.wikipedia.org/wiki/Blend_modes[/url]
 enum BlendModes {
-	NORMAL,  ## The blend layer colors are simply placed on top of the base colors.
+	PASS_THROUGH = -2,  ## Only for group layers. Ignores group blending, like it doesn't exist.
+	NORMAL = 0,  ## The blend layer colors are simply placed on top of the base colors.
+	ERASE,  ## Subtracts the numerical value of alpha from the base alpha.
 	DARKEN,  ## Keeps the darker colors between the blend and the base layers.
 	MULTIPLY,  ## Multiplies the numerical values of the two colors, giving a darker result.
 	COLOR_BURN,  ## Darkens by increasing the contrast between the blend and base colors.
@@ -124,6 +127,17 @@ func is_locked_in_hierarchy() -> bool:
 	return locked
 
 
+## Returns [code]true[/code] if the layer has at least one ancestor
+## that does not have its blend mode set to pass through.
+func is_blended_by_ancestor() -> bool:
+	var is_blended := false
+	for ancestor in get_ancestors():
+		if ancestor.blend_mode != BlendModes.PASS_THROUGH:
+			is_blended = true
+			break
+	return is_blended
+
+
 ## Returns an [Array] of [BaseLayer]s that are ancestors of this layer.
 ## If there are no ancestors, returns an empty array.
 func get_ancestors() -> Array[BaseLayer]:
@@ -141,6 +155,20 @@ func get_hierarchy_depth() -> int:
 	return 0
 
 
+## Returns the layer's top most parent that is responsible for its blending.
+## For example, if a layer belongs in a group with its blend mode set to anything but pass through,
+## and that group has no parents of its own, then that group gets returned.
+## If that group is a child of another non-pass through group,
+## then the grandparent group is returned, and so on.
+## If the layer has no ancestors, or if they are set to pass through mode, it returns self.
+func get_blender_ancestor() -> BaseLayer:
+	var blender := self
+	for ancestor in get_ancestors():
+		if ancestor.blend_mode != BlendModes.PASS_THROUGH:
+			blender = ancestor
+	return blender
+
+
 ## Returns the path of the layer in the timeline as a [String].
 func get_layer_path() -> String:
 	if is_instance_valid(parent):
@@ -189,9 +217,12 @@ func link_cel(cel: BaseCel, link_set = null) -> void:
 ## Returns a copy of the [param cel]'s [Image] with all of the effects applied to it.
 ## This method is not destructive as it does NOT change the data of the image,
 ## it just returns a copy.
-func display_effects(cel: BaseCel) -> Image:
+func display_effects(cel: BaseCel, image_override: Image = null) -> Image:
 	var image := Image.new()
-	image.copy_from(cel.get_image())
+	if is_instance_valid(image_override):
+		image.copy_from(image_override)
+	else:
+		image.copy_from(cel.get_image())
 	if not effects_enabled:
 		return image
 	var image_size := image.get_size()
@@ -200,8 +231,10 @@ func display_effects(cel: BaseCel) -> Image:
 			continue
 		var shader_image_effect := ShaderImageEffect.new()
 		shader_image_effect.generate_image(image, effect.shader, effect.params, image_size)
-	# Inherit effects from the parents
+	# Inherit effects from the parents, if their blend mode is set to pass through
 	for ancestor in get_ancestors():
+		if ancestor.blend_mode != BlendModes.PASS_THROUGH:
+			break
 		if not ancestor.effects_enabled:
 			continue
 		for effect in ancestor.effects:
diff --git a/src/Classes/Layers/GroupLayer.gd b/src/Classes/Layers/GroupLayer.gd
index f073dd3f5..6ce3f3410 100644
--- a/src/Classes/Layers/GroupLayer.gd
+++ b/src/Classes/Layers/GroupLayer.gd
@@ -8,47 +8,134 @@ var expanded := true
 func _init(_project: Project, _name := "") -> void:
 	project = _project
 	name = _name
+	blend_mode = BlendModes.PASS_THROUGH
 
 
 ## Blends all of the images of children layer of the group layer into a single image.
-func blend_children(frame: Frame, origin := Vector2i.ZERO) -> Image:
+func blend_children(frame: Frame, origin := Vector2i.ZERO, apply_effects := true) -> Image:
 	var image := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
 	var children := get_children(false)
 	if children.size() <= 0:
 		return image
-	var blend_rect := Rect2i(Vector2i.ZERO, project.size)
 	var textures: Array[Image] = []
-	var metadata_image := Image.create(children.size(), 4, false, Image.FORMAT_R8)
+	var metadata_image := Image.create(children.size(), 4, false, Image.FORMAT_RGF)
+	var current_child_index := 0
 	for i in children.size():
 		var layer := children[i]
 		if not layer.is_visible_in_hierarchy():
+			current_child_index += 1
 			continue
-		var cel := frame.cels[layer.index]
 		if layer is GroupLayer:
-			var blended_children: Image = layer.blend_children(frame, origin)
-			if DisplayServer.get_name() == "headless":
-				image.blend_rect(blended_children, blend_rect, origin)
-			else:
-				textures.append(blended_children)
-				DrawingAlgos.set_layer_metadata_image(layer, cel, metadata_image, i)
+			current_child_index = _blend_child_group(
+				image,
+				layer,
+				frame,
+				textures,
+				metadata_image,
+				current_child_index,
+				origin,
+				apply_effects
+			)
 		else:
-			if DisplayServer.get_name() == "headless":
-				DrawingAlgos.blend_layers_headless(image, project, layer, cel, origin)
-			else:
-				textures.append(layer.display_effects(cel))
-				DrawingAlgos.set_layer_metadata_image(layer, cel, metadata_image, i)
+			_include_child_in_blending(
+				image,
+				layer,
+				frame,
+				textures,
+				metadata_image,
+				current_child_index,
+				origin,
+				apply_effects
+			)
+		current_child_index += 1
 
-	if DisplayServer.get_name() != "headless":
+	if DisplayServer.get_name() != "headless" and textures.size() > 0:
 		var texture_array := Texture2DArray.new()
 		texture_array.create_from_images(textures)
 		var params := {
-			"layers": texture_array, "metadata": ImageTexture.create_from_image(metadata_image)
+			"layers": texture_array,
+			"metadata": ImageTexture.create_from_image(metadata_image),
+			"origin_x_positive": origin.x > 0,
+			"origin_y_positive": origin.y > 0,
 		}
 		var gen := ShaderImageEffect.new()
 		gen.generate_image(image, DrawingAlgos.blend_layers_shader, params, project.size)
+		if apply_effects:
+			image = display_effects(frame.cels[index], image)
 	return image
 
 
+func _include_child_in_blending(
+	image: Image,
+	layer: BaseLayer,
+	frame: Frame,
+	textures: Array[Image],
+	metadata_image: Image,
+	i: int,
+	origin: Vector2i,
+	apply_effects: bool
+) -> void:
+	var cel := frame.cels[layer.index]
+	if DisplayServer.get_name() == "headless":
+		DrawingAlgos.blend_layers_headless(image, project, layer, cel, origin)
+	else:
+		var cel_image: Image
+		if apply_effects:
+			cel_image = layer.display_effects(cel)
+		else:
+			cel_image = cel.get_image()
+		textures.append(cel_image)
+		DrawingAlgos.set_layer_metadata_image(layer, cel, metadata_image, i)
+		if origin != Vector2i.ZERO:
+			# Only used as a preview for the move tool, when used on a group's children
+			var test_array := [project.frames.find(frame), project.layers.find(layer)]
+			if test_array in project.selected_cels:
+				var origin_fixed := Vector2(origin).abs() / Vector2(cel_image.get_size())
+				metadata_image.set_pixel(i, 2, Color(origin_fixed.x, origin_fixed.y, 0.0, 0.0))
+
+
+## Include a child group in the blending process.
+## If the child group is set to pass through mode, loop through its children
+## and include them as separate images, instead of blending them all together.
+## Gets called recursively if the child group has children groups of its own,
+## and they are also set to pass through mode.
+func _blend_child_group(
+	image: Image,
+	layer: BaseLayer,
+	frame: Frame,
+	textures: Array[Image],
+	metadata_image: Image,
+	i: int,
+	origin: Vector2i,
+	apply_effects: bool
+) -> int:
+	var new_i := i
+	var blend_rect := Rect2i(Vector2i.ZERO, project.size)
+	var cel := frame.cels[layer.index]
+	if layer.blend_mode == BlendModes.PASS_THROUGH:
+		var children := layer.get_children(false)
+		for j in children.size():
+			var child := children[j]
+			if child is GroupLayer:
+				new_i = _blend_child_group(
+					image, child, frame, textures, metadata_image, i + j, origin, apply_effects
+				)
+			else:
+				new_i += j
+				metadata_image.crop(metadata_image.get_width() + 1, metadata_image.get_height())
+				_include_child_in_blending(
+					image, child, frame, textures, metadata_image, new_i, origin, apply_effects
+				)
+	else:
+		var blended_children := (layer as GroupLayer).blend_children(frame, origin)
+		if DisplayServer.get_name() == "headless":
+			image.blend_rect(blended_children, blend_rect, origin)
+		else:
+			textures.append(blended_children)
+			DrawingAlgos.set_layer_metadata_image(layer, cel, metadata_image, i)
+	return new_i
+
+
 # Overridden Methods:
 
 
diff --git a/src/Classes/Project.gd b/src/Classes/Project.gd
index 6f7cd9267..49ca857a9 100644
--- a/src/Classes/Project.gd
+++ b/src/Classes/Project.gd
@@ -3,6 +3,7 @@ class_name Project
 extends RefCounted
 ## A class for project properties.
 
+signal removed
 signal serialized(dict: Dictionary)
 signal about_to_deserialize(dict: Dictionary)
 signal resized
@@ -93,6 +94,7 @@ func _init(_frames: Array[Frame] = [], _name := tr("untitled"), _size := Vector2
 	tiles = Tiles.new(size)
 	selection_map.copy_from(Image.create(size.x, size.y, false, Image.FORMAT_LA8))
 	Global.tabs.add_tab(name)
+	undo_redo.max_steps = Global.max_undo_steps
 
 	x_symmetry_point = size.x - 1
 	y_symmetry_point = size.y - 1
@@ -136,6 +138,7 @@ func remove() -> void:
 	# Prevents memory leak (due to the layers' project reference stopping ref counting from freeing)
 	layers.clear()
 	Global.projects.erase(self)
+	removed.emit()
 
 
 func remove_backup_file() -> void:
@@ -203,9 +206,6 @@ func change_project() -> void:
 	Global.get_window().title = "%s - Pixelorama %s" % [name, Global.current_version]
 	if has_changed:
 		Global.get_window().title = Global.get_window().title + "(*)"
-	if export_directory_path != "":
-		Global.open_sprites_dialog.current_path = export_directory_path
-		Global.save_sprites_dialog.current_path = export_directory_path
 	selection_map_changed()
 
 
@@ -281,6 +281,9 @@ func serialize() -> Dictionary:
 
 func deserialize(dict: Dictionary, zip_reader: ZIPReader = null, file: FileAccess = null) -> void:
 	about_to_deserialize.emit(dict)
+	var pxo_version = dict.get(
+		"pxo_version", ProjectSettings.get_setting("application/config/Pxo_Version")
+	)
 	if dict.has("size_x") and dict.has("size_y"):
 		size.x = dict.size_x
 		size.y = dict.size_y
@@ -330,8 +333,7 @@ func deserialize(dict: Dictionary, zip_reader: ZIPReader = null, file: FileAcces
 							# Don't do anything with it, just read it so that the file can move on
 							file.get_buffer(size.x * size.y * 4)
 						cels.append(Cel3D.new(size, true))
-				if dict.has("pxo_version"):
-					cel["pxo_version"] = dict["pxo_version"]
+				cel["pxo_version"] = pxo_version
 				cels[cel_i].deserialize(cel)
 				_deserialize_metadata(cels[cel_i], cel)
 				cel_i += 1
@@ -351,7 +353,15 @@ func deserialize(dict: Dictionary, zip_reader: ZIPReader = null, file: FileAcces
 		# a layer, so loop again after creating them:
 		for layer_i in dict.layers.size():
 			layers[layer_i].index = layer_i
-			layers[layer_i].deserialize(dict.layers[layer_i])
+			var layer_dict: Dictionary = dict.layers[layer_i]
+			# Ensure that loaded pxo files from v1.0-v1.0.3 have the correct
+			# blend mode, after the addition of the Erase mode in v1.0.4.
+			if pxo_version < 4 and layer_dict.has("blend_mode"):
+				var blend_mode: int = layer_dict.get("blend_mode")
+				if blend_mode >= BaseLayer.BlendModes.ERASE:
+					blend_mode += 1
+				layer_dict["blend_mode"] = blend_mode
+			layers[layer_i].deserialize(layer_dict)
 			_deserialize_metadata(layers[layer_i], dict.layers[layer_i])
 	if dict.has("tags"):
 		for tag in dict.tags:
diff --git a/src/Classes/ResourceProject.gd b/src/Classes/ResourceProject.gd
new file mode 100644
index 000000000..cedb7d155
--- /dev/null
+++ b/src/Classes/ResourceProject.gd
@@ -0,0 +1,8 @@
+class_name ResourceProject
+extends Project
+
+signal resource_updated
+
+
+func _init(_frames: Array[Frame] = [], _name := tr("untitled"), _size := Vector2i(64, 64)) -> void:
+	super._init(_frames, _name + " (Virtual Resource)", _size)
diff --git a/src/Classes/SelectionMap.gd b/src/Classes/SelectionMap.gd
index 649a73299..abdc3329c 100644
--- a/src/Classes/SelectionMap.gd
+++ b/src/Classes/SelectionMap.gd
@@ -1,7 +1,8 @@
 class_name SelectionMap
 extends Image
 
-var invert_shader := preload("res://src/Shaders/Effects/Invert.gdshader")
+const INVERT_SHADER := preload("res://src/Shaders/Effects/Invert.gdshader")
+const OUTLINE_INLINE_SHADER := preload("res://src/Shaders/Effects/OutlineInline.gdshader")
 
 
 func is_pixel_selected(pixel: Vector2i, calculate_offset := true) -> bool:
@@ -87,8 +88,7 @@ func clear() -> void:
 func invert() -> void:
 	var params := {"red": true, "green": true, "blue": true, "alpha": true}
 	var gen := ShaderImageEffect.new()
-	gen.generate_image(self, invert_shader, params, get_size())
-	self.convert(Image.FORMAT_LA8)
+	gen.generate_image(self, INVERT_SHADER, params, get_size())
 
 
 ## Returns a copy of itself that is cropped to [param size].
@@ -183,3 +183,36 @@ func resize_bitmap_values(
 	if new_bitmap_size != size:
 		crop(new_bitmap_size.x, new_bitmap_size.y)
 	blit_rect(smaller_image, Rect2i(Vector2i.ZERO, new_bitmap_size), dst)
+
+
+func expand(width: int, brush: int) -> void:
+	var params := {
+		"color": Color(1, 1, 1, 1),
+		"width": width,
+		"brush": brush,
+	}
+	var gen := ShaderImageEffect.new()
+	gen.generate_image(self, OUTLINE_INLINE_SHADER, params, get_size())
+
+
+func shrink(width: int, brush: int) -> void:
+	var params := {
+		"color": Color(0),
+		"width": width,
+		"brush": brush,
+		"inside": true,
+	}
+	var gen := ShaderImageEffect.new()
+	gen.generate_image(self, OUTLINE_INLINE_SHADER, params, get_size())
+
+
+func border(width: int, brush: int) -> void:
+	var params := {
+		"color": Color(1, 1, 1, 1),
+		"width": width,
+		"brush": brush,
+		"inside": true,
+		"keep_border_only": true,
+	}
+	var gen := ShaderImageEffect.new()
+	gen.generate_image(self, OUTLINE_INLINE_SHADER, params, get_size())
diff --git a/src/Classes/ShaderImageEffect.gd b/src/Classes/ShaderImageEffect.gd
index 04604fb0f..3a38b75e7 100644
--- a/src/Classes/ShaderImageEffect.gd
+++ b/src/Classes/ShaderImageEffect.gd
@@ -54,7 +54,7 @@ func generate_image(img: Image, shader: Shader, params: Dictionary, size: Vector
 	RenderingServer.free_rid(ci_rid)
 	RenderingServer.free_rid(mat_rid)
 	RenderingServer.free_rid(texture)
-	viewport_texture.convert(Image.FORMAT_RGBA8)
+	viewport_texture.convert(img.get_format())
 	img.copy_from(viewport_texture)
 	if resized_width:
 		img.crop(img.get_width() - 1, img.get_height())
diff --git a/src/Classes/ShaderLoader.gd b/src/Classes/ShaderLoader.gd
new file mode 100644
index 000000000..495bc5c46
--- /dev/null
+++ b/src/Classes/ShaderLoader.gd
@@ -0,0 +1,429 @@
+class_name ShaderLoader
+extends RefCounted
+
+const VALUE_SLIDER_V2_TSCN := preload("res://src/UI/Nodes/ValueSliderV2.tscn")
+const BASIS_SLIDERS_TSCN := preload("res://src/UI/Nodes/BasisSliders.tscn")
+const GRADIENT_EDIT_TSCN := preload("res://src/UI/Nodes/GradientEdit.tscn")
+
+
+static func create_ui_for_shader_uniforms(
+	shader: Shader,
+	params: Dictionary,
+	parent_node: Control,
+	value_changed: Callable,
+	file_selected: Callable
+) -> void:
+	var code := shader.code.split("\n")
+	var uniforms: PackedStringArray = []
+	var uniform_data: PackedStringArray = []
+	var description: String = ""
+	var description_began := false
+	for line in code:
+		# Management of "end" tags
+		if line.begins_with("// (end DESCRIPTION)"):
+			description_began = false
+		if description_began:
+			description += "\n" + line.strip_edges()
+
+		# Detection of uniforms
+		if line.begins_with("uniform"):
+			uniforms.append(line)
+		if line.begins_with("// uniform_data"):
+			uniform_data.append(line)
+
+		# Management of "begin" tags
+		elif line.begins_with("// (begin DESCRIPTION)"):
+			description_began = true
+	# Validation of begin/end tags
+	if description_began == true:  # Description started but never ended. treat it as an error
+		print("Shader description started but never finished. Assuming empty description")
+		description = ""
+	if not description.is_empty():
+		parent_node.tooltip_text = str(
+			"Description:\n", description.replace("//", "").strip_edges()
+		)
+
+	for uniform in uniforms:
+		# Example uniform:
+		# uniform float parameter_name : hint_range(0, 255) = 100.0;
+		var uniform_split := uniform.split("=")
+		var u_value := ""
+		if uniform_split.size() > 1:
+			u_value = uniform_split[1].replace(";", "").strip_edges()
+		else:
+			uniform_split[0] = uniform_split[0].replace(";", "").strip_edges()
+
+		var u_left_side := uniform_split[0].split(":")
+		var u_hint := ""
+		if u_left_side.size() > 1:
+			u_hint = u_left_side[1].strip_edges()
+			u_hint = u_hint.replace(";", "")
+
+		var u_init := u_left_side[0].split(" ")
+		var u_type := u_init[1]
+		var u_name := u_init[2]
+		# Find custom data of the uniform, if any exists
+		# Right now it only checks if a uniform should have another type of node
+		# Such as integers having OptionButtons
+		# But in the future it could be expanded to include custom names or descriptions.
+		var custom_data: PackedStringArray = []
+		var type_override := ""
+		for data in uniform_data:
+			if u_name in data:
+				var line_to_examine := data.split(" ")
+				if line_to_examine[3] == "type::":
+					var temp_splitter := data.split("::")
+					if temp_splitter.size() > 1:
+						type_override = temp_splitter[1].strip_edges()
+
+				custom_data.append(data)
+		var humanized_u_name := Keychain.humanize_snake_case(u_name) + ":"
+
+		if u_type == "float" or u_type == "int":
+			var hbox := HBoxContainer.new()
+			var label := Label.new()
+			label.text = humanized_u_name
+			label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+			hbox.add_child(label)
+			if type_override.begins_with("OptionButton"):
+				var option_button := OptionButton.new()
+				option_button.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+				option_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
+				option_button.item_selected.connect(value_changed.bind(u_name))
+				var items := (
+					type_override
+					. replace("OptionButton ", "")
+					. replace("[", "")
+					. replace("]", "")
+					. split("||")
+				)
+				for item in items:
+					option_button.add_item(item)
+				if u_value != "":
+					option_button.select(int(u_value))
+				if params.has(u_name):
+					option_button.select(params[u_name])
+				else:
+					params[u_name] = option_button.selected
+				hbox.add_child(option_button)
+			else:
+				var slider := ValueSlider.new()
+				slider.allow_greater = true
+				slider.allow_lesser = true
+				slider.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+				var min_value := 0.0
+				var max_value := 255.0
+				var step := 1.0
+				var range_values_array: PackedStringArray
+				if "hint_range" in u_hint:
+					var range_values: String = u_hint.replace("hint_range(", "")
+					range_values = range_values.replace(")", "").strip_edges()
+					range_values_array = range_values.split(",")
+
+				if u_type == "float":
+					if range_values_array.size() >= 1:
+						min_value = float(range_values_array[0])
+					else:
+						min_value = 0.01
+
+					if range_values_array.size() >= 2:
+						max_value = float(range_values_array[1])
+
+					if range_values_array.size() >= 3:
+						step = float(range_values_array[2])
+					else:
+						step = 0.01
+
+					if u_value != "":
+						slider.value = float(u_value)
+				else:
+					if range_values_array.size() >= 1:
+						min_value = int(range_values_array[0])
+
+					if range_values_array.size() >= 2:
+						max_value = int(range_values_array[1])
+
+					if range_values_array.size() >= 3:
+						step = int(range_values_array[2])
+
+					if u_value != "":
+						slider.value = int(u_value)
+				slider.min_value = min_value
+				slider.max_value = max_value
+				slider.step = step
+				if params.has(u_name):
+					slider.value = params[u_name]
+				else:
+					params[u_name] = slider.value
+				slider.value_changed.connect(value_changed.bind(u_name))
+				slider.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
+				hbox.add_child(slider)
+			parent_node.add_child(hbox)
+		elif u_type == "vec2" or u_type == "ivec2" or u_type == "uvec2":
+			var label := Label.new()
+			label.text = humanized_u_name
+			label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+			var vector2 := _vec2str_to_vector2(u_value)
+			var slider := VALUE_SLIDER_V2_TSCN.instantiate() as ValueSliderV2
+			slider.show_ratio = true
+			slider.allow_greater = true
+			if u_type != "uvec2":
+				slider.allow_lesser = true
+			slider.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+			slider.value = vector2
+			if params.has(u_name):
+				slider.value = params[u_name]
+			else:
+				params[u_name] = slider.value
+			slider.value_changed.connect(value_changed.bind(u_name))
+			var hbox := HBoxContainer.new()
+			hbox.add_child(label)
+			hbox.add_child(slider)
+			parent_node.add_child(hbox)
+		elif u_type == "vec4":
+			if "source_color" in u_hint:
+				var label := Label.new()
+				label.text = humanized_u_name
+				label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+				var color := _vec4str_to_color(u_value)
+				var color_button := ColorPickerButton.new()
+				color_button.custom_minimum_size = Vector2(20, 20)
+				color_button.color = color
+				if params.has(u_name):
+					color_button.color = params[u_name]
+				else:
+					params[u_name] = color_button.color
+				color_button.color_changed.connect(value_changed.bind(u_name))
+				color_button.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+				color_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
+				var hbox := HBoxContainer.new()
+				hbox.add_child(label)
+				hbox.add_child(color_button)
+				parent_node.add_child(hbox)
+		elif u_type == "mat3":
+			var label := Label.new()
+			label.text = humanized_u_name
+			label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+			var basis := _mat3str_to_basis(u_value)
+			var sliders := BASIS_SLIDERS_TSCN.instantiate() as BasisSliders
+			sliders.allow_greater = true
+			sliders.allow_lesser = true
+			sliders.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+			sliders.value = basis
+			if params.has(u_name):
+				sliders.value = params[u_name]
+			else:
+				params[u_name] = sliders.value
+			sliders.value_changed.connect(value_changed.bind(u_name))
+			var hbox := HBoxContainer.new()
+			hbox.add_child(label)
+			hbox.add_child(sliders)
+			parent_node.add_child(hbox)
+		elif u_type == "sampler2D":
+			if u_name == "selection":
+				continue
+			if u_name == "palette_texture":
+				var palette := Palettes.current_palette
+				var palette_texture := ImageTexture.create_from_image(palette.convert_to_image())
+				value_changed.call(palette_texture, u_name)
+				Palettes.palette_selected.connect(
+					func(_name): _shader_change_palette(value_changed, u_name)
+				)
+				palette.data_changed.connect(
+					func(): _shader_update_palette_texture(palette, value_changed, u_name)
+				)
+				continue
+			var label := Label.new()
+			label.text = humanized_u_name
+			label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+			var hbox := HBoxContainer.new()
+			hbox.add_child(label)
+			if u_name.begins_with("gradient_"):
+				var gradient_edit := GRADIENT_EDIT_TSCN.instantiate() as GradientEditNode
+				gradient_edit.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+				if params.has(u_name) and params[u_name] is GradientTexture2D:
+					gradient_edit.set_gradient_texture(params[u_name])
+				else:
+					params[u_name] = gradient_edit.texture
+				# This needs to be call_deferred because GradientTexture2D gets updated next frame.
+				# Without this, the texture is purple.
+				value_changed.call_deferred(gradient_edit.texture, u_name)
+				gradient_edit.updated.connect(
+					func(_gradient, _cc): value_changed.call(gradient_edit.texture, u_name)
+				)
+				hbox.add_child(gradient_edit)
+			else:  ## Simple texture
+				var file_dialog := FileDialog.new()
+				file_dialog.file_mode = FileDialog.FILE_MODE_OPEN_FILE
+				file_dialog.access = FileDialog.ACCESS_FILESYSTEM
+				file_dialog.size = Vector2(384, 281)
+				file_dialog.file_selected.connect(file_selected.bind(u_name))
+				file_dialog.use_native_dialog = Global.use_native_file_dialogs
+				var button := Button.new()
+				button.text = "Load texture"
+				button.pressed.connect(file_dialog.popup_centered)
+				button.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+				button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
+				var mod_button := Button.new()
+				mod_button.text = "Modify"
+				mod_button.pressed.connect(
+					func():
+						_modify_texture_resource(
+							_get_loaded_texture(params, u_name),
+							u_name,
+							_shader_update_texture.bind(value_changed, u_name)
+						)
+				)
+				mod_button.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+				mod_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
+				hbox.add_child(button)
+				hbox.add_child(mod_button)
+				parent_node.add_child(file_dialog)
+			parent_node.add_child(hbox)
+
+		elif u_type == "bool":
+			var label := Label.new()
+			label.text = humanized_u_name
+			label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+			var checkbox := CheckBox.new()
+			checkbox.text = "On"
+			if u_value == "true":
+				checkbox.button_pressed = true
+			if params.has(u_name):
+				checkbox.button_pressed = params[u_name]
+			else:
+				params[u_name] = checkbox.button_pressed
+			checkbox.toggled.connect(value_changed.bind(u_name))
+			checkbox.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+			checkbox.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
+			var hbox := HBoxContainer.new()
+			hbox.add_child(label)
+			hbox.add_child(checkbox)
+			parent_node.add_child(hbox)
+
+
+static func _vec2str_to_vector2(vec2: String) -> Vector2:
+	vec2 = vec2.replace("uvec2", "vec2")
+	vec2 = vec2.replace("ivec2", "vec2")
+	vec2 = vec2.replace("vec2(", "")
+	vec2 = vec2.replace(")", "")
+	var vec_values := vec2.split(",")
+	if vec_values.size() == 0:
+		return Vector2.ZERO
+	var y := float(vec_values[0])
+	if vec_values.size() == 2:
+		y = float(vec_values[1])
+	var vector2 := Vector2(float(vec_values[0]), y)
+	return vector2
+
+
+static func _vec3str_to_vector3(vec3: String) -> Vector3:
+	vec3 = vec3.replace("uvec3", "vec3")
+	vec3 = vec3.replace("ivec3", "vec3")
+	vec3 = vec3.replace("vec3(", "")
+	vec3 = vec3.replace(")", "")
+	var vec_values := vec3.split(",")
+	if vec_values.size() == 0:
+		return Vector3.ZERO
+	var y := float(vec_values[0])
+	var z := float(vec_values[0])
+	if vec_values.size() >= 2:
+		y = float(vec_values[1])
+	if vec_values.size() == 3:
+		z = float(vec_values[2])
+	var vector3 := Vector3(float(vec_values[0]), y, z)
+	return vector3
+
+
+static func _vec4str_to_color(vec4: String) -> Color:
+	vec4 = vec4.replace("vec4(", "")
+	vec4 = vec4.replace(")", "")
+	var rgba_values := vec4.split(",")
+	var red := float(rgba_values[0])
+
+	var green := float(rgba_values[0])
+	if rgba_values.size() >= 2:
+		green = float(rgba_values[1])
+
+	var blue := float(rgba_values[0])
+	if rgba_values.size() >= 3:
+		blue = float(rgba_values[2])
+
+	var alpha := float(rgba_values[0])
+	if rgba_values.size() == 4:
+		alpha = float(rgba_values[3])
+	var color := Color(red, green, blue, alpha)
+	return color
+
+
+static func _mat3str_to_basis(mat3: String) -> Basis:
+	mat3 = mat3.replace("mat3(", "")
+	mat3 = mat3.replace("))", ")")
+	mat3 = mat3.replace("), ", ")")
+	var vec3_values := mat3.split("vec3", false)
+	var vec3_x := _vec3str_to_vector3(vec3_values[0])
+
+	var vec3_y := _vec3str_to_vector3(vec3_values[0])
+	if vec3_values.size() >= 2:
+		vec3_y = _vec3str_to_vector3(vec3_values[1])
+
+	var vec3_z := _vec3str_to_vector3(vec3_values[0])
+	if vec3_values.size() == 3:
+		vec3_z = _vec3str_to_vector3(vec3_values[2])
+	var basis := Basis(vec3_x, vec3_y, vec3_z)
+	return basis
+
+
+static func _shader_change_palette(value_changed: Callable, parameter_name: String) -> void:
+	var palette := Palettes.current_palette
+	_shader_update_palette_texture(palette, value_changed, parameter_name)
+	#if not palette.data_changed.is_connected(_shader_update_palette_texture):
+	palette.data_changed.connect(
+		func(): _shader_update_palette_texture(palette, value_changed, parameter_name)
+	)
+
+
+static func _shader_update_palette_texture(
+	palette: Palette, value_changed: Callable, parameter_name: String
+) -> void:
+	value_changed.call(ImageTexture.create_from_image(palette.convert_to_image()), parameter_name)
+
+
+static func _get_loaded_texture(params: Dictionary, parameter_name: String) -> Image:
+	if parameter_name in params:
+		if params[parameter_name] is ImageTexture:
+			return params[parameter_name].get_image()
+	var image := Image.create_empty(64, 64, false, Image.FORMAT_RGBA8)
+	return image
+
+
+static func _shader_update_texture(
+	resource_proj: ResourceProject, value_changed: Callable, parameter_name: String
+) -> void:
+	var warnings := ""
+	if resource_proj.frames.size() > 1:
+		warnings += "This resource is intended to have 1 frame only. Extra frames will be ignored."
+	if resource_proj.layers.size() > 1:
+		warnings += "\nThis resource is intended to have 1 layer only. layers will be blended."
+
+	var updated_image := Image.create_empty(
+		resource_proj.size.x, resource_proj.size.y, false, Image.FORMAT_RGBA8
+	)
+	var frame := resource_proj.frames[0]
+	DrawingAlgos.blend_layers(updated_image, frame, Vector2i.ZERO, resource_proj)
+	value_changed.call(ImageTexture.create_from_image(updated_image), parameter_name)
+	if not warnings.is_empty():
+		Global.popup_error(warnings)
+
+
+static func _modify_texture_resource(
+	image: Image, resource_name: StringName, update_callable: Callable
+) -> void:
+	var resource_proj := ResourceProject.new([], resource_name, image.get_size())
+	resource_proj.layers.append(PixelLayer.new(resource_proj))
+	resource_proj.frames.append(resource_proj.new_empty_frame())
+	resource_proj.frames[0].cels[0].set_content(image)
+	resource_proj.resource_updated.connect(update_callable)
+	Global.projects.append(resource_proj)
+	Global.tabs.current_tab = Global.tabs.get_tab_count() - 1
+	Global.canvas.camera_zoom()
diff --git a/src/HandleExtensions.gd b/src/HandleExtensions.gd
index 4e115f751..a0857ba31 100644
--- a/src/HandleExtensions.gd
+++ b/src/HandleExtensions.gd
@@ -159,6 +159,12 @@ func _load_extension(extension_file_or_folder_name: StringName, internal := fals
 		var supported_api_versions = extension_json["supported_api_versions"]
 		if typeof(supported_api_versions) == TYPE_ARRAY:
 			supported_api_versions = PackedInt32Array(supported_api_versions)
+			# Extensions that support API version 4 are backwards compatible with version 5.
+			# Version 5 only adds new methods and does not break compatibility.
+			# TODO: Find a better way to determine which API versions
+			# have backwards compatibility with each other.
+			if 4 in supported_api_versions and not 5 in supported_api_versions:
+				supported_api_versions.append(5)
 			if not ExtensionsApi.get_api_version() in supported_api_versions:
 				var err_text := (
 					"The extension %s will not work on this version of Pixelorama \n"
diff --git a/src/Main.gd b/src/Main.gd
index 5f0828b29..8e47b94e5 100644
--- a/src/Main.gd
+++ b/src/Main.gd
@@ -18,6 +18,9 @@ var splash_dialog: AcceptDialog:
 
 @onready var main_ui := $MenuAndUI/UI/DockableContainer as DockableContainer
 @onready var backup_confirmation: ConfirmationDialog = $Dialogs/BackupConfirmation
+## Dialog used to open images and project (.pxo) files.
+@onready var open_sprite_dialog := $Dialogs/OpenSprite as FileDialog
+## Dialog used to save project (.pxo) files.
 @onready var save_sprite_dialog := $Dialogs/SaveSprite as FileDialog
 @onready var save_sprite_html5: ConfirmationDialog = $Dialogs/SaveSpriteHTML5
 @onready var tile_mode_offsets_dialog: ConfirmationDialog = $Dialogs/TileModeOffsetsDialog
@@ -157,6 +160,7 @@ some useful [SYSTEM OPTIONS] are:
 
 
 func _init() -> void:
+	Global.project_switched.connect(_project_switched)
 	if not DirAccess.dir_exists_absolute("user://backups"):
 		DirAccess.make_dir_recursive_absolute("user://backups")
 	Global.shrink = _get_auto_display_scale()
@@ -177,22 +181,12 @@ func _ready() -> void:
 
 	quit_and_save_dialog.add_button("Exit without saving", false, "ExitWithoutSaving")
 
-	Global.open_sprites_dialog.current_dir = Global.config_cache.get_value(
+	open_sprite_dialog.current_dir = Global.config_cache.get_value(
 		"data", "current_dir", OS.get_system_dir(OS.SYSTEM_DIR_DESKTOP)
 	)
 	save_sprite_dialog.current_dir = Global.config_cache.get_value(
 		"data", "current_dir", OS.get_system_dir(OS.SYSTEM_DIR_DESKTOP)
 	)
-	var include_blended := CheckBox.new()
-	include_blended.name = "IncludeBlended"
-	include_blended.text = "Include blended images"
-	include_blended.tooltip_text = """
-If enabled, the final blended images are also being stored in the pxo, for each frame.
-This makes the pxo file larger and is useful for importing by third-party software
-or CLI exporting. Loading pxo files in Pixelorama does not need this option to be enabled.
-"""
-	include_blended.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
-	save_sprite_dialog.get_vbox().add_child(include_blended)
 	_handle_cmdline_arguments()
 	get_tree().root.files_dropped.connect(_on_files_dropped)
 	if OS.get_name() == "Android":
@@ -213,6 +207,12 @@ func _input(event: InputEvent) -> void:
 			get_viewport().gui_get_focus_owner().release_focus()
 
 
+func _project_switched() -> void:
+	if Global.current_project.export_directory_path != "":
+		open_sprite_dialog.current_path = Global.current_project.export_directory_path
+		save_sprite_dialog.current_path = Global.current_project.export_directory_path
+
+
 # Taken from https://github.com/godotengine/godot/blob/3.x/editor/editor_settings.cpp#L1474
 func _get_auto_display_scale() -> float:
 	if OS.get_name() == "macOS":
@@ -250,16 +250,10 @@ func _handle_layout_files() -> void:
 func _setup_application_window_size() -> void:
 	if DisplayServer.get_name() == "headless":
 		return
-	var root := get_tree().root
-	root.content_scale_aspect = Window.CONTENT_SCALE_ASPECT_IGNORE
-	root.content_scale_mode = Window.CONTENT_SCALE_MODE_DISABLED
-	# Set a minimum window size to prevent UI elements from collapsing on each other.
-	root.min_size = Vector2(1024, 576)
-	root.content_scale_factor = Global.shrink
+	set_display_scale()
 	if Global.font_size != theme.default_font_size:
 		theme.default_font_size = Global.font_size
 		theme.set_font_size("font_size", "HeaderSmall", Global.font_size + 2)
-	set_custom_cursor()
 
 	if OS.get_name() == "Web":
 		return
@@ -280,6 +274,16 @@ func _setup_application_window_size() -> void:
 			get_window().size = Global.config_cache.get_value("window", "size")
 
 
+func set_display_scale() -> void:
+	var root := get_window()
+	root.content_scale_aspect = Window.CONTENT_SCALE_ASPECT_IGNORE
+	root.content_scale_mode = Window.CONTENT_SCALE_MODE_DISABLED
+	# Set a minimum window size to prevent UI elements from collapsing on each other.
+	root.min_size = Vector2(1024, 576)
+	root.content_scale_factor = Global.shrink
+	set_custom_cursor()
+
+
 func set_custom_cursor() -> void:
 	if Global.native_cursors:
 		return
@@ -462,15 +466,17 @@ func save_project(path: String) -> void:
 		project_to_save = changed_projects_on_quit[0]
 	var include_blended := false
 	if OS.get_name() == "Web":
-		var file_name: String = save_sprite_html5.get_node("%FileNameLineEdit").text
-		file_name += ".pxo"
+		var file_name := project_to_save.name + ".pxo"
 		path = "user://".path_join(file_name)
 		include_blended = save_sprite_html5.get_node("%IncludeBlended").button_pressed
 	else:
-		include_blended = save_sprite_dialog.get_vbox().get_node("IncludeBlended").button_pressed
+		if save_sprite_dialog.get_selected_options().size() > 0:
+			include_blended = save_sprite_dialog.get_selected_options()[
+				save_sprite_dialog.get_option_name(0)
+			]
 	var success := OpenSave.save_pxo_file(path, false, include_blended, project_to_save)
 	if success:
-		Global.open_sprites_dialog.current_dir = path.get_base_dir()
+		open_sprite_dialog.current_dir = path.get_base_dir()
 	if is_quitting_on_save:
 		changed_projects_on_quit.pop_front()
 		_save_on_quit_confirmation()
diff --git a/src/Main.tscn b/src/Main.tscn
index ba4c1a8d4..1dfb9224e 100644
--- a/src/Main.tscn
+++ b/src/Main.tscn
@@ -74,7 +74,6 @@ dialog_text = "This is an error message!"
 
 [node name="BackupConfirmation" type="ConfirmationDialog" parent="Dialogs"]
 size = Vector2i(320, 200)
-popup_window = true
 dialog_text = "Autosaved project(s) from a crashed session were found.
 Do you want to recover the data?"
 dialog_autowrap = true
diff --git a/src/Palette/Palette.gd b/src/Palette/Palette.gd
index 5d4a969d7..e2f480f78 100644
--- a/src/Palette/Palette.gd
+++ b/src/Palette/Palette.gd
@@ -7,7 +7,9 @@ const DEFAULT_WIDTH := 8
 const DEFAULT_HEIGHT := 8
 
 # Metadata
-var name := "Custom Palette"
+var name := "Custom Palette":
+	set(value):
+		name = value.strip_edges()
 var comment := ""
 var path := ""
 
@@ -214,7 +216,7 @@ func insert_color(index: int, new_color: Color) -> void:
 	var c := PaletteColor.new(new_color, index)
 	# If insert happens on non empty swatch recursively move the original color
 	# and every other color to its right one swatch to right
-	if colors[index] != null:
+	if colors.has(index):
 		_move_right(index)
 	colors[index] = c
 	data_changed.emit()
@@ -229,7 +231,7 @@ func _move_right(index: int) -> void:
 		colors_max = width * height
 
 	# If swatch to right to this color is not empty move that color right too
-	if colors[index + 1] != null:
+	if colors.has(index + 1):
 		_move_right(index + 1)
 
 	colors[index + 1] = colors[index]
@@ -285,6 +287,38 @@ func sort(option: Palettes.SortOptions) -> void:
 			sort_method = func(a: PaletteColor, b: PaletteColor): return a.color.s < b.color.s
 		Palettes.SortOptions.VALUE:
 			sort_method = func(a: PaletteColor, b: PaletteColor): return a.color.v < b.color.v
+		Palettes.SortOptions.LIGHTNESS:
+			# Code inspired from:
+			# gdlint: ignore=max-line-length
+			# https://github.com/bottosson/bottosson.github.io/blob/master/misc/colorpicker/colorconversion.js#L519
+			sort_method = func(a: PaletteColor, b: PaletteColor):
+				# function that returns OKHSL lightness
+				var lum: Callable = func(c: Color):
+					var l = 0.4122214708 * (c.r) + 0.5363325363 * (c.g) + 0.0514459929 * (c.b)
+					var m = 0.2119034982 * (c.r) + 0.6806995451 * (c.g) + 0.1073969566 * (c.b)
+					var s = 0.0883024619 * (c.r) + 0.2817188376 * (c.g) + 0.6299787005 * (c.b)
+					var l_cr = pow(l, 1 / 3.0)
+					var m_cr = pow(m, 1 / 3.0)
+					var s_cr = pow(s, 1 / 3.0)
+					var oklab_l = 0.2104542553 * l_cr + 0.7936177850 * m_cr - 0.0040720468 * s_cr
+					# calculating toe
+					var k_1 = 0.206
+					var k_2 = 0.03
+					var k_3 = (1 + k_1) / (1 + k_2)
+					return (
+						0.5
+						* (
+							k_3 * oklab_l
+							- k_1
+							+ sqrt(
+								(
+									(k_3 * oklab_l - k_1) * (k_3 * oklab_l - k_1)
+									+ 4 * k_2 * k_3 * oklab_l
+								)
+							)
+						)
+					)
+				return lum.call(a.color.srgb_to_linear()) < lum.call(b.color.srgb_to_linear())
 		Palettes.SortOptions.RED:
 			sort_method = func(a: PaletteColor, b: PaletteColor): return a.color.r < b.color.r
 		Palettes.SortOptions.GREEN:
diff --git a/src/Palette/PalettePanel.gd b/src/Palette/PalettePanel.gd
index 50ee1a9e5..7cc64c42d 100644
--- a/src/Palette/PalettePanel.gd
+++ b/src/Palette/PalettePanel.gd
@@ -49,6 +49,8 @@ func _ready() -> void:
 	sort_button_popup.add_item("Sort by saturation", Palettes.SortOptions.SATURATION)
 	sort_button_popup.add_item("Sort by value", Palettes.SortOptions.VALUE)
 	sort_button_popup.add_separator()
+	sort_button_popup.add_item("Sort by lightness", Palettes.SortOptions.LIGHTNESS)
+	sort_button_popup.add_separator()
 	sort_button_popup.add_item("Sort by red", Palettes.SortOptions.RED)
 	sort_button_popup.add_item("Sort by green", Palettes.SortOptions.GREEN)
 	sort_button_popup.add_item("Sort by blue", Palettes.SortOptions.BLUE)
diff --git a/src/Palette/PaletteScroll.gd b/src/Palette/PaletteScroll.gd
index 0d0dec396..c3c2156a0 100644
--- a/src/Palette/PaletteScroll.gd
+++ b/src/Palette/PaletteScroll.gd
@@ -90,3 +90,4 @@ func _on_PaletteScroll_gui_input(event: InputEvent) -> void:
 			return
 		resize_grid()
 		set_sliders(palette_grid.current_palette, palette_grid.grid_window_origin + scroll_vector)
+		get_window().set_input_as_handled()
diff --git a/src/Preferences/PreferencesDialog.gd b/src/Preferences/PreferencesDialog.gd
index bea75ff3e..5ba2f37d6 100644
--- a/src/Preferences/PreferencesDialog.gd
+++ b/src/Preferences/PreferencesDialog.gd
@@ -9,6 +9,7 @@ var preferences: Array[Preference] = [
 	),
 	Preference.new("ffmpeg_path", "Startup/StartupContainer/FFMPEGPath", "text", ""),
 	Preference.new("shrink", "%ShrinkSlider", "value", 1.0),
+	Preference.new("theme_font_index", "%FontOptionButton", "selected", 1),
 	Preference.new("font_size", "%FontSizeSlider", "value", 16),
 	Preference.new(
 		"dim_on_popup", "Interface/InterfaceOptions/DimCheckBox", "button_pressed", true
@@ -36,10 +37,16 @@ var preferences: Array[Preference] = [
 		"custom_icon_color", "Interface/ButtonOptions/IconColorButton", "color", Color.GRAY
 	),
 	Preference.new(
-		"left_tool_color", "Interface/ButtonOptions/LeftToolColorButton", "color", Color("0086cf")
+		"share_options_between_tools",
+		"Tools/ToolOptions/ShareOptionsCheckBox",
+		"button_pressed",
+		false
 	),
 	Preference.new(
-		"right_tool_color", "Interface/ButtonOptions/RightToolColorButton", "color", Color("fd6d14")
+		"left_tool_color", "Tools/ToolOptions/LeftToolColorButton", "color", Color("0086cf")
+	),
+	Preference.new(
+		"right_tool_color", "Tools/ToolOptions/RightToolColorButton", "color", Color("fd6d14")
 	),
 	Preference.new(
 		"tool_button_size",
@@ -169,6 +176,7 @@ var preferences: Array[Preference] = [
 		"selection_border_color_2", "Selection/SelectionOptions/BorderColor2", "color", Color.BLACK
 	),
 	Preference.new("fps_limit", "Performance/PerformanceContainer/SetFPSLimit", "value", 0),
+	Preference.new("max_undo_steps", "Performance/PerformanceContainer/MaxUndoSteps", "value", 0),
 	Preference.new(
 		"pause_when_unfocused",
 		"Performance/PerformanceContainer/PauseAppFocus",
@@ -197,6 +205,7 @@ var selected_item := 0
 @onready var list: ItemList = $HSplitContainer/List
 @onready var right_side: VBoxContainer = $"%RightSide"
 @onready var language: VBoxContainer = %Language
+@onready var system_language := language.get_node(^"System Language") as CheckBox
 @onready var autosave_container: Container = right_side.get_node("Backup/AutosaveContainer")
 @onready var autosave_interval: SpinBox = autosave_container.get_node("AutosaveInterval")
 @onready var themes: BoxContainer = right_side.get_node("Interface/Themes")
@@ -232,6 +241,7 @@ class Preference:
 
 
 func _ready() -> void:
+	Global.font_loaded.connect(_add_fonts)
 	# Replace OK since preference changes are being applied immediately, not after OK confirmation
 	get_ok_button().text = "Close"
 	get_ok_button().size_flags_horizontal = Control.SIZE_EXPAND_FILL
@@ -251,6 +261,7 @@ func _ready() -> void:
 		startup.queue_free()
 		right_side.get_node(^"Language").visible = true
 		Global.open_last_project = false
+		%ClearRecentFiles.hide()
 	if OS.get_name() == "Windows":
 		tablet_driver_label.visible = true
 		tablet_driver.visible = true
@@ -270,7 +281,6 @@ func _ready() -> void:
 		content_list.append(child.name)
 
 	# Create buttons for each language
-	var system_language := language.get_node(^"System Language") as Button
 	var button_group: ButtonGroup = system_language.button_group
 	for locale in Global.loaded_locales:  # Create radiobuttons for each language
 		var button := CheckBox.new()
@@ -284,6 +294,8 @@ func _ready() -> void:
 		language.add_child(button)
 		button.pressed.connect(_on_language_pressed.bind(button.get_index()))
 
+	_add_fonts()
+
 	for pref in preferences:
 		if not right_side.has_node(pref.node_path):
 			continue
@@ -350,6 +362,14 @@ func _on_Preference_value_changed(value, pref: Preference, button: RestoreDefaul
 	disable_restore_default_button(button, disable)
 
 
+## Add fonts to the font option button.
+func _add_fonts() -> void:
+	%FontOptionButton.clear()
+	for font_name in Global.get_available_font_names():
+		%FontOptionButton.add_item(font_name)
+	%FontOptionButton.select(Global.theme_font_index)
+
+
 func preference_update(require_restart := false) -> void:
 	if require_restart:
 		must_restart.visible = true
@@ -393,12 +413,7 @@ func _on_List_item_selected(index: int) -> void:
 
 
 func _on_shrink_apply_button_pressed() -> void:
-	var root := get_tree().root
-	root.content_scale_aspect = Window.CONTENT_SCALE_ASPECT_IGNORE
-	root.content_scale_mode = Window.CONTENT_SCALE_MODE_DISABLED
-	root.min_size = Vector2(1024, 576)
-	root.content_scale_factor = Global.shrink
-	Global.control.set_custom_cursor()
+	Global.control.set_display_scale()
 	hide()
 	popup_centered(Vector2(600, 400))
 	Global.dialog_open(true)
@@ -423,3 +438,51 @@ func _on_language_pressed(index: int) -> void:
 	Tools.update_hint_tooltips()
 	list.clear()
 	add_tabs(true)
+
+
+func _on_reset_button_pressed() -> void:
+	$ResetOptionsConfirmation.popup_centered()
+
+
+func _on_reset_options_confirmation_confirmed() -> void:
+	# Clear preferences
+	if %ResetPreferences.button_pressed:
+		system_language.button_pressed = true
+		_on_language_pressed(0)
+		themes.buttons_container.get_child(0).button_pressed = true
+		Themes.change_theme(0)
+		for pref in preferences:
+			var property_name := pref.prop_name
+			var default_value = pref.default_value
+			var node := right_side.get_node(pref.node_path)
+			if is_instance_valid(node):
+				node.set(pref.value_type, default_value)
+			Global.set(property_name, default_value)
+		_on_shrink_apply_button_pressed()
+		_on_font_size_apply_button_pressed()
+		Global.config_cache.erase_section("preferences")
+	# Clear timeline options
+	if %ResetTimelineOptions.button_pressed:
+		Global.animation_timeline.reset_settings()
+		Global.config_cache.erase_section("timeline")
+	# Clear tool options
+	if %ResetAllToolOptions.button_pressed:
+		Global.config_cache.erase_section("color_picker")
+		Global.config_cache.erase_section("tools")
+		Global.config_cache.erase_section("left_tool")
+		Global.config_cache.erase_section("right_tool")
+		Tools.options_reset.emit()
+	# Remove all extensions
+	if %RemoveAllExtensions.button_pressed:
+		var extensions_node := Global.control.get_node("Extensions") as Extensions
+		var extensions_list := extensions_node.extensions.duplicate()
+		for extension in extensions_list:
+			extensions_node.uninstall_extension(extension)
+		Global.config_cache.erase_section("extensions")
+	# Clear recent files list
+	if %ClearRecentFiles.button_pressed:
+		Global.config_cache.erase_section_key("data", "last_project_path")
+		Global.config_cache.erase_section_key("data", "recent_projects")
+		Global.top_menu_container.recent_projects_submenu.clear()
+
+	Global.config_cache.save(Global.CONFIG_PATH)
diff --git a/src/Preferences/PreferencesDialog.tscn b/src/Preferences/PreferencesDialog.tscn
index 48bb579b3..411e305ad 100644
--- a/src/Preferences/PreferencesDialog.tscn
+++ b/src/Preferences/PreferencesDialog.tscn
@@ -205,6 +205,15 @@ layout_mode = 2
 mouse_default_cursor_shape = 2
 text = "Apply"
 
+[node name="FontLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Font:"
+
+[node name="FontOptionButton" type="OptionButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"]
+unique_name_in_owner = true
+layout_mode = 2
+
 [node name="DimLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"]
 layout_mode = 2
 size_flags_horizontal = 3
@@ -295,10 +304,9 @@ text = "Tool button size:"
 layout_mode = 2
 size_flags_horizontal = 3
 mouse_default_cursor_shape = 2
-item_count = 2
 selected = 0
+item_count = 2
 popup/item_0/text = "Small"
-popup/item_0/id = 0
 popup/item_1/text = "Big"
 popup/item_1/id = 1
 
@@ -309,10 +317,9 @@ text = "Icon color from:"
 [node name="IconColorOptionButton" type="OptionButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"]
 layout_mode = 2
 mouse_default_cursor_shape = 2
-item_count = 2
 selected = 0
+item_count = 2
 popup/item_0/text = "Theme"
-popup/item_0/id = 0
 popup/item_1/text = "Custom"
 popup/item_1/id = 1
 
@@ -326,26 +333,6 @@ layout_mode = 2
 mouse_default_cursor_shape = 2
 color = Color(0.75, 0.75, 0.75, 1)
 
-[node name="Label4" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"]
-layout_mode = 2
-text = "Left tool color:"
-
-[node name="LeftToolColorButton" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"]
-custom_minimum_size = Vector2(64, 20)
-layout_mode = 2
-mouse_default_cursor_shape = 2
-color = Color(0, 0.52549, 0.811765, 1)
-
-[node name="Label5" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"]
-layout_mode = 2
-text = "Right tool color:"
-
-[node name="RightToolColorButton" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"]
-custom_minimum_size = Vector2(64, 20)
-layout_mode = 2
-mouse_default_cursor_shape = 2
-color = Color(0.992157, 0.427451, 0.0784314, 1)
-
 [node name="Canvas" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"]
 visible = false
 layout_mode = 2
@@ -508,10 +495,9 @@ layout_mode = 2
 size_flags_horizontal = 3
 tooltip_text = "Sets the type of the grid between rectangular, isometric or both"
 mouse_default_cursor_shape = 2
-item_count = 3
 selected = 0
+item_count = 3
 popup/item_0/text = "Rectangular"
-popup/item_0/id = 0
 popup/item_1/text = "Isometric"
 popup/item_1/id = 1
 popup/item_2/text = "All"
@@ -803,10 +789,9 @@ text = "Background color from:"
 layout_mode = 2
 size_flags_horizontal = 3
 mouse_default_cursor_shape = 2
-item_count = 2
 selected = 0
+item_count = 2
 popup/item_0/text = "Theme"
-popup/item_0/id = 0
 popup/item_1/text = "Custom"
 popup/item_1/id = 1
 
@@ -879,6 +864,54 @@ layout_mode = 2
 mouse_default_cursor_shape = 2
 color = Color(0, 0, 1, 1)
 
+[node name="Tools" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"]
+visible = false
+layout_mode = 2
+
+[node name="ToolOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Tools"]
+layout_mode = 2
+columns = 3
+
+[node name="ShareOptionsLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Tools/ToolOptions"]
+layout_mode = 2
+size_flags_horizontal = 3
+tooltip_text = "If this is enabled, options will be synced between the left and the right tool.
+For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+mouse_filter = 1
+text = "Share options between the left and the right tools"
+
+[node name="ShareOptionsCheckBox" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Tools/ToolOptions"]
+layout_mode = 2
+size_flags_horizontal = 3
+tooltip_text = "If this is enabled, options will be synced between the left and the right tool.
+For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other."
+mouse_default_cursor_shape = 2
+text = "On"
+
+[node name="LeftToolColorLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Tools/ToolOptions"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Left tool color:"
+
+[node name="LeftToolColorButton" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Tools/ToolOptions"]
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
+size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
+color = Color(0, 0.52549, 0.811765, 1)
+
+[node name="RightToolColorLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Tools/ToolOptions"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Right tool color:"
+
+[node name="RightToolColorButton" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Tools/ToolOptions"]
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
+size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
+color = Color(0.992157, 0.427451, 0.0784314, 1)
+
 [node name="Selection" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"]
 visible = false
 layout_mode = 2
@@ -1043,6 +1076,20 @@ tooltip_text = "Sets the limit of the application's frames per second. The lower
 mouse_default_cursor_shape = 2
 max_value = 144.0
 
+[node name="MaxUndoStepsLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance/PerformanceContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+mouse_filter = 0
+text = "Max undo steps:"
+
+[node name="MaxUndoSteps" type="SpinBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance/PerformanceContainer"]
+custom_minimum_size = Vector2(95, 0)
+layout_mode = 2
+size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
+max_value = 1000.0
+allow_greater = true
+
 [node name="PauseAppFocusLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance/PerformanceContainer"]
 layout_mode = 2
 tooltip_text = "If this is toggled on, when the application's window loses focus, it gets paused. This helps lower CPU usage when idle. The application gets unpaused when the mouse enters the application's window."
@@ -1334,6 +1381,59 @@ tooltip_text = "A default background color of a new image"
 mouse_default_cursor_shape = 2
 color = Color(0, 0, 0, 0)
 
+[node name="Reset" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"]
+visible = false
+layout_mode = 2
+
+[node name="ResetHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Reset"]
+layout_mode = 2
+theme_override_constants/separation = 0
+
+[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Reset/ResetHeader"]
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
+text = "Reset"
+
+[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Reset/ResetHeader"]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="ResetPreferences" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Reset"]
+unique_name_in_owner = true
+layout_mode = 2
+mouse_default_cursor_shape = 2
+button_pressed = true
+text = "Reset all options available in the Preferences"
+
+[node name="ResetTimelineOptions" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Reset"]
+unique_name_in_owner = true
+layout_mode = 2
+mouse_default_cursor_shape = 2
+text = "Reset timeline options"
+
+[node name="ResetAllToolOptions" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Reset"]
+unique_name_in_owner = true
+layout_mode = 2
+mouse_default_cursor_shape = 2
+text = "Reset all tool options"
+
+[node name="RemoveAllExtensions" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Reset"]
+unique_name_in_owner = true
+layout_mode = 2
+mouse_default_cursor_shape = 2
+text = "Remove all extensions"
+
+[node name="ClearRecentFiles" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Reset"]
+unique_name_in_owner = true
+layout_mode = 2
+mouse_default_cursor_shape = 2
+text = "Clear the recently opened file list"
+
+[node name="ResetButton" type="Button" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Reset"]
+layout_mode = 2
+mouse_default_cursor_shape = 2
+text = "Reset"
+
 [node name="MustRestart" type="HBoxContainer" parent="HSplitContainer/VBoxContainer"]
 unique_name_in_owner = true
 visible = false
@@ -1369,6 +1469,9 @@ ok_button_text = "Delete Permanently"
 dialog_text = "Are you sure you want to delete this extension?"
 dialog_autowrap = true
 
+[node name="ResetOptionsConfirmation" type="ConfirmationDialog" parent="."]
+dialog_text = "Are you sure you want to reset the selected options? There will be no way to undo this."
+
 [connection signal="about_to_popup" from="." to="." method="_on_PreferencesDialog_about_to_show"]
 [connection signal="visibility_changed" from="." to="." method="_on_PreferencesDialog_visibility_changed"]
 [connection signal="item_selected" from="HSplitContainer/List" to="." method="_on_List_item_selected"]
@@ -1382,6 +1485,8 @@ dialog_autowrap = true
 [connection signal="pressed" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/HBoxContainer/EnableButton" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions" method="_on_EnableButton_pressed"]
 [connection signal="pressed" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/HBoxContainer/UninstallButton" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions" method="_on_UninstallButton_pressed"]
 [connection signal="pressed" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/HBoxContainer/OpenFolderButton" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions" method="_on_OpenFolderButton_pressed"]
+[connection signal="pressed" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Reset/ResetButton" to="." method="_on_reset_button_pressed"]
 [connection signal="files_selected" from="AddExtensionFileDialog" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions" method="_on_AddExtensionFileDialog_files_selected"]
 [connection signal="confirmed" from="DeleteExtensionConfirmation" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions" method="_on_delete_confirmation_confirmed"]
 [connection signal="custom_action" from="DeleteExtensionConfirmation" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions" method="_on_delete_confirmation_custom_action"]
+[connection signal="confirmed" from="ResetOptionsConfirmation" to="." method="_on_reset_options_confirmation_confirmed"]
diff --git a/src/Shaders/BlendLayers.gdshader b/src/Shaders/BlendLayers.gdshader
index 4aa0576f1..5db7d8f32 100644
--- a/src/Shaders/BlendLayers.gdshader
+++ b/src/Shaders/BlendLayers.gdshader
@@ -61,68 +61,74 @@ vec4 blend(int blend_type, vec4 current_color, vec4 prev_color, float opacity) {
 		return prev_color;
 	}
 	vec4 result;
+	bool should_blend_alpha = true;
 	switch(blend_type) {
-		case 1: // Darken
+		case 1: // Erase
+			result = prev_color;
+			result.a -= current_color.a;  // clamping will be done at the end so not doing it here.
+			should_blend_alpha = false;
+			break;
+		case 2: // Darken
 			result.rgb = min(prev_color.rgb, current_color.rgb);
 			break;
-		case 2: // Multiply
+		case 3: // Multiply
 			result.rgb = prev_color.rgb * current_color.rgb;
 			break;
-		case 3: // Color burn
+		case 4: // Color burn
 			result.rgb = 1.0 - (1.0 - prev_color.rgb) / current_color.rgb;
 			break;
-		case 4: // Linear burn
+		case 5: // Linear burn
 			result.rgb = prev_color.rgb + current_color.rgb - 1.0;
 			break;
-		case 5: // Lighten
+		case 6: // Lighten
 			result.rgb = max(prev_color.rgb, current_color.rgb);
 			break;
-		case 6: // Screen
+		case 7: // Screen
 			result.rgb = 1.0 - (1.0 - prev_color.rgb) * (1.0 - current_color.rgb);
 			break;
-		case 7: // Color dodge
+		case 8: // Color dodge
 			result.rgb = prev_color.rgb / (1.0 - current_color.rgb);
 			break;
-		case 8: // Add (linear dodge)
+		case 9: // Add (linear dodge)
 			result.rgb = prev_color.rgb + current_color.rgb;
 			break;
-		case 9: // Overlay
+		case 10: // Overlay
 			result.rgb = mix(2.0 * prev_color.rgb * current_color.rgb, 1.0 - 2.0 * (1.0 - current_color.rgb) * (1.0 - prev_color.rgb), round(prev_color.rgb));
 			break;
-		case 10: // Soft light
+		case 11: // Soft light
 			result.rgb = mix(2.0 * prev_color.rgb * current_color.rgb + prev_color.rgb * prev_color.rgb * (1.0 - 2.0 * current_color.rgb), sqrt(prev_color.rgb) * (2.0 * current_color.rgb - 1.0) + (2.0 * prev_color.rgb) * (1.0 - current_color.rgb), round(prev_color.rgb));
 			break;
-		case 11: // Hard light
+		case 12: // Hard light
 			result.rgb = mix(2.0 * prev_color.rgb * current_color.rgb, 1.0 - 2.0 * (1.0 - current_color.rgb) * (1.0 - prev_color.rgb), round(current_color.rgb));
 			break;
-		case 12: // Difference
+		case 13: // Difference
 			result.rgb = abs(prev_color.rgb - current_color.rgb);
 			break;
-		case 13: // Exclusion
+		case 14: // Exclusion
 			result.rgb = prev_color.rgb + current_color.rgb - 2.0 * prev_color.rgb * current_color.rgb;
 			break;
-		case 14: // Subtract
+		case 15: // Subtract
 			result.rgb = prev_color.rgb - current_color.rgb;
 			break;
-		case 15: // Divide
+		case 16: // Divide
 			result.rgb = prev_color.rgb / current_color.rgb;
 			break;
-		case 16: // Hue
+		case 17: // Hue
 			vec3 current_hsl = rgb_to_hsl(current_color.rgb);
 			vec3 prev_hsl = rgb_to_hsl(prev_color.rgb);
 			result.rgb = hsl_to_rgb(vec3(current_hsl.r, prev_hsl.g, prev_hsl.b));
 			break;
-		case 17: // Saturation
+		case 18: // Saturation
 			vec3 current_hsl = rgb_to_hsl(current_color.rgb);
 			vec3 prev_hsl = rgb_to_hsl(prev_color.rgb);
 			result.rgb = hsl_to_rgb(vec3(prev_hsl.r, current_hsl.g, prev_hsl.b));
 			break;
-		case 18: // Color
+		case 19: // Color
 			vec3 current_hsl = rgb_to_hsl(current_color.rgb);
 			vec3 prev_hsl = rgb_to_hsl(prev_color.rgb);
 			result.rgb = hsl_to_rgb(vec3(current_hsl.r, current_hsl.g, prev_hsl.b));
 			break;
-		case 19: // Luminosity
+		case 20: // Luminosity
 			vec3 current_hsl = rgb_to_hsl(current_color.rgb);
 			vec3 prev_hsl = rgb_to_hsl(prev_color.rgb);
 			result.rgb = hsl_to_rgb(vec3(prev_hsl.r, prev_hsl.g, current_hsl.b));
@@ -132,7 +138,9 @@ vec4 blend(int blend_type, vec4 current_color, vec4 prev_color, float opacity) {
 			break;
 	}
 	result.rgb = mix(prev_color.rgb, result.rgb, current_color.a);
-	result.a = prev_color.a * (1.0 - current_color.a) + current_color.a;
+	if (should_blend_alpha){
+		result.a = prev_color.a * (1.0 - current_color.a) + current_color.a;
+	}
 	result = clamp(result, 0.0, 1.0);
 	return mix(current_color, result, prev_color.a);
 }
@@ -144,6 +152,20 @@ float border_trim(vec4 color, vec2 uv) {
 }
 
 
+int find_previous_opaque_layer(int index, vec2 metadata_size_float) {
+	for (int i = index - 1; i > 0; i--) {
+		float layer_index = float(i) / metadata_size_float.x;
+		float clipping_mask = texture(metadata, vec2(layer_index, 3.0 / metadata_size_float.y)).r;
+		// If the red value is ~0.2, it means that it should be skipped.
+		// Otherwise, return the index.
+		if (clipping_mask > 0.25 || clipping_mask < 0.15) {
+			return i;
+		}
+	}
+	return 0;
+}
+
+
 void fragment() {
 	ivec2 metadata_size = textureSize(metadata, 0) - 1;
 	vec2 metadata_size_float = vec2(metadata_size);
@@ -173,17 +195,18 @@ void fragment() {
 			current_origin.y = -current_origin.y;
 		}
 		// get origin of previous layer (used for clipping masks to work correctly)
-		vec2 prev_origin = texture(metadata, vec2(float(i - 1), 2.0 / metadata_size_float.y)).rg;
+		float clipping_mask_index = float(find_previous_opaque_layer(i, metadata_size_float));
+		vec2 prev_origin = texture(metadata, vec2(clipping_mask_index, 2.0 / metadata_size_float.y)).rg;
 		if (!origin_x_positive) {
-		  prev_origin.x = -prev_origin.x;
+			prev_origin.x = -prev_origin.x;
 		}
 		if (!origin_y_positive) {
-		  prev_origin.y = -prev_origin.y;
+			prev_origin.y = -prev_origin.y;
 		}
 		float current_opacity = texture(metadata, vec2(layer_index, 1.0 / metadata_size_float.y)).r;
 		vec2 uv = UV - current_origin;
 		vec4 layer_color = texture(layers, vec3(uv, float(i)));
-		vec4 prev_layer_color = texture(layers, vec3(UV - prev_origin, float(i - 1)));
+		vec4 prev_layer_color = texture(layers, vec3(UV - prev_origin, clipping_mask_index));
 		float clipping_mask = texture(metadata, vec2(layer_index, 3.0 / metadata_size_float.y)).r;
 		layer_color.a *= prev_layer_color.a * step(0.5, clipping_mask) + 1.0 * step(clipping_mask, 0.5);
 		layer_color.a = border_trim(layer_color, uv);
diff --git a/src/Shaders/Effects/ConvolutionMatrix.gdshader b/src/Shaders/Effects/ConvolutionMatrix.gdshader
new file mode 100644
index 000000000..bb709eeba
--- /dev/null
+++ b/src/Shaders/Effects/ConvolutionMatrix.gdshader
@@ -0,0 +1,82 @@
+shader_type canvas_item;
+
+// author : csblo
+// Work made just by consulting :
+// https://en.wikipedia.org/wiki/Kernel_(image_processing)
+
+uniform mat3 kernel = mat3(vec3(0, 0, 0), vec3(0, 1, 0), vec3(0, 0, 0));
+
+// Find coordinate of matrix element from index
+vec2 kpos(int index, vec2 iResolution)
+{
+	return vec2[9] (
+		vec2(-1, -1), vec2(0, -1), vec2(1, -1),
+		vec2(-1, 0), vec2(0, 0), vec2(1, 0),
+		vec2(-1, 1), vec2(0, 1), vec2(1, 1)
+	)[index] / iResolution.xy;
+}
+
+
+// Extract region of dimension 3x3 from sampler centered in uv
+// sampler : texture sampler
+// uv : current coordinates on sampler
+// return : an array of mat3, each index corresponding with a color channel
+mat3[3] region3x3(sampler2D sampler, vec2 uv, vec2 iResolution)
+{
+	// Create each pixels for region
+	vec4[9] region;
+
+	for (int i = 0; i < 9; i++)
+		region[i] = texture(sampler, uv + kpos(i, iResolution));
+
+	// Create 3x3 region with 3 color channels (red, green, blue)
+	mat3[3] mRegion;
+
+	for (int i = 0; i < 3; i++)
+		mRegion[i] = mat3(
+			vec3(region[0][i], region[1][i], region[2][i]),
+			vec3(region[3][i], region[4][i], region[5][i]),
+			vec3(region[6][i], region[7][i], region[8][i])
+		);
+
+	return mRegion;
+}
+
+// Convolve a texture with kernel
+// kernel : kernel used for convolution
+// sampler : texture sampler
+// uv : current coordinates on sampler
+vec3 convolution(sampler2D sampler, vec2 uv, vec2 iResolution)
+{
+	vec3 fragment;
+
+	// Extract a 3x3 region centered in uv
+	mat3[3] region = region3x3(sampler, uv, iResolution);
+
+	// for each color channel of region
+	for (int i = 0; i < 3; i++)
+	{
+		// get region channel
+		mat3 rc = region[i];
+		// component wise multiplication of kernel by region channel
+		mat3 c = matrixCompMult(kernel, rc);
+		// add each component of matrix
+		float r = c[0][0] + c[1][0] + c[2][0]
+				+ c[0][1] + c[1][1] + c[2][1]
+				+ c[0][2] + c[1][2] + c[2][2];
+
+		// for fragment at channel i, set result
+		fragment[i] = r;
+	}
+
+	return fragment;
+}
+
+void fragment()
+{
+	// Convolve kernel with texture
+	vec3 col = convolution(TEXTURE, UV, 1.0 / TEXTURE_PIXEL_SIZE);
+
+	// Output to screen
+	COLOR.rgb = col;
+}
diff --git a/src/Shaders/Effects/GaussianBlur.gdshader b/src/Shaders/Effects/GaussianBlur.gdshader
new file mode 100644
index 000000000..8cf9939f4
--- /dev/null
+++ b/src/Shaders/Effects/GaussianBlur.gdshader
@@ -0,0 +1,141 @@
+// https://godotshaders.com/shader/gaussian-blur-functions-for-gles2/
+// Licensed under MIT.
+shader_type canvas_item;
+
+// uniform_data blur_type type:: OptionButton [Xor's Gaussian Blur||Monk's Multi-Pass Gaussian Blur||NoDev's Single-Pass Gaussian Blur||NoDev's Multi-Pass Gaussian Blur]
+uniform int blur_type : hint_range(0, 3, 1) = 0;
+uniform int blur_amount = 16;
+uniform float blur_radius = 1.0;
+uniform vec2 blur_direction = vec2(1, 1);
+uniform sampler2D selection : filter_nearest;
+
+// Xor's gaussian blur function
+// Link: https://xorshaders.weebly.com/tutorials/blur-shaders-5-part-2
+// Defaults from: https://www.shadertoy.com/view/Xltfzj
+//
+// BLUR BLURRINESS (Default 8.0)
+// BLUR ITERATIONS (Default 16.0 - More is better but slower)
+// BLUR QUALITY (Default 4.0 - More is better but slower)
+//
+// Desc.: Don't have the best performance but will run on almost
+// anything, although, if developing for mobile, is better to use
+// 'texture_nodevgaussian(...) instead'.
+vec4 texture_xorgaussian(sampler2D tex, vec2 uv, vec2 pixel_size, float blurriness, int iterations, int quality) {
+	vec2 radius = blurriness / (1.0 / pixel_size).xy;
+	vec4 blurred_tex = texture(tex, uv);
+
+	for(float d = 0.0; d < TAU; d += TAU / float(iterations)) {
+		for(float i = 1.0 / float(quality); i <= 1.0; i += 1.0 / float(quality)) {
+			vec2 directions = uv + vec2(cos(d), sin(d)) * radius * i;
+			blurred_tex += texture(tex, directions);
+		}
+	}
+	blurred_tex /= float(quality) * float(iterations) + 1.0;
+
+	return blurred_tex;
+}
+
+// Experience-Monks' fast gaussian blur function
+// Link: https://github.com/Experience-Monks/glsl-fast-gaussian-blur/
+//
+// BLUR ITERATIONS (Default 16.0 - More is better but slower)
+// BLUR DIRECTION (Direction in which the blur is applied, use vec2(1, 0) for first pass and vec2(0, 1) for second pass)
+//
+// Desc.: ACTUALLY PRETTY SLOW but still pretty good for custom cinematic
+// bloom effects, since this needs render 2 passes
+vec4 texture_monksgaussian_multipass(sampler2D tex, vec2 uv, vec2 pixel_size, int iterations, vec2 direction) {
+	vec4 blurred_tex = vec4(0.0);
+	vec2 resolution = 1.0 / pixel_size;
+
+	for (int i = 0; i < iterations; i++ ) {
+		float size = float(iterations - i);
+
+		vec2 off1 = vec2(1.3846153846) * (direction * size);
+		vec2 off2 = vec2(3.2307692308) * (direction * size);
+
+		blurred_tex += texture(tex, uv) * 0.2270270270;
+		blurred_tex += texture(tex, uv + (off1 / resolution)) * 0.3162162162;
+		blurred_tex += texture(tex, uv - (off1 / resolution)) * 0.3162162162;
+		blurred_tex += texture(tex, uv + (off2 / resolution)) * 0.0702702703;
+		blurred_tex += texture(tex, uv - (off2 / resolution)) * 0.0702702703;
+	}
+
+	blurred_tex /= float(iterations) + 1.0;
+
+	return blurred_tex;
+}
+
+// u/_NoDev_'s gaussian blur function
+// Discussion Link: https://www.reddit.com/r/godot/comments/klgfo9/help_with_shaders_in_gles2/
+// Code Link: https://postimg.cc/7JDJw80d
+//
+// BLUR BLURRINESS (Default 8.0 - More is better but slower)
+// BLUR RADIUS (Default 1.5)
+// BLUR DIRECTION (Direction in which the blur is applied, use vec2(1, 0) for first pass and vec2(0, 1) for second pass)
+//
+// Desc.: Really fast and GOOD FOR MOST CASES, but might NOT RUN IN THE WEB!
+// use 'texture_xorgaussian' instead if you found any issues.
+vec4 texture_nodevgaussian_singlepass(sampler2D tex, vec2 uv, vec2 pixel_size, float blurriness, float radius) {
+	float n = 0.0015;
+	vec4 blurred_tex = vec4(0);
+	float weight;
+
+	for (float i = -blurriness; i <= blurriness; i++) {
+		float d = i / PI;
+		vec2 anchor = vec2(cos(d), sin(d)) * radius * i;
+		vec2 directions = uv + pixel_size * anchor;
+		blurred_tex += texture(tex, directions) * n;
+		if (i <= 0.0) {n += 0.0015; }
+		if (i > 0.0) {n -= 0.0015; }
+		weight += n;
+	}
+
+	float norm = 1.0 / weight;
+	blurred_tex *= norm;
+	return blurred_tex;
+}
+
+vec4 texture_nodevgaussian_multipass(sampler2D tex, vec2 uv, vec2 pixel_size, float blurriness, vec2 direction) {
+	float n = 0.0015;
+	vec4 blurred_tex = vec4(0);
+	float weight;
+
+	for (float i = -blurriness; i <= blurriness; i++) {
+		vec2 directions = uv + pixel_size * (direction * i);
+		blurred_tex += texture(tex, directions) * n;
+		if (i <= 0.0) {n += 0.0015; }
+		if (i > 0.0) {n -= 0.0015; }
+		weight += n;
+	}
+
+	float norm = 1.0 / weight;
+	blurred_tex *= norm;
+	return blurred_tex;
+}
+
+void fragment() {
+	vec4 original_color = texture(TEXTURE, UV);
+	vec4 selection_color = texture(selection, UV);
+	vec4 col = original_color;
+	if (blur_type == 0) {
+		vec4 xorgaussian = texture_xorgaussian(TEXTURE, UV, TEXTURE_PIXEL_SIZE, float(blur_amount), 16, 4);
+		col = xorgaussian;
+	}
+	else if (blur_type == 1) {
+		vec4 monksgaussian_multipass = texture_monksgaussian_multipass(TEXTURE, UV, TEXTURE_PIXEL_SIZE, blur_amount, blur_direction);
+		col = monksgaussian_multipass;
+	}
+	else if (blur_type == 2) {
+		vec4 nodevgaussian_singlepass = texture_nodevgaussian_singlepass(TEXTURE, UV, TEXTURE_PIXEL_SIZE, float(blur_amount), blur_radius);
+		col = nodevgaussian_singlepass;
+	}
+	else if (blur_type == 3) {
+		vec4 nodevgaussian_multipass = texture_nodevgaussian_multipass(TEXTURE, UV, TEXTURE_PIXEL_SIZE, float(blur_amount), blur_direction);
+		col = nodevgaussian_multipass;
+	}
+	else {
+		col = texture(TEXTURE, UV);
+	}
+	vec4 output = mix(original_color.rgba, col, selection_color.a);
+	COLOR = output;
+}
diff --git a/src/Shaders/Effects/IndexMap.gdshader b/src/Shaders/Effects/IndexMap.gdshader
new file mode 100644
index 000000000..46fecda00
--- /dev/null
+++ b/src/Shaders/Effects/IndexMap.gdshader
@@ -0,0 +1,22 @@
+// Authored by Variable (6 May 2022)
+shader_type canvas_item;
+render_mode unshaded;
+
+uniform sampler2D map_texture : filter_nearest;  // The map texture
+uniform bool alpha = false;
+
+// (begin DESCRIPTION)
+// The Red and Green values (0-255) of tool color will be treated as an x and y position
+// respectively instead of color components.
+// When you draw, color will be taken from the x-y position in the "Map Texture".
+// (end DESCRIPTION)
+void fragment() {
+	vec4 col = texture(TEXTURE, UV);
+	vec2 map_size = vec2(textureSize(map_texture, 0));
+	vec2 lookup_uv = vec2(round(col.x * 255.0)/(map_size.x), round(col.y * 255.0)/(map_size.y));
+	vec4 index_color = texture(map_texture, lookup_uv);
+	COLOR.rgb = index_color.rgb;
+	if (alpha) {
+		COLOR.a = index_color.a;
+	}
+}
diff --git a/src/Shaders/Effects/OutlineInline.gdshader b/src/Shaders/Effects/OutlineInline.gdshader
index f19b0ccac..66a4f52c8 100644
--- a/src/Shaders/Effects/OutlineInline.gdshader
+++ b/src/Shaders/Effects/OutlineInline.gdshader
@@ -4,8 +4,10 @@ render_mode unshaded;
 
 uniform vec4 color : source_color = vec4(1.0);
 uniform float width : hint_range(0, 10, 1) = 1.0;
-uniform int pattern : hint_range(0, 2) = 0; // diamond, circle, square
+// uniform_data brush type:: OptionButton [Diamond||Circle||Square]
+uniform int brush : hint_range(0, 2) = 0;
 uniform bool inside = false;
+uniform bool keep_border_only = false;
 uniform sampler2D selection : filter_nearest;
 
 bool is_zero_approx(float num) {
@@ -16,11 +18,11 @@ bool has_contrary_neighbour(vec2 uv, vec2 texture_pixel_size, sampler2D tex) {
 	for (float i = -ceil(width); i <= ceil(width); i++) {
 		float offset;
 
-		if (pattern == 0) {
+		if (brush == 0) {
 			offset = width - abs(i);
-		} else if (pattern == 1) {
+		} else if (brush == 1) {
 			offset = floor(sqrt(pow(width + 0.5, 2) - i * i));
-		} else if (pattern == 2) {
+		} else if (brush == 2) {
 			offset = width;
 		}
 
@@ -43,7 +45,15 @@ void fragment() {
 
 	if ((output.a > 0.0) == inside && has_contrary_neighbour(UV, TEXTURE_PIXEL_SIZE, TEXTURE)) {
 		output.rgb = inside ? mix(output.rgb, color.rgb, color.a) : color.rgb;
-		output.a += (1.0 - output.a) * color.a;
+		if (is_zero_approx(color.a)) {
+			output.a = color.a;
+		}
+		else {
+			output.a += (1.0 - output.a) * color.a;
+		}
+	}
+	else if (keep_border_only) {
+		output.a = 0.0;
 	}
 
 	COLOR = mix(original_color, output, selection_color.a);
diff --git a/src/Tools/3DTools/3DShapeEdit.gd b/src/Tools/3DTools/3DShapeEdit.gd
index 29d841614..8e3c8a348 100644
--- a/src/Tools/3DTools/3DShapeEdit.gd
+++ b/src/Tools/3DTools/3DShapeEdit.gd
@@ -58,12 +58,15 @@ var _object_names := {
 	"node3d_type:mesh:top_radius": $"%MeshTopRadius",
 	"node3d_type:mesh:bottom_radius": $"%MeshBottomRadius",
 	"node3d_type:mesh:text": $"%MeshText",
-	"node3d_type:mesh:offset": $"%MeshOffsetV2",
+	"node3d_type:mesh:font": $"%MeshFont",
 	"node3d_type:mesh:pixel_size": $"%MeshPixelSize",
 	"node3d_type:mesh:font_size": $"%MeshFontSize",
+	"node3d_type:mesh:offset": $"%MeshOffsetV2",
+	"node3d_type:mesh:depth": $"%MeshDepth",
 	"node3d_type:mesh:curve_step": $"%MeshCurveStep",
 	"node3d_type:mesh:horizontal_alignment": $"%MeshHorizontalAlignment",
 	"node3d_type:mesh:vertical_alignment": $"%MeshVerticalAlignment",
+	"node3d_type:mesh:line_spacing": $"%MeshLineSpacing",
 	"node3d_type:light_color": $"%LightColor",
 	"node3d_type:light_energy": $"%LightEnergy",
 	"node3d_type:light_negative": $"%LightNegative",
@@ -74,7 +77,7 @@ var _object_names := {
 }
 
 
-func sprite_changed_this_frame():
+func sprite_changed_this_frame() -> void:
 	_checker_update_qued = true
 	_old_cel_image = _cel.get_image()
 	Global.canvas.sprite_changed_this_frame = true
@@ -96,6 +99,10 @@ func _ready() -> void:
 	for object in _object_names:
 		new_object_popup.add_item(_object_names[object], object)
 	new_object_popup.id_pressed.connect(_new_object_popup_id_pressed)
+	# Load font names
+	for font_name in Global.get_available_font_names():
+		$"%MeshFont".add_item(font_name)
+	# Connect the signals of the cel property nodes
 	for prop in cel_properties:
 		var node: Control = cel_properties[prop]
 		if node is ValueSliderV3:
@@ -106,6 +113,7 @@ func _ready() -> void:
 			node.item_selected.connect(_cel_property_item_selected.bind(prop))
 		elif node is ColorPickerButton:
 			node.color_changed.connect(_cel_property_color_changed.bind(prop))
+	# Connect the signals of the object property nodes
 	for prop in object_properties:
 		var node: Control = object_properties[prop]
 		if node is ValueSliderV3:
@@ -359,10 +367,17 @@ func _set_node_values(to_edit: Object, properties: Dictionary) -> void:
 		if property_path.ends_with("v2"):
 			property_path = property_path.replace("v2", "")
 		var value = to_edit.get_indexed(property_path)
-		if not is_instance_valid(value):
+		if value == null:
 			continue
 		if "scale" in prop:
 			value *= 100
+		if value is Font:
+			var font_name: String = value.get_font_name()
+			value = 0
+			for i in %MeshFont.item_count:
+				var item_name: String = %MeshFont.get_item_text(i)
+				if font_name == item_name:
+					value = i
 		var node: Control = properties[prop]
 		if node is Range or node is ValueSliderV3 or node is ValueSliderV2:
 			if typeof(node.value) != typeof(value) and typeof(value) != TYPE_INT:
@@ -391,6 +406,8 @@ func _set_value_from_node(to_edit: Object, value, prop: String) -> void:
 		to_edit = to_edit.node3d_type.mesh
 	if "scale" in prop:
 		value /= 100
+	if "font" in prop and not "font_" in prop:
+		value = Global.find_font_from_name(%MeshFont.get_item_text(value))
 	to_edit.set_indexed(prop, value)
 
 
diff --git a/src/Tools/3DTools/3DShapeEdit.tscn b/src/Tools/3DTools/3DShapeEdit.tscn
index 01cc9c90f..8902c834c 100644
--- a/src/Tools/3DTools/3DShapeEdit.tscn
+++ b/src/Tools/3DTools/3DShapeEdit.tscn
@@ -6,7 +6,7 @@
 [ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="4"]
 [ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="5"]
 [ext_resource type="Script" path="res://src/UI/Nodes/CollapsibleContainer.gd" id="6"]
-[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV3.tscn" id="7"]
+[ext_resource type="PackedScene" uid="uid://dpoteid430evf" path="res://src/UI/Nodes/ValueSliderV3.tscn" id="7"]
 
 [sub_resource type="InputEventAction" id="InputEventAction_8sqgw"]
 action = &"delete"
@@ -31,10 +31,9 @@ unique_name_in_owner = true
 layout_mode = 2
 size_flags_horizontal = 3
 mouse_default_cursor_shape = 2
-item_count = 1
 selected = 0
+item_count = 1
 popup/item_0/text = "None"
-popup/item_0/id = 0
 
 [node name="NewObjectMenuButton" type="MenuButton" parent="HandleObjects" index="2"]
 unique_name_in_owner = true
@@ -80,10 +79,9 @@ unique_name_in_owner = true
 layout_mode = 2
 size_flags_horizontal = 3
 mouse_default_cursor_shape = 2
-item_count = 3
 selected = 0
+item_count = 3
 popup/item_0/text = "Perspective"
-popup/item_0/id = 0
 popup/item_1/text = "Orthogonal"
 popup/item_1/id = 1
 popup/item_2/text = "Frustum"
@@ -512,13 +510,26 @@ custom_minimum_size = Vector2(150, 50)
 layout_mode = 2
 size_flags_horizontal = 3
 
-[node name="MeshPixelSizeLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="22"]
+[node name="MeshFontLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="22"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Font:"
+clip_text = true
+
+[node name="MeshFont" type="OptionButton" parent="ObjectOptions/MeshOptions/GridContainer" index="23"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
+selected = 0
+
+[node name="MeshPixelSizeLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="24"]
 layout_mode = 2
 size_flags_horizontal = 3
 text = "Pixel size:"
 clip_text = true
 
-[node name="MeshPixelSize" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="23"]
+[node name="MeshPixelSize" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="25"]
 unique_name_in_owner = true
 layout_mode = 2
 size_flags_horizontal = 3
@@ -538,13 +549,13 @@ stretch_margin_bottom = 3
 script = ExtResource("5")
 snap_step = 0.01
 
-[node name="MeshFontSizeLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="24"]
+[node name="MeshFontSizeLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="26"]
 layout_mode = 2
 size_flags_horizontal = 3
 text = "Font size:"
 clip_text = true
 
-[node name="MeshFontSize" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="25"]
+[node name="MeshFontSize" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="27"]
 unique_name_in_owner = true
 layout_mode = 2
 size_flags_horizontal = 3
@@ -552,7 +563,7 @@ focus_mode = 2
 mouse_default_cursor_shape = 2
 theme_type_variation = &"ValueSlider"
 min_value = 1.0
-max_value = 10.0
+max_value = 128.0
 value = 1.0
 allow_greater = true
 nine_patch_stretch = true
@@ -561,14 +572,39 @@ stretch_margin_top = 3
 stretch_margin_right = 3
 stretch_margin_bottom = 3
 script = ExtResource("5")
+snap_step = 2.0
 
-[node name="MeshOffsetLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="26"]
+[node name="MeshDepthLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="28"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Depth:"
+clip_text = true
+
+[node name="MeshDepth" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="29"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
+step = 0.001
+value = 0.05
+allow_greater = true
+nine_patch_stretch = true
+stretch_margin_left = 3
+stretch_margin_top = 3
+stretch_margin_right = 3
+stretch_margin_bottom = 3
+script = ExtResource("5")
+snap_step = 2.0
+
+[node name="MeshOffsetLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="30"]
 layout_mode = 2
 size_flags_horizontal = 3
 text = "Offset:"
 clip_text = true
 
-[node name="MeshOffsetV2" parent="ObjectOptions/MeshOptions/GridContainer" index="27" instance=ExtResource("3")]
+[node name="MeshOffsetV2" parent="ObjectOptions/MeshOptions/GridContainer" index="31" instance=ExtResource("3")]
 unique_name_in_owner = true
 layout_mode = 2
 size_flags_horizontal = 3
@@ -578,13 +614,13 @@ allow_lesser = true
 show_ratio = true
 snap_step = 0.01
 
-[node name="MeshCurveStepLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="28"]
+[node name="MeshCurveStepLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="32"]
 layout_mode = 2
 size_flags_horizontal = 3
 text = "Curve step:"
 clip_text = true
 
-[node name="MeshCurveStep" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="29"]
+[node name="MeshCurveStep" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="33"]
 unique_name_in_owner = true
 layout_mode = 2
 size_flags_horizontal = 3
@@ -603,46 +639,71 @@ stretch_margin_right = 3
 stretch_margin_bottom = 3
 script = ExtResource("5")
 
-[node name="MeshHorizontalAlignmentLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="30"]
+[node name="MeshHorizontalAlignmentLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="34"]
 layout_mode = 2
 size_flags_horizontal = 3
 text = "Horizontal alignment:"
 clip_text = true
 
-[node name="MeshHorizontalAlignment" type="OptionButton" parent="ObjectOptions/MeshOptions/GridContainer" index="31"]
+[node name="MeshHorizontalAlignment" type="OptionButton" parent="ObjectOptions/MeshOptions/GridContainer" index="35"]
 unique_name_in_owner = true
 layout_mode = 2
 size_flags_horizontal = 3
 mouse_default_cursor_shape = 2
-item_count = 3
 selected = 0
+item_count = 4
 popup/item_0/text = "Left"
-popup/item_0/id = 0
 popup/item_1/text = "Center"
 popup/item_1/id = 1
 popup/item_2/text = "Right"
 popup/item_2/id = 2
+popup/item_3/text = "Fill"
+popup/item_3/id = 3
 
-[node name="MeshVerticalAlignmentLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="32"]
+[node name="MeshVerticalAlignmentLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="36"]
 layout_mode = 2
 size_flags_horizontal = 3
 text = "Vertical alignment:"
 clip_text = true
 
-[node name="MeshVerticalAlignment" type="OptionButton" parent="ObjectOptions/MeshOptions/GridContainer" index="33"]
+[node name="MeshVerticalAlignment" type="OptionButton" parent="ObjectOptions/MeshOptions/GridContainer" index="37"]
 unique_name_in_owner = true
 layout_mode = 2
 size_flags_horizontal = 3
 mouse_default_cursor_shape = 2
-item_count = 3
 selected = 0
+item_count = 3
 popup/item_0/text = "Top"
-popup/item_0/id = 0
 popup/item_1/text = "Center"
 popup/item_1/id = 1
 popup/item_2/text = "Bottom"
 popup/item_2/id = 2
 
+[node name="MeshLineSpacingLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="38"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Line spacing:"
+clip_text = true
+
+[node name="MeshLineSpacing" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="39"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
+min_value = -10.0
+max_value = 10.0
+step = 0.001
+allow_greater = true
+allow_lesser = true
+nine_patch_stretch = true
+stretch_margin_left = 3
+stretch_margin_top = 3
+stretch_margin_right = 3
+stretch_margin_bottom = 3
+script = ExtResource("5")
+
 [node name="LightOptions" type="VBoxContainer" parent="ObjectOptions" index="3"]
 unique_name_in_owner = true
 layout_mode = 2
diff --git a/src/Tools/BaseDraw.gd b/src/Tools/BaseDraw.gd
index 295ca9dfa..613051b57 100644
--- a/src/Tools/BaseDraw.gd
+++ b/src/Tools/BaseDraw.gd
@@ -1,8 +1,11 @@
 extends BaseTool
 
+const IMAGE_BRUSHES := [Brushes.FILE, Brushes.RANDOM_FILE, Brushes.CUSTOM]
+
 var _brush := Brushes.get_default_brush()
 var _brush_size := 1
 var _brush_size_dynamics := 1
+var _brush_density := 100
 var _brush_flip_x := false
 var _brush_flip_y := false
 var _brush_rotate_90 := false
@@ -71,14 +74,13 @@ func _on_Brush_selected(brush: Brushes.Brush) -> void:
 
 
 func _on_BrushSize_value_changed(value: float) -> void:
-	if _brush_size != int(value):
-		_brush_size = int(value)
-		_brush_size_dynamics = _brush_size
-		if Tools.dynamics_size != Tools.Dynamics.NONE:
-			_brush_size_dynamics = Tools.brush_size_min
-		_cache_limit = (_brush_size * _brush_size) * 3  # This equation seems the best match
-		update_config()
-		save_config()
+	_brush_size = int(value)
+	_brush_size_dynamics = _brush_size
+	if Tools.dynamics_size != Tools.Dynamics.NONE:
+		_brush_size_dynamics = Tools.brush_size_min
+	_cache_limit = (_brush_size * _brush_size) * 3  # This equation seems the best match
+	update_config()
+	save_config()
 
 
 func _reset_dynamics() -> void:
@@ -90,6 +92,12 @@ func _reset_dynamics() -> void:
 	save_config()
 
 
+func _on_density_value_slider_value_changed(value: int) -> void:
+	_brush_density = value
+	update_config()
+	save_config()
+
+
 func _on_InterpolateFactor_value_changed(value: float) -> void:
 	_brush_interpolate = int(value)
 	update_config()
@@ -112,7 +120,13 @@ func get_config() -> Dictionary:
 		"brush_type": _brush.type,
 		"brush_index": _brush.index,
 		"brush_size": _brush_size,
+		"brush_density": _brush_density,
 		"brush_interpolate": _brush_interpolate,
+		"brush_flip_x": _brush_flip_x,
+		"brush_flip_y": _brush_flip_y,
+		"brush_rotate_90": _brush_rotate_90,
+		"brush_rotate_180": _brush_rotate_180,
+		"brush_rotate_270": _brush_rotate_270,
 	}
 
 
@@ -124,17 +138,23 @@ func set_config(config: Dictionary) -> void:
 	_brush_size_dynamics = _brush_size
 	if Tools.dynamics_size != Tools.Dynamics.NONE:
 		_brush_size_dynamics = Tools.brush_size_min
+	_brush_density = config.get("brush_density", _brush_density)
 	_brush_interpolate = config.get("brush_interpolate", _brush_interpolate)
+	_brush_flip_x = config.get("brush_flip_x", _brush_flip_x)
+	_brush_flip_y = config.get("brush_flip_y", _brush_flip_y)
+	_brush_rotate_90 = config.get("brush_rotate_90", _brush_rotate_90)
+	_brush_rotate_180 = config.get("brush_rotate_180", _brush_rotate_180)
+	_brush_rotate_270 = config.get("brush_rotate_270", _brush_rotate_270)
 
 
 func update_config() -> void:
 	$Brush/BrushSize.value = _brush_size
 	$ColorInterpolation.value = _brush_interpolate
-	$RotationOptions/Flip/FlipX.button_pressed = _brush_flip_x
-	$RotationOptions/Flip/FlipY.button_pressed = _brush_flip_y
-	$RotationOptions/Rotate/Rotate90.button_pressed = _brush_rotate_90
-	$RotationOptions/Rotate/Rotate180.button_pressed = _brush_rotate_180
-	$RotationOptions/Rotate/Rotate270.button_pressed = _brush_rotate_270
+	%FlipX.button_pressed = _brush_flip_x
+	%FlipY.button_pressed = _brush_flip_y
+	%Rotate90.button_pressed = _brush_rotate_90
+	%Rotate180.button_pressed = _brush_rotate_180
+	%Rotate270.button_pressed = _brush_rotate_270
 	update_brush()
 
 
@@ -168,11 +188,13 @@ func update_brush() -> void:
 			_brush_texture = ImageTexture.create_from_image(_brush_image)
 			update_mirror_brush()
 			_stroke_dimensions = _brush_image.get_size()
+	_circle_tool_shortcut = []
 	_indicator = _create_brush_indicator()
 	_polylines = _create_polylines(_indicator)
 	$Brush/Type/Texture.texture = _brush_texture
-	$ColorInterpolation.visible = _brush.type in [Brushes.FILE, Brushes.RANDOM_FILE, Brushes.CUSTOM]
-	$RotationOptions.visible = _brush.type in [Brushes.FILE, Brushes.RANDOM_FILE, Brushes.CUSTOM]
+	$DensityValueSlider.visible = _brush.type not in IMAGE_BRUSHES
+	$ColorInterpolation.visible = _brush.type in IMAGE_BRUSHES
+	$RotationOptions.visible = _brush.type in IMAGE_BRUSHES
 
 
 func update_random_image() -> void:
@@ -238,7 +260,7 @@ func commit_undo() -> void:
 	var project := Global.current_project
 	var frame := -1
 	var layer := -1
-	if Global.animation_timer.is_stopped() and project.selected_cels.size() == 1:
+	if Global.animation_timeline.animation_timer.is_stopped() and project.selected_cels.size() == 1:
 		frame = project.current_frame
 		layer = project.current_layer
 
@@ -264,6 +286,9 @@ func draw_tool(pos: Vector2i) -> void:
 
 func draw_end(pos: Vector2i) -> void:
 	super.draw_end(pos)
+	_stroke_project = null
+	_stroke_images = []
+	_circle_tool_shortcut = []
 	_brush_size_dynamics = _brush_size
 	if Tools.dynamics_size != Tools.Dynamics.NONE:
 		_brush_size_dynamics = Tools.brush_size_min
@@ -302,10 +327,6 @@ func _prepare_tool() -> void:
 	# This may prevent a few tests when setting pixels
 	_is_mask_size_zero = _mask.size() == 0
 	match _brush.type:
-		Brushes.CIRCLE:
-			_prepare_circle_tool(false)
-		Brushes.FILLED_CIRCLE:
-			_prepare_circle_tool(true)
 		Brushes.FILE, Brushes.RANDOM_FILE, Brushes.CUSTOM:
 			# save _brush_image for safe keeping
 			_brush_image = _create_blended_brush_image(_orignal_brush_image)
@@ -315,19 +336,6 @@ func _prepare_tool() -> void:
 			_stroke_dimensions = _brush_image.get_size()
 
 
-func _prepare_circle_tool(fill: bool) -> void:
-	var circle_tool_map := _create_circle_indicator(_brush_size_dynamics, fill)
-	# Go through that BitMap and build an Array of the "displacement" from the center of the bits
-	# that are true.
-	var diameter := _brush_size_dynamics * 2 + 1
-	for n in range(0, diameter):
-		for m in range(0, diameter):
-			if circle_tool_map.get_bitv(Vector2i(m, n)):
-				_circle_tool_shortcut.append(
-					Vector2i(m - _brush_size_dynamics, n - _brush_size_dynamics)
-				)
-
-
 ## Make sure to always have invoked _prepare_tool() before this. This computes the coordinates to be
 ## drawn if it can (except for the generic brush, when it's actually drawing them)
 func _draw_tool(pos: Vector2) -> PackedVector2Array:
@@ -496,7 +504,7 @@ func draw_indicator(left: bool) -> void:
 
 func draw_indicator_at(pos: Vector2i, offset: Vector2i, color: Color) -> void:
 	var canvas: Node2D = Global.canvas.indicators
-	if _brush.type in [Brushes.FILE, Brushes.RANDOM_FILE, Brushes.CUSTOM] and not _draw_line:
+	if _brush.type in IMAGE_BRUSHES and not _draw_line:
 		pos -= _brush_image.get_size() / 2
 		pos -= offset
 		canvas.draw_texture(_brush_texture, pos)
@@ -526,6 +534,8 @@ func _set_pixel(pos: Vector2i, ignore_mirroring := false) -> void:
 
 
 func _set_pixel_no_cache(pos: Vector2i, ignore_mirroring := false) -> void:
+	if randi() % 100 >= _brush_density:
+		return
 	pos = _stroke_project.tiles.get_canon_position(pos)
 	if Global.current_project.has_selection:
 		pos = Global.current_project.selection_map.get_canon_position(pos)
@@ -610,10 +620,24 @@ func _create_pixel_indicator(brush_size: int) -> BitMap:
 
 
 func _create_circle_indicator(brush_size: int, fill := false) -> BitMap:
-	_circle_tool_shortcut = []
+	if Tools.dynamics_size != Tools.Dynamics.NONE:
+		_circle_tool_shortcut = []
 	var brush_size_v2 := Vector2i(brush_size, brush_size)
-	var diameter := brush_size_v2 * 2 + Vector2i.ONE
-	return _fill_bitmap_with_points(_compute_draw_tool_circle(brush_size_v2, fill), diameter)
+	var diameter_v2 := brush_size_v2 * 2 + Vector2i.ONE
+	var circle_tool_map := _fill_bitmap_with_points(
+		_compute_draw_tool_circle(brush_size_v2, fill), diameter_v2
+	)
+	if _circle_tool_shortcut.is_empty():
+		# Go through that BitMap and build an Array of the "displacement"
+		# from the center of the bits that are true.
+		var diameter := _brush_size_dynamics * 2 + 1
+		for n in range(0, diameter):
+			for m in range(0, diameter):
+				if circle_tool_map.get_bitv(Vector2i(m, n)):
+					_circle_tool_shortcut.append(
+						Vector2i(m - _brush_size_dynamics, n - _brush_size_dynamics)
+					)
+	return circle_tool_map
 
 
 func _create_line_indicator(indicator: BitMap, start: Vector2i, end: Vector2i) -> BitMap:
@@ -694,7 +718,7 @@ func _get_undo_data() -> Dictionary:
 	var data := {}
 	var project := Global.current_project
 	var cels: Array[BaseCel] = []
-	if Global.animation_timer.is_stopped():
+	if Global.animation_timeline.animation_timer.is_stopped():
 		for cel_index in project.selected_cels:
 			cels.append(project.frames[cel_index[0]].cels[cel_index[1]])
 	else:
@@ -711,55 +735,31 @@ func _get_undo_data() -> Dictionary:
 	return data
 
 
-func _pick_color(pos: Vector2i) -> void:
-	var project := Global.current_project
-	pos = project.tiles.get_canon_position(pos)
-
-	if pos.x < 0 or pos.y < 0:
-		return
-
-	var image := Image.new()
-	image.copy_from(_get_draw_image())
-	if pos.x > image.get_width() - 1 or pos.y > image.get_height() - 1:
-		return
-
-	var color := Color(0, 0, 0, 0)
-	var curr_frame: Frame = project.frames[project.current_frame]
-	for layer in project.layers.size():
-		var idx := (project.layers.size() - 1) - layer
-		if project.layers[idx].is_visible_in_hierarchy():
-			image = curr_frame.cels[idx].get_image()
-			color = image.get_pixelv(pos)
-			if not is_zero_approx(color.a):
-				break
-	var button := (
-		MOUSE_BUTTON_LEFT
-		if Tools._slots[MOUSE_BUTTON_LEFT].tool_node == self
-		else MOUSE_BUTTON_RIGHT
-	)
-	Tools.assign_color(color, button, false)
-
-
 func _on_flip_x_toggled(button_pressed: bool) -> void:
 	_brush_flip_x = button_pressed
 	update_brush()
+	save_config()
 
 
 func _on_flip_y_toggled(button_pressed: bool) -> void:
 	_brush_flip_y = button_pressed
 	update_brush()
+	save_config()
 
 
 func _on_rotate_90_toggled(button_pressed: bool) -> void:
 	_brush_rotate_90 = button_pressed
 	update_brush()
+	save_config()
 
 
 func _on_rotate_180_toggled(button_pressed: bool) -> void:
 	_brush_rotate_180 = button_pressed
 	update_brush()
+	save_config()
 
 
 func _on_rotate_270_toggled(button_pressed: bool) -> void:
 	_brush_rotate_270 = button_pressed
 	update_brush()
+	save_config()
diff --git a/src/Tools/BaseDraw.tscn b/src/Tools/BaseDraw.tscn
index cb625adcb..825eb7501 100644
--- a/src/Tools/BaseDraw.tscn
+++ b/src/Tools/BaseDraw.tscn
@@ -1,15 +1,16 @@
-[gd_scene load_steps=8 format=3 uid="uid://ubyatap3sylf"]
+[gd_scene load_steps=9 format=3 uid="uid://ubyatap3sylf"]
 
 [ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="1"]
 [ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="2"]
 [ext_resource type="Script" path="res://src/Tools/BaseDraw.gd" id="3"]
 [ext_resource type="Script" path="res://src/UI/Nodes/CollapsibleContainer.gd" id="3_76bek"]
+[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="5_kdxku"]
 
 [sub_resource type="ButtonGroup" id="ButtonGroup_7u3x0"]
 resource_name = "rotate"
 allow_unpress = true
 
-[sub_resource type="StyleBoxFlat" id="1"]
+[sub_resource type="StyleBoxFlat" id="2"]
 bg_color = Color(1, 1, 1, 1)
 border_color = Color(1, 1, 1, 1)
 corner_radius_top_left = 5
@@ -18,7 +19,7 @@ corner_radius_bottom_right = 5
 corner_radius_bottom_left = 5
 anti_aliasing = false
 
-[sub_resource type="StyleBoxFlat" id="2"]
+[sub_resource type="StyleBoxFlat" id="1"]
 bg_color = Color(1, 1, 1, 1)
 border_color = Color(1, 1, 1, 1)
 corner_radius_top_left = 5
@@ -38,44 +39,63 @@ script = ExtResource("3_76bek")
 text = "Rotation options"
 flat = true
 
-[node name="Flip" type="HBoxContainer" parent="RotationOptions" index="1"]
+[node name="GridContainer" type="GridContainer" parent="RotationOptions" index="1"]
 visible = false
 layout_mode = 2
+columns = 2
 
-[node name="FlipX" type="CheckBox" parent="RotationOptions/Flip" index="0"]
+[node name="FlipLabel" type="Label" parent="RotationOptions/GridContainer" index="0"]
+layout_mode = 2
+text = "Flip:"
+
+[node name="Flip" type="HBoxContainer" parent="RotationOptions/GridContainer" index="1"]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="FlipX" type="CheckBox" parent="RotationOptions/GridContainer/Flip" index="0"]
+unique_name_in_owner = true
 layout_mode = 2
 mouse_default_cursor_shape = 2
-text = "Flip X"
+text = "X"
 
-[node name="FlipY" type="CheckBox" parent="RotationOptions/Flip" index="1"]
+[node name="FlipY" type="CheckBox" parent="RotationOptions/GridContainer/Flip" index="1"]
+unique_name_in_owner = true
 layout_mode = 2
 mouse_default_cursor_shape = 2
-text = "Flip Y"
+text = "Y"
 
-[node name="Rotate" type="HBoxContainer" parent="RotationOptions" index="2"]
-visible = false
+[node name="RotateLabel" type="Label" parent="RotationOptions/GridContainer" index="2"]
 layout_mode = 2
+size_flags_vertical = 0
+text = "Rotate:"
 
-[node name="Rotate90" type="CheckBox" parent="RotationOptions/Rotate" index="0"]
+[node name="Rotate" type="HFlowContainer" parent="RotationOptions/GridContainer" index="3"]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="Rotate90" type="CheckBox" parent="RotationOptions/GridContainer/Rotate" index="0"]
+unique_name_in_owner = true
 layout_mode = 2
 tooltip_text = "rotate the brush 90 degrees"
 mouse_default_cursor_shape = 2
 button_group = SubResource("ButtonGroup_7u3x0")
-text = "R 90"
+text = "90°"
 
-[node name="Rotate180" type="CheckBox" parent="RotationOptions/Rotate" index="1"]
+[node name="Rotate180" type="CheckBox" parent="RotationOptions/GridContainer/Rotate" index="1"]
+unique_name_in_owner = true
 layout_mode = 2
 tooltip_text = "rotate the brush 180 degrees"
 mouse_default_cursor_shape = 2
 button_group = SubResource("ButtonGroup_7u3x0")
-text = "R 180"
+text = "180°"
 
-[node name="Rotate270" type="CheckBox" parent="RotationOptions/Rotate" index="2"]
+[node name="Rotate270" type="CheckBox" parent="RotationOptions/GridContainer/Rotate" index="2"]
+unique_name_in_owner = true
 layout_mode = 2
 tooltip_text = "rotate the brush 270 degrees"
 mouse_default_cursor_shape = 2
 button_group = SubResource("ButtonGroup_7u3x0")
-text = "R 270"
+text = "270°"
 
 [node name="Brush" type="HBoxContainer" parent="." index="3"]
 layout_mode = 2
@@ -87,18 +107,18 @@ layout_mode = 2
 size_flags_horizontal = 0
 tooltip_text = "Select a brush"
 mouse_default_cursor_shape = 2
-theme_override_styles/normal = SubResource("1")
+theme_override_styles/focus = SubResource("2")
+theme_override_styles/disabled = SubResource("2")
 theme_override_styles/hover = SubResource("1")
 theme_override_styles/pressed = SubResource("1")
-theme_override_styles/disabled = SubResource("2")
-theme_override_styles/focus = SubResource("2")
+theme_override_styles/normal = SubResource("1")
 
 [node name="Texture" type="TextureRect" parent="Brush/Type" index="0"]
 layout_mode = 0
 offset_right = 32.0
 offset_bottom = 32.0
 expand_mode = 1
-stretch_mode = 6
+stretch_mode = 5
 
 [node name="BrushSize" parent="Brush" index="1" instance=ExtResource("1")]
 layout_mode = 2
@@ -111,17 +131,36 @@ suffix = "px"
 global_increment_action = "brush_size_increment"
 global_decrement_action = "brush_size_decrement"
 
-[node name="ColorInterpolation" parent="." index="4" instance=ExtResource("1")]
+[node name="DensityValueSlider" type="TextureProgressBar" parent="." index="4"]
+visible = false
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
+min_value = 1.0
+value = 100.0
+nine_patch_stretch = true
+stretch_margin_left = 3
+stretch_margin_top = 3
+stretch_margin_right = 3
+stretch_margin_bottom = 3
+script = ExtResource("5_kdxku")
+prefix = "Density:"
+suffix = "%"
+
+[node name="ColorInterpolation" parent="." index="5" instance=ExtResource("1")]
 visible = false
 layout_mode = 2
 tooltip_text = "0: Color from the brush itself, 100: the currently selected color"
 prefix = "Brush color from:"
 
-[connection signal="toggled" from="RotationOptions/Flip/FlipX" to="." method="_on_flip_x_toggled"]
-[connection signal="toggled" from="RotationOptions/Flip/FlipY" to="." method="_on_flip_y_toggled"]
-[connection signal="toggled" from="RotationOptions/Rotate/Rotate90" to="." method="_on_rotate_90_toggled"]
-[connection signal="toggled" from="RotationOptions/Rotate/Rotate180" to="." method="_on_rotate_180_toggled"]
-[connection signal="toggled" from="RotationOptions/Rotate/Rotate270" to="." method="_on_rotate_270_toggled"]
+[connection signal="toggled" from="RotationOptions/GridContainer/Flip/FlipX" to="." method="_on_flip_x_toggled"]
+[connection signal="toggled" from="RotationOptions/GridContainer/Flip/FlipY" to="." method="_on_flip_y_toggled"]
+[connection signal="toggled" from="RotationOptions/GridContainer/Rotate/Rotate90" to="." method="_on_rotate_90_toggled"]
+[connection signal="toggled" from="RotationOptions/GridContainer/Rotate/Rotate180" to="." method="_on_rotate_180_toggled"]
+[connection signal="toggled" from="RotationOptions/GridContainer/Rotate/Rotate270" to="." method="_on_rotate_270_toggled"]
 [connection signal="pressed" from="Brush/Type" to="." method="_on_BrushType_pressed"]
 [connection signal="value_changed" from="Brush/BrushSize" to="." method="_on_BrushSize_value_changed"]
+[connection signal="value_changed" from="DensityValueSlider" to="." method="_on_density_value_slider_value_changed"]
 [connection signal="value_changed" from="ColorInterpolation" to="." method="_on_InterpolateFactor_value_changed"]
diff --git a/src/Tools/BaseSelectionTool.gd b/src/Tools/BaseSelectionTool.gd
index c8a9fe287..af279f60a 100644
--- a/src/Tools/BaseSelectionTool.gd
+++ b/src/Tools/BaseSelectionTool.gd
@@ -22,7 +22,8 @@ var _intersect := false  ## Shift + Ctrl + Mouse Click
 var _content_transformation_check := false
 var _skip_slider_logic := false
 
-@onready var selection_node: Node2D = Global.canvas.selection
+@onready var selection_node := Global.canvas.selection
+@onready var confirm_buttons := $ConfirmButtons as HBoxContainer
 @onready var position_sliders := $Position as ValueSliderV2
 @onready var size_sliders := $Size as ValueSliderV2
 @onready var timer := $Timer as Timer
@@ -30,11 +31,17 @@ var _skip_slider_logic := false
 
 func _ready() -> void:
 	super._ready()
+	set_confirm_buttons_visibility()
 	set_spinbox_values()
 	refresh_options()
+	selection_node.is_moving_content_changed.connect(set_confirm_buttons_visibility)
 
 
-## Ensure all items are added when we are selecting an option (bad things will happen otherwise)
+func set_confirm_buttons_visibility() -> void:
+	confirm_buttons.visible = selection_node.is_moving_content
+
+
+## Ensure all items are added when we are selecting an option.
 func refresh_options() -> void:
 	$Modes.clear()
 	$Modes.add_item("Replace selection")
@@ -203,6 +210,16 @@ func apply_selection(_position: Vector2i) -> void:
 				_intersect = true
 
 
+func _on_confirm_button_pressed() -> void:
+	if selection_node.is_moving_content:
+		selection_node.transform_content_confirm()
+
+
+func _on_cancel_button_pressed() -> void:
+	if selection_node.is_moving_content:
+		selection_node.transform_content_cancel()
+
+
 func _on_Modes_item_selected(index: int) -> void:
 	_mode_selected = index
 	save_config()
diff --git a/src/Tools/BaseSelectionTool.tscn b/src/Tools/BaseSelectionTool.tscn
index a600f1d5a..58ed7f322 100644
--- a/src/Tools/BaseSelectionTool.tscn
+++ b/src/Tools/BaseSelectionTool.tscn
@@ -1,34 +1,85 @@
-[gd_scene load_steps=4 format=3 uid="uid://bd62qfjn380wf"]
+[gd_scene load_steps=10 format=3 uid="uid://bd62qfjn380wf"]
 
 [ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="1"]
 [ext_resource type="Script" path="res://src/Tools/BaseSelectionTool.gd" id="2"]
+[ext_resource type="Texture2D" uid="uid://d267xalp3p7ru" path="res://assets/graphics/misc/check_plain.png" id="3_mtv71"]
 [ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="4"]
+[ext_resource type="Texture2D" uid="uid://bnc78807k1xjv" path="res://assets/graphics/misc/close.png" id="4_ad04n"]
+
+[sub_resource type="InputEventAction" id="InputEventAction_gfv4x"]
+action = &"transformation_confirm"
+
+[sub_resource type="Shortcut" id="Shortcut_5gq73"]
+events = [SubResource("InputEventAction_gfv4x")]
+
+[sub_resource type="InputEventAction" id="InputEventAction_nadbx"]
+action = &"transformation_cancel"
+
+[sub_resource type="Shortcut" id="Shortcut_04tjd"]
+events = [SubResource("InputEventAction_nadbx")]
 
 [node name="ToolOptions" instance=ExtResource("1")]
 script = ExtResource("2")
 
-[node name="ModeLabel" type="Label" parent="." index="2"]
+[node name="ConfirmButtons" type="HBoxContainer" parent="." index="2"]
+layout_mode = 2
+
+[node name="ConfirmButton" type="Button" parent="ConfirmButtons" index="0"]
+custom_minimum_size = Vector2(0, 26)
+layout_mode = 2
+size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
+shortcut = SubResource("Shortcut_5gq73")
+
+[node name="TextureRect" type="TextureRect" parent="ConfirmButtons/ConfirmButton" index="0" groups=["UIButtons"]]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("3_mtv71")
+stretch_mode = 3
+
+[node name="CancelButton" type="Button" parent="ConfirmButtons" index="1"]
+custom_minimum_size = Vector2(0, 26)
+layout_mode = 2
+size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
+shortcut = SubResource("Shortcut_04tjd")
+
+[node name="TextureRect" type="TextureRect" parent="ConfirmButtons/CancelButton" index="0" groups=["UIButtons"]]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("4_ad04n")
+stretch_mode = 3
+
+[node name="ModeLabel" type="Label" parent="." index="3"]
 layout_mode = 2
 text = "Mode:"
 
-[node name="Modes" type="OptionButton" parent="." index="3"]
+[node name="Modes" type="OptionButton" parent="." index="4"]
 layout_mode = 2
 mouse_default_cursor_shape = 2
 
-[node name="PositionLabel" type="Label" parent="." index="4"]
+[node name="PositionLabel" type="Label" parent="." index="5"]
 layout_mode = 2
 text = "Position:"
 
-[node name="Position" parent="." index="5" instance=ExtResource("4")]
+[node name="Position" parent="." index="6" instance=ExtResource("4")]
 layout_mode = 2
 allow_greater = true
 allow_lesser = true
 
-[node name="SizeLabel" type="Label" parent="." index="6"]
+[node name="SizeLabel" type="Label" parent="." index="7"]
 layout_mode = 2
 text = "Size:"
 
-[node name="Size" parent="." index="7" instance=ExtResource("4")]
+[node name="Size" parent="." index="8" instance=ExtResource("4")]
 layout_mode = 2
 value = Vector2(1, 1)
 min_value = Vector2(1, 1)
@@ -37,10 +88,12 @@ show_ratio = true
 prefix_x = "Width:"
 prefix_y = "Height:"
 
-[node name="Timer" type="Timer" parent="." index="8"]
+[node name="Timer" type="Timer" parent="." index="9"]
 wait_time = 0.2
 one_shot = true
 
+[connection signal="pressed" from="ConfirmButtons/ConfirmButton" to="." method="_on_confirm_button_pressed"]
+[connection signal="pressed" from="ConfirmButtons/CancelButton" to="." method="_on_cancel_button_pressed"]
 [connection signal="item_selected" from="Modes" to="." method="_on_Modes_item_selected"]
 [connection signal="value_changed" from="Position" to="." method="_on_Position_value_changed"]
 [connection signal="ratio_toggled" from="Size" to="." method="_on_Size_ratio_toggled"]
diff --git a/src/Tools/BaseShapeDrawer.gd b/src/Tools/BaseShapeDrawer.gd
index 44992ad26..9544c7438 100644
--- a/src/Tools/BaseShapeDrawer.gd
+++ b/src/Tools/BaseShapeDrawer.gd
@@ -3,7 +3,7 @@ extends "res://src/Tools/BaseDraw.gd"
 var _start := Vector2i.ZERO
 var _offset := Vector2i.ZERO
 var _dest := Vector2i.ZERO
-var _fill := false
+var _fill_inside := false
 var _drawing := false
 var _displace_origin := false
 var _thickness := 1
@@ -41,27 +41,27 @@ func update_indicator() -> void:
 
 
 func _on_FillCheckbox_toggled(button_pressed: bool) -> void:
-	_fill = button_pressed
+	_fill_inside = button_pressed
 	update_config()
 	save_config()
 
 
 func get_config() -> Dictionary:
 	var config := super.get_config()
-	config["fill"] = _fill
+	config["fill_inside"] = _fill_inside
 	config["thickness"] = _thickness
 	return config
 
 
 func set_config(config: Dictionary) -> void:
 	super.set_config(config)
-	_fill = config.get("fill", _fill)
+	_fill_inside = config.get("fill_inside", _fill_inside)
 	_thickness = config.get("thickness", _thickness)
 
 
 func update_config() -> void:
 	super.update_config()
-	$FillCheckbox.button_pressed = _fill
+	$FillCheckbox.button_pressed = _fill_inside
 	$ThicknessSlider.value = _thickness
 
 
@@ -89,7 +89,7 @@ func _input(event: InputEvent) -> void:
 func draw_start(pos: Vector2i) -> void:
 	pos = snap_position(pos)
 	super.draw_start(pos)
-	if Input.is_action_pressed("draw_color_picker"):
+	if Input.is_action_pressed(&"draw_color_picker", true):
 		_picking_color = true
 		_pick_color(pos)
 		return
@@ -111,7 +111,7 @@ func draw_move(pos: Vector2i) -> void:
 	pos = snap_position(pos)
 	super.draw_move(pos)
 	if _picking_color:  # Still return even if we released draw_color_picker (Alt)
-		if Input.is_action_pressed("draw_color_picker"):
+		if Input.is_action_pressed(&"draw_color_picker", true):
 			_pick_color(pos)
 		return
 
@@ -237,7 +237,7 @@ func _get_result_rect(origin: Vector2i, dest: Vector2i) -> Rect2i:
 
 
 func _get_points(shape_size: Vector2i) -> Array[Vector2i]:
-	return _get_shape_points_filled(shape_size) if _fill else _get_shape_points(shape_size)
+	return _get_shape_points_filled(shape_size) if _fill_inside else _get_shape_points(shape_size)
 
 
 func _set_cursor_text(rect: Rect2i) -> void:
diff --git a/src/Tools/BaseShapeDrawer.tscn b/src/Tools/BaseShapeDrawer.tscn
index 243e93646..a5badf2ae 100644
--- a/src/Tools/BaseShapeDrawer.tscn
+++ b/src/Tools/BaseShapeDrawer.tscn
@@ -4,7 +4,7 @@
 [ext_resource type="PackedScene" uid="uid://ubyatap3sylf" path="res://src/Tools/BaseDraw.tscn" id="2"]
 [ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"]
 
-[sub_resource type="ButtonGroup" id="ButtonGroup_mvrqm"]
+[sub_resource type="ButtonGroup" id="ButtonGroup_7w1wt"]
 resource_name = "rotate"
 allow_unpress = true
 
@@ -26,14 +26,14 @@ tooltip_text = "Fills the drawn shape with color, instead of drawing a hollow sh
 mouse_default_cursor_shape = 2
 text = "Fill Shape"
 
-[node name="Rotate90" parent="RotationOptions/Rotate" index="0"]
-button_group = SubResource("ButtonGroup_mvrqm")
+[node name="Rotate90" parent="RotationOptions/GridContainer/Rotate" index="0"]
+button_group = SubResource("ButtonGroup_7w1wt")
 
-[node name="Rotate180" parent="RotationOptions/Rotate" index="1"]
-button_group = SubResource("ButtonGroup_mvrqm")
+[node name="Rotate180" parent="RotationOptions/GridContainer/Rotate" index="1"]
+button_group = SubResource("ButtonGroup_7w1wt")
 
-[node name="Rotate270" parent="RotationOptions/Rotate" index="2"]
-button_group = SubResource("ButtonGroup_mvrqm")
+[node name="Rotate270" parent="RotationOptions/GridContainer/Rotate" index="2"]
+button_group = SubResource("ButtonGroup_7w1wt")
 
 [node name="Brush" parent="." index="5"]
 visible = false
diff --git a/src/Tools/BaseTool.gd b/src/Tools/BaseTool.gd
index c022e0437..c3d43aabb 100644
--- a/src/Tools/BaseTool.gd
+++ b/src/Tools/BaseTool.gd
@@ -2,6 +2,7 @@ class_name BaseTool
 extends VBoxContainer
 
 var is_moving := false
+var is_syncing := false
 var kname: String
 var tool_slot: Tools.Slot = null
 var cursor_text := ""
@@ -34,6 +35,8 @@ func _ready() -> void:
 func save_config() -> void:
 	var config := get_config()
 	Global.config_cache.set_value(tool_slot.kname, kname, config)
+	if not is_syncing:  # If the tool isn't busy syncing with another tool.
+		Tools.config_changed.emit(tool_slot.button, config)
 
 
 func load_config() -> void:
@@ -312,6 +315,30 @@ func _get_selected_draw_images() -> Array[Image]:
 	return images
 
 
+func _pick_color(pos: Vector2i) -> void:
+	var project := Global.current_project
+	pos = project.tiles.get_canon_position(pos)
+
+	if pos.x < 0 or pos.y < 0:
+		return
+
+	var image := Image.new()
+	image.copy_from(_get_draw_image())
+	if pos.x > image.get_width() - 1 or pos.y > image.get_height() - 1:
+		return
+
+	var color := Color(0, 0, 0, 0)
+	var curr_frame: Frame = project.frames[project.current_frame]
+	for layer in project.layers.size():
+		var idx := (project.layers.size() - 1) - layer
+		if project.layers[idx].is_visible_in_hierarchy():
+			image = curr_frame.cels[idx].get_image()
+			color = image.get_pixelv(pos)
+			if not is_zero_approx(color.a):
+				break
+	Tools.assign_color(color, tool_slot.button, false)
+
+
 func _flip_rect(rect: Rect2, rect_size: Vector2, horiz: bool, vert: bool) -> Rect2:
 	var result := rect
 	if horiz:
@@ -374,3 +401,4 @@ func _add_polylines_segment(lines: Array, start: Vector2i, end: Vector2i) -> voi
 func _exit_tree() -> void:
 	if is_moving:
 		draw_end(Global.canvas.current_pixel.floor())
+	Global.canvas.previews_sprite.texture = null
diff --git a/src/Tools/DesignTools/Bucket.gd b/src/Tools/DesignTools/Bucket.gd
index 2e640a365..2635ab356 100644
--- a/src/Tools/DesignTools/Bucket.gd
+++ b/src/Tools/DesignTools/Bucket.gd
@@ -7,6 +7,7 @@ const COLOR_REPLACE_SHADER := preload("res://src/Shaders/ColorReplace.gdshader")
 const PATTERN_FILL_SHADER := preload("res://src/Shaders/PatternFill.gdshader")
 
 var _undo_data := {}
+var _picking_color := false
 var _prev_mode := 0
 var _pattern: Patterns.Pattern
 var _tolerance := 0.003
@@ -151,9 +152,11 @@ func update_pattern() -> void:
 
 func draw_start(pos: Vector2i) -> void:
 	super.draw_start(pos)
-	if Input.is_action_pressed("draw_color_picker"):
+	if Input.is_action_pressed(&"draw_color_picker", true):
+		_picking_color = true
 		_pick_color(pos)
 		return
+	_picking_color = false
 	_undo_data = _get_undo_data()
 	if !Global.current_project.layers[Global.current_project.current_layer].can_layer_get_drawn():
 		return
@@ -164,6 +167,10 @@ func draw_start(pos: Vector2i) -> void:
 
 func draw_move(pos: Vector2i) -> void:
 	super.draw_move(pos)
+	if _picking_color:  # Still return even if we released Alt
+		if Input.is_action_pressed(&"draw_color_picker", true):
+			_pick_color(pos)
+		return
 	Global.canvas.selection.transform_content_confirm()
 	if !Global.current_project.layers[Global.current_project.current_layer].can_layer_get_drawn():
 		return
@@ -174,6 +181,8 @@ func draw_move(pos: Vector2i) -> void:
 
 func draw_end(pos: Vector2i) -> void:
 	super.draw_end(pos)
+	if _picking_color:
+		return
 	commit_undo()
 
 
@@ -487,7 +496,7 @@ func commit_undo() -> void:
 	var project := Global.current_project
 	var frame := -1
 	var layer := -1
-	if Global.animation_timer.is_stopped() and project.selected_cels.size() == 1:
+	if Global.animation_timeline.animation_timer.is_stopped() and project.selected_cels.size() == 1:
 		frame = project.current_frame
 		layer = project.current_layer
 
@@ -502,7 +511,7 @@ func commit_undo() -> void:
 
 func _get_undo_data() -> Dictionary:
 	var data := {}
-	if Global.animation_timer.is_stopped():
+	if Global.animation_timeline.animation_timer.is_stopped():
 		var images := _get_selected_draw_images()
 		for image in images:
 			data[image] = image.data
@@ -514,24 +523,3 @@ func _get_undo_data() -> Dictionary:
 			var image := cel.get_image()
 			data[image] = image.data
 	return data
-
-
-func _pick_color(pos: Vector2i) -> void:
-	var project := Global.current_project
-	pos = project.tiles.get_canon_position(pos)
-
-	if pos.x < 0 or pos.y < 0:
-		return
-
-	var image := Image.new()
-	image.copy_from(_get_draw_image())
-	if pos.x > image.get_width() - 1 or pos.y > image.get_height() - 1:
-		return
-
-	var color := image.get_pixelv(pos)
-	var button := (
-		MOUSE_BUTTON_LEFT
-		if Tools._slots[MOUSE_BUTTON_LEFT].tool_node == self
-		else MOUSE_BUTTON_RIGHT
-	)
-	Tools.assign_color(color, button, false)
diff --git a/src/Tools/DesignTools/Bucket.tscn b/src/Tools/DesignTools/Bucket.tscn
index 17ed602d7..d24b67424 100644
--- a/src/Tools/DesignTools/Bucket.tscn
+++ b/src/Tools/DesignTools/Bucket.tscn
@@ -5,7 +5,7 @@
 [ext_resource type="Script" path="res://src/Tools/DesignTools/Bucket.gd" id="3"]
 [ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="4_1pngp"]
 
-[sub_resource type="StyleBoxFlat" id="1"]
+[sub_resource type="StyleBoxFlat" id="2"]
 bg_color = Color(1, 1, 1, 1)
 border_color = Color(1, 1, 1, 1)
 corner_radius_top_left = 5
@@ -14,7 +14,7 @@ corner_radius_bottom_right = 5
 corner_radius_bottom_left = 5
 anti_aliasing = false
 
-[sub_resource type="StyleBoxFlat" id="2"]
+[sub_resource type="StyleBoxFlat" id="1"]
 bg_color = Color(1, 1, 1, 1)
 border_color = Color(1, 1, 1, 1)
 corner_radius_top_left = 5
@@ -38,10 +38,9 @@ text = "Fill area:"
 layout_mode = 2
 size_flags_horizontal = 3
 mouse_default_cursor_shape = 2
-item_count = 3
 selected = 0
+item_count = 3
 popup/item_0/text = "Similar area"
-popup/item_0/id = 0
 popup/item_1/text = "Similar colors"
 popup/item_1/id = 1
 popup/item_2/text = "Whole selection"
@@ -71,10 +70,9 @@ text = "Fill with:"
 layout_mode = 2
 size_flags_horizontal = 3
 mouse_default_cursor_shape = 2
-item_count = 2
 selected = 0
+item_count = 2
 popup/item_0/text = "Selected color"
-popup/item_0/id = 0
 popup/item_1/text = "Pattern"
 popup/item_1/id = 1
 
@@ -89,18 +87,18 @@ layout_mode = 2
 size_flags_horizontal = 0
 tooltip_text = "Select a brush"
 mouse_default_cursor_shape = 2
-theme_override_styles/normal = SubResource("1")
+theme_override_styles/focus = SubResource("2")
+theme_override_styles/disabled = SubResource("2")
 theme_override_styles/hover = SubResource("1")
 theme_override_styles/pressed = SubResource("1")
-theme_override_styles/disabled = SubResource("2")
-theme_override_styles/focus = SubResource("2")
+theme_override_styles/normal = SubResource("1")
 
 [node name="Texture2D" type="TextureRect" parent="FillPattern/Type" index="0"]
 layout_mode = 0
 offset_right = 32.0
 offset_bottom = 32.0
 expand_mode = 1
-stretch_mode = 6
+stretch_mode = 5
 
 [node name="OffsetX" parent="FillPattern" index="1" instance=ExtResource("1")]
 layout_mode = 2
diff --git a/src/Tools/DesignTools/CurveTool.gd b/src/Tools/DesignTools/CurveTool.gd
index e00958689..9219c2bbc 100644
--- a/src/Tools/DesignTools/CurveTool.gd
+++ b/src/Tools/DesignTools/CurveTool.gd
@@ -2,7 +2,8 @@ extends "res://src/Tools/BaseDraw.gd"
 
 var _curve := Curve2D.new()  ## The [Curve2D] responsible for the shape of the curve being drawn.
 var _drawing := false  ## Set to true when a curve is being drawn.
-var _fill := false  ## When true, the inside area of the curve gets filled.
+var _fill_inside := false  ## When true, the inside area of the curve gets filled.
+var _fill_inside_rect := Rect2i()  ## The bounding box that surrounds the area that gets filled.
 var _editing_bezier := false  ## Needed to determine when to show the control points preview line.
 var _editing_out_control_point := false  ## True when controlling the out control point only.
 var _thickness := 1  ## The thickness of the curve.
@@ -28,7 +29,7 @@ func _on_thickness_value_changed(value: int) -> void:
 
 
 func _on_fill_checkbox_toggled(toggled_on: bool) -> void:
-	_fill = toggled_on
+	_fill_inside = toggled_on
 	update_config()
 	save_config()
 
@@ -43,17 +44,20 @@ func update_indicator() -> void:
 
 func get_config() -> Dictionary:
 	var config := super.get_config()
+	config["fill_inside"] = _fill_inside
 	config["thickness"] = _thickness
 	return config
 
 
 func set_config(config: Dictionary) -> void:
 	super.set_config(config)
+	_fill_inside = config.get("fill_inside", _fill_inside)
 	_thickness = config.get("thickness", _thickness)
 
 
 func update_config() -> void:
 	super.update_config()
+	$FillCheckbox.button_pressed = _fill_inside
 	$ThicknessSlider.value = _thickness
 
 
@@ -96,6 +100,7 @@ func draw_start(pos: Vector2i) -> void:
 	if !_drawing:
 		_drawing = true
 	_curve.add_point(pos)
+	_fill_inside_rect = Rect2i(pos, Vector2i.ZERO)
 
 
 func draw_move(pos: Vector2i) -> void:
@@ -183,15 +188,15 @@ func _draw_shape() -> void:
 	for point in points:
 		# Reset drawer every time because pixel perfect sometimes breaks the tool
 		_drawer.reset()
+		_fill_inside_rect = _fill_inside_rect.expand(point)
 		# Draw each point offsetted based on the shape's thickness
 		_draw_pixel(point, images)
-	if _fill:
+	if _fill_inside:
 		var v := Vector2i()
-		var image_size := Global.current_project.size
-		for x in image_size.x:
-			v.x = x
-			for y in image_size.y:
-				v.y = y
+		for x in _fill_inside_rect.size.x:
+			v.x = x + _fill_inside_rect.position.x
+			for y in _fill_inside_rect.size.y:
+				v.y = y + _fill_inside_rect.position.y
 				if Geometry2D.is_point_in_polygon(v, points):
 					_draw_pixel(v, images)
 	_clear()
@@ -206,6 +211,7 @@ func _draw_pixel(point: Vector2i, images: Array[Image]) -> void:
 
 func _clear() -> void:
 	_curve.clear_points()
+	_fill_inside_rect = Rect2i()
 	_drawing = false
 	_editing_out_control_point = false
 	Global.canvas.previews.queue_redraw()
diff --git a/src/Tools/DesignTools/CurveTool.tscn b/src/Tools/DesignTools/CurveTool.tscn
index 354b58a1b..094ad3e83 100644
--- a/src/Tools/DesignTools/CurveTool.tscn
+++ b/src/Tools/DesignTools/CurveTool.tscn
@@ -4,7 +4,7 @@
 [ext_resource type="Script" path="res://src/Tools/DesignTools/CurveTool.gd" id="2_tjnp6"]
 [ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="3_g0nav"]
 
-[sub_resource type="ButtonGroup" id="ButtonGroup_ko8wf"]
+[sub_resource type="ButtonGroup" id="ButtonGroup_drx24"]
 resource_name = "rotate"
 allow_unpress = true
 
@@ -26,14 +26,14 @@ tooltip_text = "Fills the drawn shape with color, instead of drawing a hollow sh
 mouse_default_cursor_shape = 2
 text = "Fill Shape"
 
-[node name="Rotate90" parent="RotationOptions/Rotate" index="0"]
-button_group = SubResource("ButtonGroup_ko8wf")
+[node name="Rotate90" parent="RotationOptions/GridContainer/Rotate" index="0"]
+button_group = SubResource("ButtonGroup_drx24")
 
-[node name="Rotate180" parent="RotationOptions/Rotate" index="1"]
-button_group = SubResource("ButtonGroup_ko8wf")
+[node name="Rotate180" parent="RotationOptions/GridContainer/Rotate" index="1"]
+button_group = SubResource("ButtonGroup_drx24")
 
-[node name="Rotate270" parent="RotationOptions/Rotate" index="2"]
-button_group = SubResource("ButtonGroup_ko8wf")
+[node name="Rotate270" parent="RotationOptions/GridContainer/Rotate" index="2"]
+button_group = SubResource("ButtonGroup_drx24")
 
 [node name="Brush" parent="." index="5"]
 visible = false
diff --git a/src/Tools/DesignTools/EllipseTool.tscn b/src/Tools/DesignTools/EllipseTool.tscn
index 59f20adee..65826128a 100644
--- a/src/Tools/DesignTools/EllipseTool.tscn
+++ b/src/Tools/DesignTools/EllipseTool.tscn
@@ -3,18 +3,18 @@
 [ext_resource type="PackedScene" uid="uid://n40lhf8hm7o1" path="res://src/Tools/BaseShapeDrawer.tscn" id="1"]
 [ext_resource type="Script" path="res://src/Tools/DesignTools/EllipseTool.gd" id="2"]
 
-[sub_resource type="ButtonGroup" id="ButtonGroup_q7ttl"]
+[sub_resource type="ButtonGroup" id="ButtonGroup_nq4ym"]
 resource_name = "rotate"
 allow_unpress = true
 
 [node name="ToolOptions" instance=ExtResource("1")]
 script = ExtResource("2")
 
-[node name="Rotate90" parent="RotationOptions/Rotate" index="0"]
-button_group = SubResource("ButtonGroup_q7ttl")
+[node name="Rotate90" parent="RotationOptions/GridContainer/Rotate" index="0"]
+button_group = SubResource("ButtonGroup_nq4ym")
 
-[node name="Rotate180" parent="RotationOptions/Rotate" index="1"]
-button_group = SubResource("ButtonGroup_q7ttl")
+[node name="Rotate180" parent="RotationOptions/GridContainer/Rotate" index="1"]
+button_group = SubResource("ButtonGroup_nq4ym")
 
-[node name="Rotate270" parent="RotationOptions/Rotate" index="2"]
-button_group = SubResource("ButtonGroup_q7ttl")
+[node name="Rotate270" parent="RotationOptions/GridContainer/Rotate" index="2"]
+button_group = SubResource("ButtonGroup_nq4ym")
diff --git a/src/Tools/DesignTools/Eraser.gd b/src/Tools/DesignTools/Eraser.gd
index 754b1200a..f2e99ac45 100644
--- a/src/Tools/DesignTools/Eraser.gd
+++ b/src/Tools/DesignTools/Eraser.gd
@@ -37,7 +37,7 @@ func set_config(config: Dictionary) -> void:
 func draw_start(pos: Vector2i) -> void:
 	pos = snap_position(pos)
 	super.draw_start(pos)
-	if Input.is_action_pressed("draw_color_picker"):
+	if Input.is_action_pressed(&"draw_color_picker", true):
 		_picking_color = true
 		_pick_color(pos)
 		return
@@ -71,7 +71,7 @@ func draw_move(pos_i: Vector2i) -> void:
 	pos = snap_position(pos)
 	super.draw_move(pos)
 	if _picking_color:  # Still return even if we released Alt
-		if Input.is_action_pressed(&"draw_color_picker"):
+		if Input.is_action_pressed(&"draw_color_picker", true):
 			_pick_color(pos)
 		return
 
@@ -92,8 +92,8 @@ func draw_move(pos_i: Vector2i) -> void:
 
 func draw_end(pos: Vector2i) -> void:
 	pos = snap_position(pos)
-	super.draw_end(pos)
 	if _picking_color:
+		super.draw_end(pos)
 		return
 
 	if _draw_line:
@@ -105,6 +105,7 @@ func draw_end(pos: Vector2i) -> void:
 		draw_fill_gap(_line_start, _line_end)
 		_draw_line = false
 
+	super.draw_end(pos)
 	commit_undo()
 	SteamManager.set_achievement("ACH_ERASE_PIXEL")
 	cursor_text = ""
diff --git a/src/Tools/DesignTools/Eraser.tscn b/src/Tools/DesignTools/Eraser.tscn
index f161245e0..edb437339 100644
--- a/src/Tools/DesignTools/Eraser.tscn
+++ b/src/Tools/DesignTools/Eraser.tscn
@@ -4,21 +4,21 @@
 [ext_resource type="Script" path="res://src/Tools/DesignTools/Eraser.gd" id="2"]
 [ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"]
 
-[sub_resource type="ButtonGroup" id="ButtonGroup_kkavr"]
+[sub_resource type="ButtonGroup" id="ButtonGroup_7k1sb"]
 resource_name = "rotate"
 allow_unpress = true
 
 [node name="ToolOptions" instance=ExtResource("1")]
 script = ExtResource("2")
 
-[node name="Rotate90" parent="RotationOptions/Rotate" index="0"]
-button_group = SubResource("ButtonGroup_kkavr")
+[node name="Rotate90" parent="RotationOptions/GridContainer/Rotate" index="0"]
+button_group = SubResource("ButtonGroup_7k1sb")
 
-[node name="Rotate180" parent="RotationOptions/Rotate" index="1"]
-button_group = SubResource("ButtonGroup_kkavr")
+[node name="Rotate180" parent="RotationOptions/GridContainer/Rotate" index="1"]
+button_group = SubResource("ButtonGroup_7k1sb")
 
-[node name="Rotate270" parent="RotationOptions/Rotate" index="2"]
-button_group = SubResource("ButtonGroup_kkavr")
+[node name="Rotate270" parent="RotationOptions/GridContainer/Rotate" index="2"]
+button_group = SubResource("ButtonGroup_7k1sb")
 
 [node name="OpacitySlider" parent="." index="5" instance=ExtResource("3")]
 layout_mode = 2
diff --git a/src/Tools/DesignTools/LineTool.tscn b/src/Tools/DesignTools/LineTool.tscn
index 08777f19c..62a9e900e 100644
--- a/src/Tools/DesignTools/LineTool.tscn
+++ b/src/Tools/DesignTools/LineTool.tscn
@@ -4,7 +4,7 @@
 [ext_resource type="Script" path="res://src/Tools/DesignTools/LineTool.gd" id="2"]
 [ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"]
 
-[sub_resource type="ButtonGroup" id="ButtonGroup_ko8wf"]
+[sub_resource type="ButtonGroup" id="ButtonGroup_o5212"]
 resource_name = "rotate"
 allow_unpress = true
 
@@ -20,14 +20,14 @@ suffix = "px"
 global_increment_action = "brush_size_increment"
 global_decrement_action = "brush_size_decrement"
 
-[node name="Rotate90" parent="RotationOptions/Rotate" index="0"]
-button_group = SubResource("ButtonGroup_ko8wf")
+[node name="Rotate90" parent="RotationOptions/GridContainer/Rotate" index="0"]
+button_group = SubResource("ButtonGroup_o5212")
 
-[node name="Rotate180" parent="RotationOptions/Rotate" index="1"]
-button_group = SubResource("ButtonGroup_ko8wf")
+[node name="Rotate180" parent="RotationOptions/GridContainer/Rotate" index="1"]
+button_group = SubResource("ButtonGroup_o5212")
 
-[node name="Rotate270" parent="RotationOptions/Rotate" index="2"]
-button_group = SubResource("ButtonGroup_ko8wf")
+[node name="Rotate270" parent="RotationOptions/GridContainer/Rotate" index="2"]
+button_group = SubResource("ButtonGroup_o5212")
 
 [node name="Brush" parent="." index="4"]
 visible = false
diff --git a/src/Tools/DesignTools/Pencil.gd b/src/Tools/DesignTools/Pencil.gd
index 1ee1dfcc9..269503553 100644
--- a/src/Tools/DesignTools/Pencil.gd
+++ b/src/Tools/DesignTools/Pencil.gd
@@ -5,6 +5,7 @@ var _last_position := Vector2i(Vector2.INF)
 var _changed := false
 var _overwrite := false
 var _fill_inside := false
+var _fill_inside_rect := Rect2i()  ## The bounding box that surrounds the area that gets filled.
 var _draw_points := PackedVector2Array()
 var _old_spacing_mode := false  ## Needed to reset spacing mode in case we change it
 
@@ -49,6 +50,7 @@ func _on_SpacingMode_toggled(button_pressed: bool) -> void:
 
 func _on_Spacing_value_changed(value: Vector2) -> void:
 	_spacing = value
+	save_config()
 
 
 func _input(event: InputEvent) -> void:
@@ -57,10 +59,10 @@ func _input(event: InputEvent) -> void:
 	if event.is_action_pressed("change_tool_mode"):
 		_prev_mode = overwrite_button.button_pressed
 	if event.is_action("change_tool_mode"):
-		overwrite_button.button_pressed = !_prev_mode
+		overwrite_button.set_pressed_no_signal(!_prev_mode)
 		_overwrite = overwrite_button.button_pressed
 	if event.is_action_released("change_tool_mode"):
-		overwrite_button.button_pressed = _prev_mode
+		overwrite_button.set_pressed_no_signal(_prev_mode)
 		_overwrite = overwrite_button.button_pressed
 
 
@@ -94,7 +96,7 @@ func draw_start(pos: Vector2i) -> void:
 	_old_spacing_mode = _spacing_mode
 	pos = snap_position(pos)
 	super.draw_start(pos)
-	if Input.is_action_pressed("draw_color_picker"):
+	if Input.is_action_pressed(&"draw_color_picker", true):
 		_picking_color = true
 		_pick_color(pos)
 		return
@@ -125,6 +127,7 @@ func draw_start(pos: Vector2i) -> void:
 	else:
 		if _fill_inside:
 			_draw_points.append(pos)
+			_fill_inside_rect = Rect2i(pos, Vector2i.ZERO)
 		draw_tool(pos)
 		_last_position = pos
 		Global.canvas.sprite_changed_this_frame = true
@@ -136,7 +139,7 @@ func draw_move(pos_i: Vector2i) -> void:
 	pos = snap_position(pos)
 	super.draw_move(pos)
 	if _picking_color:  # Still return even if we released Alt
-		if Input.is_action_pressed(&"draw_color_picker"):
+		if Input.is_action_pressed(&"draw_color_picker", true):
 			_pick_color(pos)
 		return
 
@@ -156,12 +159,13 @@ func draw_move(pos_i: Vector2i) -> void:
 		Global.canvas.sprite_changed_this_frame = true
 		if _fill_inside:
 			_draw_points.append(pos)
+			_fill_inside_rect = _fill_inside_rect.expand(pos)
 
 
 func draw_end(pos: Vector2i) -> void:
 	pos = snap_position(pos)
-	super.draw_end(pos)
 	if _picking_color:
+		super.draw_end(pos)
 		return
 
 	if _draw_line:
@@ -178,11 +182,10 @@ func draw_end(pos: Vector2i) -> void:
 			_draw_points.append(pos)
 			if _draw_points.size() > 3:
 				var v := Vector2i()
-				var image_size := Global.current_project.size
-				for x in image_size.x:
-					v.x = x
-					for y in image_size.y:
-						v.y = y
+				for x in _fill_inside_rect.size.x:
+					v.x = x + _fill_inside_rect.position.x
+					for y in _fill_inside_rect.size.y:
+						v.y = y + _fill_inside_rect.position.y
 						if Geometry2D.is_point_in_polygon(v, _draw_points):
 							if _spacing_mode:
 								# use of get_spacing_position() in Pencil.gd is a rare case
@@ -190,6 +193,8 @@ func draw_end(pos: Vector2i) -> void:
 								v = get_spacing_position(v)
 							draw_tool(v)
 
+	_fill_inside_rect = Rect2i()
+	super.draw_end(pos)
 	commit_undo()
 	cursor_text = ""
 	update_random_image()
diff --git a/src/Tools/DesignTools/Pencil.tscn b/src/Tools/DesignTools/Pencil.tscn
index af81dc0a4..2ac7774f6 100644
--- a/src/Tools/DesignTools/Pencil.tscn
+++ b/src/Tools/DesignTools/Pencil.tscn
@@ -4,21 +4,21 @@
 [ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="2"]
 [ext_resource type="Script" path="res://src/Tools/DesignTools/Pencil.gd" id="3"]
 
-[sub_resource type="ButtonGroup" id="ButtonGroup_clato"]
+[sub_resource type="ButtonGroup" id="ButtonGroup_e3rs3"]
 resource_name = "rotate"
 allow_unpress = true
 
 [node name="ToolOptions" instance=ExtResource("1")]
 script = ExtResource("3")
 
-[node name="Rotate90" parent="RotationOptions/Rotate" index="0"]
-button_group = SubResource("ButtonGroup_clato")
+[node name="Rotate90" parent="RotationOptions/GridContainer/Rotate" index="0"]
+button_group = SubResource("ButtonGroup_e3rs3")
 
-[node name="Rotate180" parent="RotationOptions/Rotate" index="1"]
-button_group = SubResource("ButtonGroup_clato")
+[node name="Rotate180" parent="RotationOptions/GridContainer/Rotate" index="1"]
+button_group = SubResource("ButtonGroup_e3rs3")
 
-[node name="Rotate270" parent="RotationOptions/Rotate" index="2"]
-button_group = SubResource("ButtonGroup_clato")
+[node name="Rotate270" parent="RotationOptions/GridContainer/Rotate" index="2"]
+button_group = SubResource("ButtonGroup_e3rs3")
 
 [node name="Overwrite" type="CheckBox" parent="." index="5"]
 layout_mode = 2
diff --git a/src/Tools/DesignTools/RectangleTool.tscn b/src/Tools/DesignTools/RectangleTool.tscn
index 461bc8e09..5c0f91b34 100644
--- a/src/Tools/DesignTools/RectangleTool.tscn
+++ b/src/Tools/DesignTools/RectangleTool.tscn
@@ -3,18 +3,18 @@
 [ext_resource type="PackedScene" uid="uid://n40lhf8hm7o1" path="res://src/Tools/BaseShapeDrawer.tscn" id="1"]
 [ext_resource type="Script" path="res://src/Tools/DesignTools/RectangleTool.gd" id="2"]
 
-[sub_resource type="ButtonGroup" id="ButtonGroup_cyxrj"]
+[sub_resource type="ButtonGroup" id="ButtonGroup_vkkkg"]
 resource_name = "rotate"
 allow_unpress = true
 
 [node name="ToolOptions" instance=ExtResource("1")]
 script = ExtResource("2")
 
-[node name="Rotate90" parent="RotationOptions/Rotate" index="0"]
-button_group = SubResource("ButtonGroup_cyxrj")
+[node name="Rotate90" parent="RotationOptions/GridContainer/Rotate" index="0"]
+button_group = SubResource("ButtonGroup_vkkkg")
 
-[node name="Rotate180" parent="RotationOptions/Rotate" index="1"]
-button_group = SubResource("ButtonGroup_cyxrj")
+[node name="Rotate180" parent="RotationOptions/GridContainer/Rotate" index="1"]
+button_group = SubResource("ButtonGroup_vkkkg")
 
-[node name="Rotate270" parent="RotationOptions/Rotate" index="2"]
-button_group = SubResource("ButtonGroup_cyxrj")
+[node name="Rotate270" parent="RotationOptions/GridContainer/Rotate" index="2"]
+button_group = SubResource("ButtonGroup_vkkkg")
diff --git a/src/Tools/DesignTools/Shading.gd b/src/Tools/DesignTools/Shading.gd
index a07fd22fb..e18ce0615 100644
--- a/src/Tools/DesignTools/Shading.gd
+++ b/src/Tools/DesignTools/Shading.gd
@@ -1,6 +1,6 @@
 extends "res://src/Tools/BaseDraw.gd"
 
-enum ShadingMode { SIMPLE, HUE_SHIFTING }
+enum ShadingMode { SIMPLE, HUE_SHIFTING, COLOR_REPLACE }
 enum LightenDarken { LIGHTEN, DARKEN }
 
 var _prev_mode := 0
@@ -12,6 +12,8 @@ var _amount := 10
 var _hue_amount := 10
 var _sat_amount := 10
 var _value_amount := 10
+var _colors_right := 10
+var _old_palette: Palette
 
 
 class LightenDarkenOp:
@@ -28,17 +30,18 @@ class LightenDarkenOp:
 
 	var sat_lighten_limit := 10.0 / 100.0
 	var value_darken_limit := 10.0 / 100.0
+	var color_array := PackedStringArray()
 
 	func process(_src: Color, dst: Color) -> Color:
 		changed = true
-		if dst.a == 0:
+		if dst.a == 0 and shading_mode != ShadingMode.COLOR_REPLACE:
 			return dst
 		if shading_mode == ShadingMode.SIMPLE:
 			if lighten_or_darken == LightenDarken.LIGHTEN:
 				dst = dst.lightened(strength)
 			else:
 				dst = dst.darkened(strength)
-		else:
+		elif shading_mode == ShadingMode.HUE_SHIFTING:
 			var hue_shift := hue_amount / 360.0
 			var sat_shift := sat_amount / 100.0
 			var value_shift := value_amount / 100.0
@@ -61,6 +64,18 @@ class LightenDarkenOp:
 				dst.s += sat_shift
 				if dst.v > value_darken_limit:
 					dst.v = maxf(dst.v - minf(value_shift, dst.v), value_darken_limit)
+		else:
+			if not color_array.is_empty():
+				var index = color_array.find(dst.to_html())
+				if index != -1:
+					if lighten_or_darken == LightenDarken.LIGHTEN:
+						## Moving to Right
+						if index < color_array.size() - 1:
+							dst = Color(color_array[index + 1])
+					else:
+						## Moving to Left
+						if index > 0:
+							dst = Color(color_array[index - 1])
 
 		return dst
 
@@ -106,6 +121,8 @@ class LightenDarkenOp:
 
 func _init() -> void:
 	_drawer.color_op = LightenDarkenOp.new()
+	Tools.color_changed.connect(_refresh_colors_array)
+	Palettes.palette_selected.connect(palette_changed)
 
 
 func _input(event: InputEvent) -> void:
@@ -161,6 +178,12 @@ func _on_LightenDarken_value_value_changed(value: float) -> void:
 	save_config()
 
 
+func _on_LightenDarken_colors_right_changed(value: float) -> void:
+	_colors_right = int(value)
+	update_config()
+	save_config()
+
+
 func get_config() -> Dictionary:
 	var config := super.get_config()
 	config["shading_mode"] = _shading_mode
@@ -169,6 +192,7 @@ func get_config() -> Dictionary:
 	config["hue_amount"] = _hue_amount
 	config["sat_amount"] = _sat_amount
 	config["value_amount"] = _value_amount
+	config["colors_right"] = _colors_right
 	return config
 
 
@@ -182,6 +206,7 @@ func set_config(config: Dictionary) -> void:
 	_hue_amount = config.get("hue_amount", _hue_amount)
 	_sat_amount = config.get("sat_amount", _sat_amount)
 	_value_amount = config.get("value_amount", _value_amount)
+	_colors_right = config.get("colors_right", _colors_right)
 
 
 func update_config() -> void:
@@ -192,8 +217,11 @@ func update_config() -> void:
 	$HueShiftingOptions/HueSlider.value = _hue_amount
 	$HueShiftingOptions/SatSlider.value = _sat_amount
 	$HueShiftingOptions/ValueSlider.value = _value_amount
+	$ColorReplaceOptions/Settings/ColorsRight.value = _colors_right
 	$AmountSlider.visible = _shading_mode == ShadingMode.SIMPLE
 	$HueShiftingOptions.visible = _shading_mode == ShadingMode.HUE_SHIFTING
+	$ColorReplaceOptions.visible = _shading_mode == ShadingMode.COLOR_REPLACE
+	_refresh_colors_array()
 	update_strength()
 
 
@@ -208,7 +236,7 @@ func update_strength() -> void:
 func draw_start(pos: Vector2i) -> void:
 	pos = snap_position(pos)
 	super.draw_start(pos)
-	if Input.is_action_pressed("draw_color_picker"):
+	if Input.is_action_pressed(&"draw_color_picker", true):
 		_picking_color = true
 		_pick_color(pos)
 		return
@@ -242,7 +270,7 @@ func draw_move(pos_i: Vector2i) -> void:
 	pos = snap_position(pos)
 	super.draw_move(pos)
 	if _picking_color:  # Still return even if we released Alt
-		if Input.is_action_pressed(&"draw_color_picker"):
+		if Input.is_action_pressed(&"draw_color_picker", true):
 			_pick_color(pos)
 		return
 
@@ -263,8 +291,8 @@ func draw_move(pos_i: Vector2i) -> void:
 
 func draw_end(pos: Vector2i) -> void:
 	pos = snap_position(pos)
-	super.draw_end(pos)
 	if _picking_color:
+		super.draw_end(pos)
 		return
 
 	if _draw_line:
@@ -276,6 +304,7 @@ func draw_end(pos: Vector2i) -> void:
 		draw_fill_gap(_line_start, _line_end)
 		_draw_line = false
 
+	super.draw_end(pos)
 	commit_undo()
 	cursor_text = ""
 	update_random_image()
@@ -293,3 +322,54 @@ func _draw_brush_image(image: Image, src_rect: Rect2i, dst: Vector2i) -> void:
 func update_brush() -> void:
 	super.update_brush()
 	$ColorInterpolation.visible = false
+
+
+## this function is also used by a signal, this is why there is _color = Color.TRANSPARENT in here.
+func _refresh_colors_array(_color = Color.TRANSPARENT, mouse_button := tool_slot.button) -> void:
+	if mouse_button != tool_slot.button:
+		return
+	if _shading_mode == ShadingMode.COLOR_REPLACE:
+		await get_tree().process_frame
+		var index = Palettes.current_palette_get_selected_color_index(mouse_button)
+		if index > -1:
+			$ColorReplaceOptions/Settings.visible = true
+			$ColorReplaceOptions/Label.visible = false
+			var color_array := PackedStringArray()
+			for i in _colors_right + 1:
+				var next_color = Palettes.current_palette.get_color(index + i)
+				if next_color != null:
+					color_array.append(next_color.to_html())
+			_drawer.color_op.color_array = color_array
+			construct_preview()
+		else:
+			$ColorReplaceOptions/Settings.visible = false
+			$ColorReplaceOptions/Label.visible = true
+			_drawer.color_op.color_array.clear()
+
+
+func construct_preview() -> void:
+	var colors_container: HFlowContainer = $ColorReplaceOptions/Settings/Colors
+	for i in colors_container.get_child_count():
+		if i >= _drawer.color_op.color_array.size():
+			colors_container.get_child(i).queue_free()
+	for i in _drawer.color_op.color_array.size():
+		var color = _drawer.color_op.color_array[i]
+		if i < colors_container.get_child_count():
+			colors_container.get_child(i).color = color
+		else:
+			var color_rect := ColorRect.new()
+			color_rect.color = color
+			color_rect.custom_minimum_size = Vector2(20, 20)
+			var checker = preload("res://src/UI/Nodes/TransparentChecker.tscn").instantiate()
+			checker.show_behind_parent = true
+			checker.set_anchors_preset(Control.PRESET_FULL_RECT)
+			color_rect.add_child(checker)
+			colors_container.add_child(color_rect)
+
+
+func palette_changed(_palette_name):
+	if _old_palette:
+		_old_palette.data_changed.disconnect(_refresh_colors_array)
+	Palettes.current_palette.data_changed.connect(_refresh_colors_array)
+	_old_palette = Palettes.current_palette
+	_refresh_colors_array()
diff --git a/src/Tools/DesignTools/Shading.tscn b/src/Tools/DesignTools/Shading.tscn
index 21fd4c309..2a8bc4fff 100644
--- a/src/Tools/DesignTools/Shading.tscn
+++ b/src/Tools/DesignTools/Shading.tscn
@@ -4,42 +4,42 @@
 [ext_resource type="Script" path="res://src/Tools/DesignTools/Shading.gd" id="2"]
 [ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"]
 
-[sub_resource type="ButtonGroup" id="ButtonGroup_se02m"]
+[sub_resource type="ButtonGroup" id="ButtonGroup_lvcwb"]
 resource_name = "rotate"
 allow_unpress = true
 
 [node name="ToolOptions" instance=ExtResource("1")]
 script = ExtResource("2")
 
-[node name="Rotate90" parent="RotationOptions/Rotate" index="0"]
-button_group = SubResource("ButtonGroup_se02m")
+[node name="Rotate90" parent="RotationOptions/GridContainer/Rotate" index="0"]
+button_group = SubResource("ButtonGroup_lvcwb")
 
-[node name="Rotate180" parent="RotationOptions/Rotate" index="1"]
-button_group = SubResource("ButtonGroup_se02m")
+[node name="Rotate180" parent="RotationOptions/GridContainer/Rotate" index="1"]
+button_group = SubResource("ButtonGroup_lvcwb")
 
-[node name="Rotate270" parent="RotationOptions/Rotate" index="2"]
-button_group = SubResource("ButtonGroup_se02m")
+[node name="Rotate270" parent="RotationOptions/GridContainer/Rotate" index="2"]
+button_group = SubResource("ButtonGroup_lvcwb")
 
 [node name="LightenDarken" type="OptionButton" parent="." index="5"]
 custom_minimum_size = Vector2(92, 0)
 layout_mode = 2
 mouse_default_cursor_shape = 2
-item_count = 2
 selected = 0
+item_count = 2
 popup/item_0/text = "Lighten"
-popup/item_0/id = 0
 popup/item_1/text = "Darken"
 popup/item_1/id = 1
 
 [node name="ShadingMode" type="OptionButton" parent="." index="6"]
 layout_mode = 2
 mouse_default_cursor_shape = 2
-item_count = 2
 selected = 0
+item_count = 3
 popup/item_0/text = "Simple Shading"
-popup/item_0/id = 0
 popup/item_1/text = "Hue Shifting"
 popup/item_1/id = 1
+popup/item_2/text = "Color Replace"
+popup/item_2/id = 2
 
 [node name="AmountSlider" parent="." index="7" instance=ExtResource("3")]
 layout_mode = 2
@@ -71,9 +71,50 @@ min_value = -100.0
 value = 10.0
 prefix = "Value:"
 
+[node name="ColorReplaceOptions" type="VBoxContainer" parent="." index="9"]
+visible = false
+layout_mode = 2
+
+[node name="Settings" type="VBoxContainer" parent="ColorReplaceOptions" index="0"]
+visible = false
+layout_mode = 2
+
+[node name="ColorsRight" parent="ColorReplaceOptions/Settings" index="0" instance=ExtResource("3")]
+layout_mode = 2
+max_value = 10.0
+allow_greater = true
+prefix = "Colors right"
+
+[node name="HBoxContainer" type="HBoxContainer" parent="ColorReplaceOptions/Settings" index="1"]
+layout_mode = 2
+
+[node name="DarkenLabel" type="Label" parent="ColorReplaceOptions/Settings/HBoxContainer" index="0"]
+layout_mode = 2
+text = "Darken"
+
+[node name="HSeparator" type="HSeparator" parent="ColorReplaceOptions/Settings/HBoxContainer" index="1"]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="LightenLabel" type="Label" parent="ColorReplaceOptions/Settings/HBoxContainer" index="2"]
+layout_mode = 2
+text = "Lighten"
+horizontal_alignment = 2
+
+[node name="Colors" type="HFlowContainer" parent="ColorReplaceOptions/Settings" index="2"]
+layout_mode = 2
+
+[node name="Label" type="Label" parent="ColorReplaceOptions" index="1"]
+custom_minimum_size = Vector2(0, 75)
+layout_mode = 2
+text = "Please select a color from the palette."
+horizontal_alignment = 1
+autowrap_mode = 3
+
 [connection signal="item_selected" from="LightenDarken" to="." method="_on_LightenDarken_item_selected"]
 [connection signal="item_selected" from="ShadingMode" to="." method="_on_ShadingMode_item_selected"]
 [connection signal="value_changed" from="AmountSlider" to="." method="_on_LightenDarken_value_changed"]
 [connection signal="value_changed" from="HueShiftingOptions/HueSlider" to="." method="_on_LightenDarken_hue_value_changed"]
 [connection signal="value_changed" from="HueShiftingOptions/SatSlider" to="." method="_on_LightenDarken_sat_value_changed"]
 [connection signal="value_changed" from="HueShiftingOptions/ValueSlider" to="." method="_on_LightenDarken_value_value_changed"]
+[connection signal="value_changed" from="ColorReplaceOptions/Settings/ColorsRight" to="." method="_on_LightenDarken_colors_right_changed"]
diff --git a/src/Tools/SelectionTools/Lasso.gd b/src/Tools/SelectionTools/Lasso.gd
index 32132a0de..a03dd4c72 100644
--- a/src/Tools/SelectionTools/Lasso.gd
+++ b/src/Tools/SelectionTools/Lasso.gd
@@ -111,11 +111,12 @@ func apply_selection(_position) -> void:
 func lasso_selection(
 	selection_map: SelectionMap, previous_selection_map: SelectionMap, points: Array[Vector2i]
 ) -> void:
-	var project := Global.current_project
 	var selection_size := selection_map.get_size()
+	var bounding_rect := Rect2i(points[0], Vector2i.ZERO)
 	for point in points:
 		if point.x < 0 or point.y < 0 or point.x >= selection_size.x or point.y >= selection_size.y:
 			continue
+		bounding_rect = bounding_rect.expand(point)
 		if _intersect:
 			if previous_selection_map.is_pixel_selected(point):
 				selection_map.select_pixel(point, true)
@@ -123,11 +124,10 @@ func lasso_selection(
 			selection_map.select_pixel(point, !_subtract)
 
 	var v := Vector2i()
-	var image_size := project.size
-	for x in image_size.x:
-		v.x = x
-		for y in image_size.y:
-			v.y = y
+	for x in bounding_rect.size.x:
+		v.x = x + bounding_rect.position.x
+		for y in bounding_rect.size.y:
+			v.y = y + bounding_rect.position.y
 			if Geometry2D.is_point_in_polygon(v, points):
 				if _intersect:
 					if previous_selection_map.is_pixel_selected(v):
diff --git a/src/Tools/SelectionTools/PaintSelect.tscn b/src/Tools/SelectionTools/PaintSelect.tscn
index 0661e653e..6d23a8ea2 100644
--- a/src/Tools/SelectionTools/PaintSelect.tscn
+++ b/src/Tools/SelectionTools/PaintSelect.tscn
@@ -46,7 +46,7 @@ layout_mode = 0
 offset_right = 32.0
 offset_bottom = 32.0
 expand_mode = 1
-stretch_mode = 6
+stretch_mode = 5
 
 [node name="BrushSize" parent="Brush" index="1" instance=ExtResource("3")]
 layout_mode = 2
diff --git a/src/Tools/SelectionTools/PolygonSelect.gd b/src/Tools/SelectionTools/PolygonSelect.gd
index fda95d42e..291a8cfd9 100644
--- a/src/Tools/SelectionTools/PolygonSelect.gd
+++ b/src/Tools/SelectionTools/PolygonSelect.gd
@@ -154,11 +154,12 @@ func _clear() -> void:
 func lasso_selection(
 	selection_map: SelectionMap, previous_selection_map: SelectionMap, points: Array[Vector2i]
 ) -> void:
-	var project := Global.current_project
 	var selection_size := selection_map.get_size()
+	var bounding_rect := Rect2i(points[0], Vector2i.ZERO)
 	for point in points:
 		if point.x < 0 or point.y < 0 or point.x >= selection_size.x or point.y >= selection_size.y:
 			continue
+		bounding_rect = bounding_rect.expand(point)
 		if _intersect:
 			if previous_selection_map.is_pixel_selected(point):
 				selection_map.select_pixel(point, true)
@@ -166,11 +167,10 @@ func lasso_selection(
 			selection_map.select_pixel(point, !_subtract)
 
 	var v := Vector2i()
-	var image_size := project.size
-	for x in image_size.x:
-		v.x = x
-		for y in image_size.y:
-			v.y = y
+	for x in bounding_rect.size.x:
+		v.x = x + bounding_rect.position.x
+		for y in bounding_rect.size.y:
+			v.y = y + bounding_rect.position.y
 			if Geometry2D.is_point_in_polygon(v, points):
 				if _intersect:
 					if previous_selection_map.is_pixel_selected(v):
diff --git a/src/Tools/UtilityTools/Move.gd b/src/Tools/UtilityTools/Move.gd
index 4918e90f3..0520dcc6c 100644
--- a/src/Tools/UtilityTools/Move.gd
+++ b/src/Tools/UtilityTools/Move.gd
@@ -18,16 +18,18 @@ func _input(event: InputEvent) -> void:
 		_snap_to_grid = true
 		_offset = _offset.snapped(Global.grid_size)
 		if Global.current_project.has_selection and selection_node.is_moving_content:
-			var prev_pos: Vector2 = selection_node.big_bounding_rectangle.position
-			selection_node.big_bounding_rectangle.position = prev_pos.snapped(Global.grid_size)
+			var prev_pos: Vector2i = selection_node.big_bounding_rectangle.position
+			selection_node.big_bounding_rectangle.position = Vector2i(
+				prev_pos.snapped(Global.grid_size)
+			)
 			# The first time transform_snap_grid is enabled then _snap_position() is not called
 			# and the selection had wrong offset, so do selection offsetting here
-			var grid_offset := Global.grid_offset
-			grid_offset = Vector2(
-				fmod(grid_offset.x, Global.grid_size.x), fmod(grid_offset.y, Global.grid_size.y)
+			var grid_offset := Vector2i(
+				fmod(Global.grid_offset.x, Global.grid_size.x),
+				fmod(Global.grid_offset.y, Global.grid_size.y)
 			)
 			selection_node.big_bounding_rectangle.position += grid_offset
-			selection_node.marching_ants_outline.offset += (
+			selection_node.marching_ants_outline.offset += Vector2(
 				selection_node.big_bounding_rectangle.position - prev_pos
 			)
 	elif event.is_action_released("transform_snap_grid"):
@@ -126,7 +128,7 @@ func _commit_undo(action: String) -> void:
 	var project := Global.current_project
 	var frame := -1
 	var layer := -1
-	if Global.animation_timer.is_stopped() and project.selected_cels.size() == 1:
+	if Global.animation_timeline.animation_timer.is_stopped() and project.selected_cels.size() == 1:
 		frame = project.current_frame
 		layer = project.current_layer
 
@@ -143,7 +145,7 @@ func _get_undo_data() -> Dictionary:
 	var data := {}
 	var project := Global.current_project
 	var cels: Array[BaseCel] = []
-	if Global.animation_timer.is_stopped():
+	if Global.animation_timeline.animation_timer.is_stopped():
 		for cel_index in project.selected_cels:
 			cels.append(project.frames[cel_index[0]].cels[cel_index[1]])
 	else:
diff --git a/src/Tools/UtilityTools/Pan.gd b/src/Tools/UtilityTools/Pan.gd
index b6b5c7d89..5c9d0d652 100644
--- a/src/Tools/UtilityTools/Pan.gd
+++ b/src/Tools/UtilityTools/Pan.gd
@@ -3,8 +3,8 @@ extends BaseTool
 
 func draw_start(pos: Vector2i) -> void:
 	super.draw_start(pos)
-	Global.camera.drag = true
-	Global.camera2.drag = true
+	for camera: CanvasCamera in get_tree().get_nodes_in_group("CanvasCameras"):
+		camera.drag = true
 
 
 func draw_move(pos: Vector2i) -> void:
@@ -13,5 +13,5 @@ func draw_move(pos: Vector2i) -> void:
 
 func draw_end(pos: Vector2i) -> void:
 	super.draw_end(pos)
-	Global.camera.drag = false
-	Global.camera2.drag = false
+	for camera: CanvasCamera in get_tree().get_nodes_in_group("CanvasCameras"):
+		camera.drag = false
diff --git a/src/Tools/UtilityTools/Zoom.gd b/src/Tools/UtilityTools/Zoom.gd
index 2fa158af3..0c2efbe0d 100644
--- a/src/Tools/UtilityTools/Zoom.gd
+++ b/src/Tools/UtilityTools/Zoom.gd
@@ -28,11 +28,13 @@ func _on_ModeOptions_item_selected(id: ZoomMode) -> void:
 
 
 func _on_FitToFrame_pressed() -> void:
-	Global.camera.fit_to_frame(Global.current_project.size)
+	for camera: CanvasCamera in get_tree().get_nodes_in_group("CanvasCameras"):
+		camera.fit_to_frame(Global.current_project.size)
 
 
 func _on_100_pressed() -> void:
-	Global.camera.zoom_100()
+	for camera: CanvasCamera in get_tree().get_nodes_in_group("CanvasCameras"):
+		camera.zoom_100()
 
 
 func get_config() -> Dictionary:
@@ -50,20 +52,21 @@ func update_config() -> void:
 func draw_start(pos: Vector2i) -> void:
 	super.draw_start(pos)
 	var mouse_pos := get_global_mouse_position()
-	var viewport_rect := Rect2(Global.main_viewport.global_position, Global.main_viewport.size)
-	var viewport_rect_2 := Rect2(
-		Global.second_viewport.global_position, Global.second_viewport.size
-	)
-
-	if viewport_rect.has_point(mouse_pos):
-		Global.camera.zoom_camera(_zoom_mode * 2 - 1)
-	elif viewport_rect_2.has_point(mouse_pos):
-		Global.camera2.zoom_camera(_zoom_mode * 2 - 1)
+	for camera: CanvasCamera in get_tree().get_nodes_in_group("CanvasCameras"):
+		var viewport_container := camera.get_viewport().get_parent() as SubViewportContainer
+		var viewport_rect := Rect2(viewport_container.global_position, viewport_container.size)
+		if viewport_rect.has_point(mouse_pos):
+			camera.zoom_camera(_zoom_mode * 2 - 1)
 
 
 func draw_move(pos: Vector2i) -> void:
 	super.draw_move(pos)
-	Global.camera.zoom_camera(-_relative.x / 3)
+	var mouse_pos := get_global_mouse_position()
+	for camera: CanvasCamera in get_tree().get_nodes_in_group("CanvasCameras"):
+		var viewport_container := camera.get_viewport().get_parent() as SubViewportContainer
+		var viewport_rect := Rect2(viewport_container.global_position, viewport_container.size)
+		if viewport_rect.has_point(mouse_pos):
+			camera.zoom_camera(-_relative.x / 3)
 
 
 func draw_end(pos: Vector2i) -> void:
diff --git a/src/UI/Buttons/BrushButton.tscn b/src/UI/Buttons/BrushButton.tscn
index 0b278e1be..5e9ea796a 100644
--- a/src/UI/Buttons/BrushButton.tscn
+++ b/src/UI/Buttons/BrushButton.tscn
@@ -21,7 +21,7 @@ offset_right = -2.0
 offset_bottom = -2.0
 pivot_offset = Vector2(16, 16)
 expand_mode = 1
-stretch_mode = 6
+stretch_mode = 5
 
 [node name="TransparentChecker" parent="BrushTexture" instance=ExtResource("1")]
 show_behind_parent = true
diff --git a/src/UI/Buttons/BrushesPopup.gd b/src/UI/Buttons/BrushesPopup.gd
index 426f5710b..4986adb60 100644
--- a/src/UI/Buttons/BrushesPopup.gd
+++ b/src/UI/Buttons/BrushesPopup.gd
@@ -96,6 +96,7 @@ static func clear_project_brush() -> void:
 		"Background/Brushes/Categories/ProjectBrushContainer"
 	)
 	for child in container.get_children():
+		container.remove_child(child)
 		child.queue_free()
 		Global.brushes_popup.brush_removed.emit(child.brush)
 
diff --git a/src/UI/Buttons/PatternButton.tscn b/src/UI/Buttons/PatternButton.tscn
index 5b3550209..e63ca0cd8 100644
--- a/src/UI/Buttons/PatternButton.tscn
+++ b/src/UI/Buttons/PatternButton.tscn
@@ -1,19 +1,19 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://bx6xntkb2tstx"]
 
-[ext_resource path="res://src/UI/Buttons/PatternButton.gd" type="Script" id=2]
+[ext_resource type="Script" path="res://src/UI/Buttons/PatternButton.gd" id="2"]
 
-[sub_resource type="StyleBoxFlat" id=2]
-bg_color = Color( 1, 1, 1, 1 )
-border_color = Color( 1, 1, 1, 1 )
+[sub_resource type="StyleBoxFlat" id="1"]
+bg_color = Color(1, 1, 1, 1)
+border_color = Color(1, 1, 1, 1)
 corner_radius_top_left = 5
 corner_radius_top_right = 5
 corner_radius_bottom_right = 5
 corner_radius_bottom_left = 5
 anti_aliasing = false
 
-[sub_resource type="StyleBoxFlat" id=1]
-bg_color = Color( 1, 1, 1, 1 )
-border_color = Color( 1, 1, 1, 1 )
+[sub_resource type="StyleBoxFlat" id="2"]
+bg_color = Color(1, 1, 1, 1)
+border_color = Color(1, 1, 1, 1)
 corner_radius_top_left = 5
 corner_radius_top_right = 5
 corner_radius_bottom_right = 5
@@ -21,25 +21,23 @@ corner_radius_bottom_left = 5
 anti_aliasing = false
 
 [node name="PatternButton" type="Button"]
+custom_minimum_size = Vector2(32, 32)
 offset_right = 32.0
 offset_bottom = 32.0
-custom_minimum_size = Vector2( 32, 32 )
-theme_override_styles/hover = SubResource( 2 )
-theme_override_styles/pressed = SubResource( 2 )
-theme_override_styles/focus = SubResource( 1 )
-theme_override_styles/disabled = SubResource( 1 )
-theme_override_styles/normal = SubResource( 2 )
+theme_override_styles/focus = SubResource("1")
+theme_override_styles/disabled = SubResource("1")
+theme_override_styles/hover = SubResource("2")
+theme_override_styles/pressed = SubResource("2")
+theme_override_styles/normal = SubResource("2")
 button_mask = 7
-script = ExtResource( 2 )
+script = ExtResource("2")
 
 [node name="PatternTexture" type="TextureRect" parent="."]
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 0
 offset_right = 32.0
 offset_bottom = 32.0
-custom_minimum_size = Vector2( 32, 32 )
-expand = true
-stretch_mode = 6
-__meta__ = {
-"_edit_use_anchors_": false
-}
+expand_mode = 1
+stretch_mode = 5
 
 [connection signal="pressed" from="." to="." method="_on_PatternButton_pressed"]
diff --git a/src/UI/Canvas/Canvas.gd b/src/UI/Canvas/Canvas.gd
index 9b5891ee0..f97e3ff15 100644
--- a/src/UI/Canvas/Canvas.gd
+++ b/src/UI/Canvas/Canvas.gd
@@ -17,7 +17,7 @@ var layer_metadata_texture := ImageTexture.new()
 @onready var tile_mode := $TileMode as Node2D
 @onready var pixel_grid := $PixelGrid as Node2D
 @onready var grid := $Grid as Node2D
-@onready var selection := $Selection as Node2D
+@onready var selection := $Selection as SelectionNode
 @onready var onion_past := $OnionPast as Node2D
 @onready var onion_future := $OnionFuture as Node2D
 @onready var crop_rect := $CropRect as CropRect
@@ -33,7 +33,11 @@ var layer_metadata_texture := ImageTexture.new()
 func _ready() -> void:
 	material.set_shader_parameter("layers", layer_texture_array)
 	material.set_shader_parameter("metadata", layer_metadata_texture)
-	Global.project_switched.connect(func(): project_changed = true ; queue_redraw())
+	Global.project_switched.connect(
+		func():
+			project_changed = true
+			queue_redraw()
+	)
 	onion_past.type = onion_past.PAST
 	onion_past.blue_red_color = Global.onion_skinning_past_color
 	onion_future.type = onion_future.FUTURE
@@ -98,9 +102,8 @@ func _input(event: InputEvent) -> void:
 
 
 func camera_zoom() -> void:
-	for camera in Global.cameras:
+	for camera: CanvasCamera in get_tree().get_nodes_in_group("CanvasCameras"):
 		camera.fit_to_frame(Global.current_project.size)
-		camera.save_values_to_project()
 
 	Global.transparent_checker.update_rect()
 
@@ -117,17 +120,22 @@ func update_texture(layer_i: int, frame_i := -1, project := Global.current_proje
 		if frame_i != project.current_frame:
 			# Don't update if the cel is on a different frame (can happen with undo/redo)
 			return
-		var layer := project.layers[layer_i]
+		var layer := project.layers[layer_i].get_blender_ancestor()
 		var cel_image: Image
-		if Global.display_layer_effects:
-			cel_image = layer.display_effects(current_cel)
+		if layer is GroupLayer:
+			cel_image = layer.blend_children(
+				project.frames[project.current_frame], Vector2i.ZERO, Global.display_layer_effects
+			)
 		else:
-			cel_image = current_cel.get_image()
+			if Global.display_layer_effects:
+				cel_image = layer.display_effects(current_cel)
+			else:
+				cel_image = current_cel.get_image()
 		if (
 			cel_image.get_size()
 			== Vector2i(layer_texture_array.get_width(), layer_texture_array.get_height())
 		):
-			layer_texture_array.update_layer(cel_image, project.ordered_layers[layer_i])
+			layer_texture_array.update_layer(cel_image, project.ordered_layers[layer.index])
 
 
 func update_selected_cels_textures(project := Global.current_project) -> void:
@@ -141,7 +149,6 @@ func update_selected_cels_textures(project := Global.current_project) -> void:
 
 func draw_layers(force_recreate := false) -> void:
 	var project := Global.current_project
-	var current_cels := project.frames[project.current_frame].cels
 	var recreate_texture_array := (
 		layer_texture_array.get_layers() != project.layers.size()
 		or layer_texture_array.get_width() != project.size.x
@@ -154,19 +161,14 @@ func draw_layers(force_recreate := false) -> void:
 		# Nx4 texture, where N is the number of layers and the first row are the blend modes,
 		# the second are the opacities, the third are the origins and the fourth are the
 		# clipping mask booleans.
-		layer_metadata_image = Image.create(project.layers.size(), 4, false, Image.FORMAT_RG8)
+		layer_metadata_image = Image.create(project.layers.size(), 4, false, Image.FORMAT_RGF)
 		# Draw current frame layers
 		for i in project.layers.size():
-			var ordered_index := project.ordered_layers[i]
 			var layer := project.layers[i]
-			var cel := current_cels[i]
-			var cel_image: Image
-			if Global.display_layer_effects:
-				cel_image = layer.display_effects(cel)
-			else:
-				cel_image = cel.get_image()
+			var ordered_index := project.ordered_layers[layer.index]
+			var cel_image := Image.new()
+			_update_texture_array_layer(project, layer, cel_image, false)
 			textures[ordered_index] = cel_image
-			DrawingAlgos.set_layer_metadata_image(layer, cel, layer_metadata_image, ordered_index)
 			# Store the origin
 			if [project.current_frame, i] in project.selected_cels:
 				var origin := Vector2(move_preview_location).abs() / Vector2(cel_image.get_size())
@@ -185,18 +187,14 @@ func draw_layers(force_recreate := false) -> void:
 					var test_array := [project.current_frame, i]
 					if not test_array in project.selected_cels:
 						continue
-				var ordered_index := project.ordered_layers[i]
 				var layer := project.layers[i]
-				var cel := current_cels[i]
-				var cel_image: Image
-				if Global.display_layer_effects:
-					cel_image = layer.display_effects(cel)
-				else:
-					cel_image = cel.get_image()
-				layer_texture_array.update_layer(cel_image, ordered_index)
-				DrawingAlgos.set_layer_metadata_image(
-					layer, cel, layer_metadata_image, ordered_index
-				)
+				var ordered_index := project.ordered_layers[layer.index]
+				var cel_image := Image.new()
+				_update_texture_array_layer(project, layer, cel_image, true)
+				var parent_layer := layer.get_blender_ancestor()
+				if layer != parent_layer:
+					# True when the layer has parents. In that case, update its top-most parent.
+					_update_texture_array_layer(project, parent_layer, Image.new(), true)
 				# Update the origin
 				var origin := Vector2(move_preview_location).abs() / Vector2(cel_image.get_size())
 				layer_metadata_image.set_pixel(
@@ -209,6 +207,32 @@ func draw_layers(force_recreate := false) -> void:
 	update_all_layers = false
 
 
+func _update_texture_array_layer(
+	project: Project, layer: BaseLayer, cel_image: Image, update_layer: bool
+) -> void:
+	var ordered_index := project.ordered_layers[layer.index]
+	var cel := project.frames[project.current_frame].cels[layer.index]
+	var include := true
+	if layer is GroupLayer and layer.blend_mode != BaseLayer.BlendModes.PASS_THROUGH:
+		cel_image.copy_from(
+			layer.blend_children(
+				project.frames[project.current_frame],
+				move_preview_location,
+				Global.display_layer_effects
+			)
+		)
+	else:
+		if Global.display_layer_effects:
+			cel_image.copy_from(layer.display_effects(cel))
+		else:
+			cel_image.copy_from(cel.get_image())
+	if layer.is_blended_by_ancestor():
+		include = false
+	if update_layer:
+		layer_texture_array.update_layer(cel_image, ordered_index)
+	DrawingAlgos.set_layer_metadata_image(layer, cel, layer_metadata_image, ordered_index, include)
+
+
 func refresh_onion() -> void:
 	onion_past.queue_redraw()
 	onion_future.queue_redraw()
diff --git a/src/UI/Canvas/Canvas.tscn b/src/UI/Canvas/Canvas.tscn
index 1f7f66329..9078617b4 100644
--- a/src/UI/Canvas/Canvas.tscn
+++ b/src/UI/Canvas/Canvas.tscn
@@ -87,10 +87,10 @@ script = ExtResource("7")
 material = SubResource("3")
 centered = false
 
-[node name="OnionPast" type="Node2D" parent="."]
+[node name="OnionPast" type="Node2D" parent="." groups=["canvas_onion_skinning"]]
 script = ExtResource("12")
 
-[node name="OnionFuture" type="Node2D" parent="."]
+[node name="OnionFuture" type="Node2D" parent="." groups=["canvas_onion_skinning"]]
 script = ExtResource("12")
 
 [node name="MouseGuideContainer" parent="." instance=ExtResource("11")]
diff --git a/src/UI/Canvas/CanvasCamera.gd b/src/UI/Canvas/CanvasCamera.gd
index 89a4b8130..19465324f 100644
--- a/src/UI/Canvas/CanvasCamera.gd
+++ b/src/UI/Canvas/CanvasCamera.gd
@@ -14,18 +14,21 @@ const CAMERA_SPEED_RATE := 15.0
 var zoom := Vector2.ONE:
 	set(value):
 		zoom = value
+		Global.current_project.cameras_zoom[index] = zoom
 		zoom_changed.emit()
 		_update_viewport_transform()
 var camera_angle := 0.0:
 	set(value):
 		camera_angle = wrapf(value, -PI, PI)
 		camera_angle_degrees = rad_to_deg(camera_angle)
+		Global.current_project.cameras_rotation[index] = camera_angle
 		rotation_changed.emit()
 		_update_viewport_transform()
 var camera_angle_degrees := 0.0
 var offset := Vector2.ZERO:
 	set(value):
 		offset = value
+		Global.current_project.cameras_offset[index] = offset
 		offset_changed.emit()
 		_update_viewport_transform()
 var camera_screen_center := Vector2.ZERO
@@ -54,8 +57,8 @@ func _ready() -> void:
 		zoom_slider.value_changed.connect(_zoom_slider_value_changed)
 	zoom_changed.connect(_zoom_changed)
 	rotation_changed.connect(_rotation_changed)
-	viewport_container = get_parent().get_parent()
-	transparent_checker = get_parent().get_node("TransparentChecker")
+	viewport_container = get_viewport().get_parent()
+	transparent_checker = get_viewport().get_node("TransparentChecker")
 	update_transparent_checker_offset()
 
 
@@ -75,13 +78,14 @@ func _input(event: InputEvent) -> void:
 		zoom_camera(-1)
 
 	elif event is InputEventMagnifyGesture:  # Zoom gesture on touchscreens
-		if event.factor >= 1:  # Zoom in
-			zoom_camera(1)
+		#zoom_camera(event.factor)
+		if event.factor >= 1.0:  # Zoom in
+			zoom_camera(event.factor * 0.3)
 		else:  # Zoom out
-			zoom_camera(-1)
+			zoom_camera((event.factor * 0.7) - 1.0)
 	elif event is InputEventPanGesture:
 		# Pan gesture on touchscreens
-		offset = offset + event.delta.rotated(camera_angle) * 7.0 / zoom
+		offset = offset + event.delta.rotated(camera_angle) * 2.0 / zoom
 	elif event is InputEventMouseMotion:
 		if drag:
 			offset = offset - event.relative.rotated(camera_angle) / zoom
@@ -89,12 +93,10 @@ func _input(event: InputEvent) -> void:
 	else:
 		var dir := Input.get_vector(&"camera_left", &"camera_right", &"camera_up", &"camera_down")
 		if dir != Vector2.ZERO and !_has_selection_tool():
-			offset += (dir.rotated(camera_angle) / zoom) * CAMERA_SPEED_RATE
-
-	save_values_to_project()
+			offset = offset + (dir.rotated(camera_angle) / zoom) * CAMERA_SPEED_RATE
 
 
-func zoom_camera(dir: int) -> void:
+func zoom_camera(dir: float) -> void:
 	var viewport_size := viewport_container.size
 	if Global.smooth_zoom:
 		var zoom_margin := zoom * dir / 5
@@ -140,7 +142,13 @@ func zoom_100() -> void:
 
 
 func fit_to_frame(size: Vector2) -> void:
-	# temporarily disable integer zoom
+	viewport_container = get_viewport().get_parent()
+	var h_ratio := viewport_container.size.x / size.x
+	var v_ratio := viewport_container.size.y / size.y
+	var ratio := minf(h_ratio, v_ratio)
+	if ratio == 0 or !viewport_container.visible:
+		return
+	# Temporarily disable integer zoom.
 	var reset_integer_zoom := Global.integer_zoom
 	if reset_integer_zoom:
 		Global.integer_zoom = !Global.integer_zoom
@@ -148,45 +156,22 @@ func fit_to_frame(size: Vector2) -> void:
 
 	# Adjust to the rotated size:
 	if camera_angle != 0.0:
-		# Calculating the rotated corners of the frame to find its rotated size
+		# Calculating the rotated corners of the frame to find its rotated size.
 		var a := Vector2.ZERO  # Top left
-		var b := Vector2(size.x, 0).rotated(camera_angle)  # Top right
-		var c := Vector2(0, size.y).rotated(camera_angle)  # Bottom left
-		var d := Vector2(size.x, size.y).rotated(camera_angle)  # Bottom right
+		var b := Vector2(size.x, 0).rotated(camera_angle)  # Top right.
+		var c := Vector2(0, size.y).rotated(camera_angle)  # Bottom left.
+		var d := Vector2(size.x, size.y).rotated(camera_angle)  # Bottom right.
 
-		# Find how far apart each opposite point is on each axis, and take the longer one
+		# Find how far apart each opposite point is on each axis, and take the longer one.
 		size.x = maxf(absf(a.x - d.x), absf(b.x - c.x))
 		size.y = maxf(absf(a.y - d.y), absf(b.y - c.y))
 
-	viewport_container = get_parent().get_parent()
-	var h_ratio := viewport_container.size.x / size.x
-	var v_ratio := viewport_container.size.y / size.y
-	var ratio := minf(h_ratio, v_ratio)
-	if ratio == 0 or !viewport_container.visible:
-		ratio = 0.1  # Set it to a non-zero value just in case
-		# If the ratio is 0, it means that the viewport container is hidden
-		# in that case, use the other viewport to get the ratio
-		if index == Cameras.MAIN:
-			h_ratio = Global.second_viewport.size.x / size.x
-			v_ratio = Global.second_viewport.size.y / size.y
-			ratio = minf(h_ratio, v_ratio)
-		elif index == Cameras.SECOND:
-			h_ratio = Global.main_viewport.size.x / size.x
-			v_ratio = Global.main_viewport.size.y / size.y
-			ratio = minf(h_ratio, v_ratio)
-
 	ratio = clampf(ratio, 0.1, ratio)
 	zoom = Vector2(ratio, ratio)
 	if reset_integer_zoom:
 		Global.integer_zoom = !Global.integer_zoom
 
 
-func save_values_to_project() -> void:
-	Global.current_project.cameras_rotation[index] = camera_angle
-	Global.current_project.cameras_zoom[index] = zoom
-	Global.current_project.cameras_offset[index] = offset
-
-
 func update_transparent_checker_offset() -> void:
 	var o := get_global_transform_with_canvas().get_origin()
 	var s := get_global_transform_with_canvas().get_scale()
@@ -256,9 +241,9 @@ func _has_selection_tool() -> bool:
 
 
 func _project_switched() -> void:
+	offset = Global.current_project.cameras_offset[index]
 	camera_angle = Global.current_project.cameras_rotation[index]
 	zoom = Global.current_project.cameras_zoom[index]
-	offset = Global.current_project.cameras_offset[index]
 
 
 func _rotate_camera_around_point(degrees: float, point: Vector2) -> void:
diff --git a/src/UI/Canvas/CanvasPreview.gd b/src/UI/Canvas/CanvasPreview.gd
index bcd85f74d..23f710efc 100644
--- a/src/UI/Canvas/CanvasPreview.gd
+++ b/src/UI/Canvas/CanvasPreview.gd
@@ -83,14 +83,17 @@ func _draw_layers() -> void:
 	# Draw current frame layers
 	for i in project.ordered_layers:
 		var cel := current_cels[i]
-		if current_cels[i] is GroupCel:
-			continue
 		var layer := project.layers[i]
 		var cel_image: Image
-		if Global.display_layer_effects:
-			cel_image = layer.display_effects(cel)
+		if layer is GroupLayer and layer.blend_mode != BaseLayer.BlendModes.PASS_THROUGH:
+			cel_image = layer.blend_children(
+				current_frame, Vector2i.ZERO, Global.display_layer_effects
+			)
 		else:
-			cel_image = cel.get_image()
+			if Global.display_layer_effects:
+				cel_image = layer.display_effects(cel)
+			else:
+				cel_image = cel.get_image()
 		textures.append(cel_image)
 		DrawingAlgos.set_layer_metadata_image(layer, cel, metadata_image, i)
 	var texture_array := Texture2DArray.new()
diff --git a/src/UI/Canvas/Gizmos3D.gd b/src/UI/Canvas/Gizmos3D.gd
index e6e2801c1..0106e4709 100644
--- a/src/UI/Canvas/Gizmos3D.gd
+++ b/src/UI/Canvas/Gizmos3D.gd
@@ -30,6 +30,8 @@ var gizmo_rot_x := PackedVector2Array()
 var gizmo_rot_y := PackedVector2Array()
 var gizmo_rot_z := PackedVector2Array()
 
+@onready var canvas := get_parent() as Canvas
+
 
 func _ready() -> void:
 	set_process_input(false)
@@ -188,13 +190,13 @@ func _draw() -> void:
 			# Draw bounding box outline
 			draw_multiline(points, selected_color, 0.5)
 			if object.applying_gizmos == Cel3DObject.Gizmos.X_ROT:
-				draw_line(gizmos_origin, Global.canvas.current_pixel, Color.RED)
+				draw_line(gizmos_origin, canvas.current_pixel, Color.RED)
 				continue
 			elif object.applying_gizmos == Cel3DObject.Gizmos.Y_ROT:
-				draw_line(gizmos_origin, Global.canvas.current_pixel, Color.GREEN)
+				draw_line(gizmos_origin, canvas.current_pixel, Color.GREEN)
 				continue
 			elif object.applying_gizmos == Cel3DObject.Gizmos.Z_ROT:
-				draw_line(gizmos_origin, Global.canvas.current_pixel, Color.BLUE)
+				draw_line(gizmos_origin, canvas.current_pixel, Color.BLUE)
 				continue
 			draw_set_transform(gizmos_origin, 0, draw_scale)
 			# Draw position arrows
diff --git a/src/UI/Canvas/Measurements.gd b/src/UI/Canvas/Measurements.gd
index ca8318859..86b7e43d9 100644
--- a/src/UI/Canvas/Measurements.gd
+++ b/src/UI/Canvas/Measurements.gd
@@ -8,6 +8,8 @@ var mode := Global.MeasurementMode.NONE
 var apparent_width: float = WIDTH
 var rect_bounds: Rect2i
 
+@onready var canvas := get_parent() as Canvas
+
 
 func _ready() -> void:
 	font = Themes.get_font()
@@ -34,10 +36,10 @@ func _input(_event: InputEvent) -> void:
 func _prepare_movement_rect() -> void:
 	var project := Global.current_project
 	if project.has_selection:
-		rect_bounds = Global.canvas.selection.preview_image.get_used_rect()
-		rect_bounds.position += Vector2i(Global.canvas.selection.big_bounding_rectangle.position)
+		rect_bounds = canvas.selection.preview_image.get_used_rect()
+		rect_bounds.position += Vector2i(canvas.selection.big_bounding_rectangle.position)
 		if !rect_bounds.has_area():
-			rect_bounds = Global.canvas.selection.big_bounding_rectangle
+			rect_bounds = canvas.selection.big_bounding_rectangle
 		return
 	if rect_bounds.has_area():
 		return
@@ -65,7 +67,7 @@ func _prepare_movement_rect() -> void:
 		else:
 			rect_bounds = rect_bounds.merge(used_rect)
 	if not rect_bounds.has_area():
-		rect_bounds = Rect2(Vector2.ZERO, project.size)
+		rect_bounds = Rect2i(Vector2i.ZERO, project.size)
 
 
 func _draw_move_measurement() -> void:
@@ -74,7 +76,7 @@ func _draw_move_measurement() -> void:
 	dashed_color.a = 0.5
 	# Draw boundary
 	var boundary := Rect2i(rect_bounds)
-	boundary.position += Global.canvas.move_preview_location
+	boundary.position += canvas.move_preview_location
 	draw_rect(boundary, line_color, false, apparent_width)
 	# calculate lines
 	var top := Vector2(boundary.get_center().x, boundary.position.y)
diff --git a/src/UI/Canvas/OnionSkinning.gd b/src/UI/Canvas/OnionSkinning.gd
index c03a8de4f..fec72a4ff 100644
--- a/src/UI/Canvas/OnionSkinning.gd
+++ b/src/UI/Canvas/OnionSkinning.gd
@@ -3,9 +3,12 @@ extends Node2D
 enum { PAST, FUTURE }
 
 var type := PAST
+var opacity := 0.6
 var blue_red_color := Color.BLUE
 var rate := Global.onion_skinning_past_rate
 
+@onready var canvas := get_parent() as Canvas
+
 
 func _draw() -> void:
 	var project := Global.current_project
@@ -33,11 +36,9 @@ func _draw() -> void:
 				if layer.is_visible_in_hierarchy():
 					# Ignore layer if it has the "_io" suffix in its name (case in-sensitive)
 					if not (layer.name.to_lower().ends_with("_io")):
-						color.a = 0.6 / i
+						color.a = opacity / i
 						if [change, layer_i] in project.selected_cels:
-							draw_texture(
-								cel.image_texture, Global.canvas.move_preview_location, color
-							)
+							draw_texture(cel.image_texture, canvas.move_preview_location, color)
 						else:
 							draw_texture(cel.image_texture, Vector2.ZERO, color)
 				layer_i += 1
diff --git a/src/UI/Canvas/Rulers/HorizontalRuler.gd b/src/UI/Canvas/Rulers/HorizontalRuler.gd
index e08ef25d2..b60ca19aa 100644
--- a/src/UI/Canvas/Rulers/HorizontalRuler.gd
+++ b/src/UI/Canvas/Rulers/HorizontalRuler.gd
@@ -8,6 +8,8 @@ var minor_subdivision := 4
 var first: Vector2
 var last: Vector2
 
+@onready var vertical_ruler := $"../ViewportandVerticalRuler/VerticalRuler" as Button
+
 
 func _ready() -> void:
 	Global.project_switched.connect(queue_redraw)
@@ -120,7 +122,7 @@ func create_guide() -> void:
 		return
 	var mouse_pos := get_local_mouse_position()
 	if mouse_pos.x < RULER_WIDTH:  # For double guides
-		Global.vertical_ruler.create_guide()
+		vertical_ruler.create_guide()
 	var guide := Guide.new()
 	if absf(Global.camera.rotation_degrees) < 45 or absf(Global.camera.rotation_degrees) > 135:
 		guide.type = guide.Types.HORIZONTAL
diff --git a/src/UI/Canvas/Rulers/SymmetryGuide.gd b/src/UI/Canvas/Rulers/SymmetryGuide.gd
index f4edb5155..39e9c374b 100644
--- a/src/UI/Canvas/Rulers/SymmetryGuide.gd
+++ b/src/UI/Canvas/Rulers/SymmetryGuide.gd
@@ -21,11 +21,11 @@ func _input(_event: InputEvent) -> void:
 	super._input(_event)
 	if type == Types.HORIZONTAL:
 		project.y_symmetry_point = points[0].y * 2 - 1
-		points[0].y = clampf(points[0].y, 0, Global.current_project.size.y)
-		points[1].y = clampf(points[1].y, 0, Global.current_project.size.y)
+		points[0].y = clampf(points[0].y, 0, project.size.y)
+		points[1].y = clampf(points[1].y, 0, project.size.y)
 	elif type == Types.VERTICAL:
-		points[0].x = clampf(points[0].x, 0, Global.current_project.size.x)
-		points[1].x = clampf(points[1].x, 0, Global.current_project.size.x)
+		points[0].x = clampf(points[0].x, 0, project.size.x)
+		points[1].x = clampf(points[1].x, 0, project.size.x)
 		project.x_symmetry_point = points[0].x * 2 - 1
 
 
diff --git a/src/UI/Canvas/Selection.gd b/src/UI/Canvas/Selection.gd
index 43c0b6254..3efe8268e 100644
--- a/src/UI/Canvas/Selection.gd
+++ b/src/UI/Canvas/Selection.gd
@@ -1,5 +1,8 @@
+class_name SelectionNode
 extends Node2D
 
+signal is_moving_content_changed
+
 enum SelectionOperation { ADD, SUBTRACT, INTERSECT }
 const KEY_MOVE_ACTION_NAMES: PackedStringArray = [&"ui_up", &"ui_down", &"ui_left", &"ui_right"]
 const CLIPBOARD_FILE_PATH := "user://clipboard.txt"
@@ -7,7 +10,10 @@ const CLIPBOARD_FILE_PATH := "user://clipboard.txt"
 # flags (additional properties of selection that can be toggled)
 var flag_tilemode := false
 
-var is_moving_content := false
+var is_moving_content := false:
+	set(value):
+		is_moving_content = value
+		is_moving_content_changed.emit()
 var arrow_key_move := false
 var is_pasting := false
 var big_bounding_rectangle := Rect2i():
@@ -43,7 +49,7 @@ var content_pivot := Vector2.ZERO
 var mouse_pos_on_gizmo_drag := Vector2.ZERO
 var resize_keep_ratio := false
 
-@onready var canvas: Canvas = get_parent()
+@onready var canvas := get_parent() as Canvas
 @onready var marching_ants_outline: Sprite2D = $MarchingAntsOutline
 
 
@@ -101,11 +107,10 @@ func _input(event: InputEvent) -> void:
 	if Global.mirror_view:
 		image_current_pixel.x = Global.current_project.size.x - image_current_pixel.x
 	if is_moving_content:
-		if Input.is_action_just_pressed("transformation_confirm"):
+		if Input.is_action_just_pressed(&"transformation_confirm"):
 			transform_content_confirm()
-		elif Input.is_action_just_pressed("transformation_cancel"):
+		elif Input.is_action_just_pressed(&"transformation_cancel"):
 			transform_content_cancel()
-
 	if not project.layers[project.current_layer].can_layer_get_drawn():
 		return
 	if event is InputEventKey:
@@ -393,7 +398,7 @@ func resize_selection() -> void:
 	)
 	Global.current_project.selection_map_changed()
 	queue_redraw()
-	Global.canvas.queue_redraw()
+	canvas.queue_redraw()
 
 
 func _gizmo_rotate() -> void:
@@ -461,7 +466,7 @@ func move_borders_end() -> void:
 	else:
 		Global.current_project.selection_map_changed()
 	queue_redraw()
-	Global.canvas.queue_redraw()
+	canvas.queue_redraw()
 
 
 func transform_content_start() -> void:
@@ -478,7 +483,7 @@ func transform_content_start() -> void:
 	original_big_bounding_rectangle = big_bounding_rectangle
 	original_offset = Global.current_project.selection_offset
 	queue_redraw()
-	Global.canvas.queue_redraw()
+	canvas.queue_redraw()
 
 
 func move_content(move: Vector2) -> void:
@@ -522,7 +527,7 @@ func transform_content_confirm() -> void:
 	angle = 0.0
 	content_pivot = Vector2.ZERO
 	queue_redraw()
-	Global.canvas.queue_redraw()
+	canvas.queue_redraw()
 
 
 func transform_content_cancel() -> void:
@@ -555,7 +560,7 @@ func transform_content_cancel() -> void:
 	angle = 0.0
 	content_pivot = Vector2.ZERO
 	queue_redraw()
-	Global.canvas.queue_redraw()
+	canvas.queue_redraw()
 
 
 func commit_undo(action: String, undo_data_tmp: Dictionary) -> void:
@@ -736,9 +741,9 @@ func paste(in_place := false) -> void:
 
 	var clip_map := SelectionMap.new()
 	clip_map.data = clipboard.selection_map
-	var max_size := Vector2(
-		max(clip_map.get_size().x, project.selection_map.get_size().x),
-		max(clip_map.get_size().y, project.selection_map.get_size().y)
+	var max_size := Vector2i(
+		maxi(clip_map.get_size().x, project.selection_map.get_size().x),
+		maxi(clip_map.get_size().y, project.selection_map.get_size().y)
 	)
 
 	project.selection_map.copy_from(clip_map)
diff --git a/src/UI/Canvas/TileMode.gd b/src/UI/Canvas/TileMode.gd
index 316f2eeca..cca70fa61 100644
--- a/src/UI/Canvas/TileMode.gd
+++ b/src/UI/Canvas/TileMode.gd
@@ -3,6 +3,8 @@ extends Node2D
 var tiles: Tiles
 var draw_center := false
 
+@onready var canvas := Global.canvas
+
 
 func _draw() -> void:
 	var positions := get_tile_positions()
@@ -16,7 +18,7 @@ func _draw() -> void:
 	var modulate_color := Color(
 		tilemode_opacity, tilemode_opacity, tilemode_opacity, tilemode_opacity
 	)  # premultiply alpha blending is applied
-	var current_frame_texture: Texture2D = Global.canvas.currently_visible_frame.get_texture()
+	var current_frame_texture := canvas.currently_visible_frame.get_texture()
 	for pos in positions:
 		draw_texture(current_frame_texture, pos, modulate_color)
 
diff --git a/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.gd b/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.gd
index cf8152770..83f718e79 100644
--- a/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.gd
+++ b/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.gd
@@ -18,7 +18,6 @@ func _zoom_changed() -> void:
 
 func _on_PreviewZoomSlider_value_changed(value: float) -> void:
 	camera.zoom = Vector2(value, value)
-	camera.save_values_to_project()
 	camera.update_transparent_checker_offset()
 
 
diff --git a/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn b/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn
index 715a8e54e..1bc02c895 100644
--- a/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn
+++ b/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn
@@ -74,10 +74,10 @@ render_target_update_mode = 4
 material = SubResource("1")
 anchors_preset = 0
 
-[node name="CanvasPreview" parent="VBox/HBox/PreviewViewportContainer/SubViewport" instance=ExtResource("5")]
+[node name="CanvasPreview" parent="VBox/HBox/PreviewViewportContainer/SubViewport" groups=["CanvasPreviews"] instance=ExtResource("5")]
 unique_name_in_owner = true
 
-[node name="CameraPreview" type="Node2D" parent="VBox/HBox/PreviewViewportContainer/SubViewport"]
+[node name="CameraPreview" type="Node2D" parent="VBox/HBox/PreviewViewportContainer/SubViewport" groups=["CanvasCameras"]]
 unique_name_in_owner = true
 script = ExtResource("5_ge2km")
 index = 2
@@ -122,10 +122,9 @@ layout_mode = 2
 size_flags_horizontal = 3
 mouse_default_cursor_shape = 2
 clip_text = true
-item_count = 2
 selected = 0
+item_count = 2
 popup/item_0/text = "All frames"
-popup/item_0/id = 0
 popup/item_1/text = "Current frame as spritesheet"
 popup/item_1/id = 1
 
diff --git a/src/UI/ColorPickers/ColorPicker.gd b/src/UI/ColorPickers/ColorPicker.gd
index ba55f7e72..0a9599763 100644
--- a/src/UI/ColorPickers/ColorPicker.gd
+++ b/src/UI/ColorPickers/ColorPicker.gd
@@ -21,11 +21,9 @@ var color_sliders_vbox: VBoxContainer
 
 
 func _ready() -> void:
+	Tools.options_reset.connect(reset_options)
 	Tools.color_changed.connect(update_color)
 	_average(left_color_rect.color, right_color_rect.color)
-	expand_button.button_pressed = Global.config_cache.get_value(
-		"color_picker", "is_expanded", false
-	)
 	color_picker.color_mode = Global.config_cache.get_value(
 		"color_picker", "color_mode", ColorPicker.MODE_RGB
 	)
@@ -85,6 +83,10 @@ func _ready() -> void:
 	picker_vbox_container.add_child(expand_button)
 	picker_vbox_container.move_child(expand_button, 2)
 
+	expand_button.button_pressed = Global.config_cache.get_value(
+		"color_picker", "is_expanded", false
+	)
+
 
 func _notification(what: int) -> void:
 	if what == NOTIFICATION_THEME_CHANGED and is_instance_valid(hsv_rectangle_control):
@@ -97,6 +99,12 @@ func _notification(what: int) -> void:
 
 
 func _on_color_picker_color_changed(color: Color) -> void:
+	# Due to the decimal nature of the color values, some values get rounded off
+	# unintentionally before entering this method.
+	# Even though the decimal values change, the HTML code remains the same after the change.
+	# So we're using this trick to convert the values back to how they are shown in
+	# the color picker's UI.
+	color = Color(color.to_html())
 	if Tools.picking_color_for == MOUSE_BUTTON_RIGHT:
 		right_color_rect.color = color
 	else:
@@ -114,6 +122,12 @@ func _on_left_color_button_toggled(toggled_on: bool) -> void:
 	_average(left_color_rect.color, right_color_rect.color)
 
 
+func reset_options() -> void:
+	color_picker.color_mode = ColorPicker.MODE_RGB
+	color_picker.picker_shape = ColorPicker.SHAPE_HSV_RECTANGLE
+	expand_button.button_pressed = false
+
+
 func update_color(color: Color, button: int) -> void:
 	if Tools.picking_color_for == button:
 		color_picker.color = color
diff --git a/src/UI/Dialogs/AboutDialog.gd b/src/UI/Dialogs/AboutDialog.gd
index 9e04874ac..a7864e078 100644
--- a/src/UI/Dialogs/AboutDialog.gd
+++ b/src/UI/Dialogs/AboutDialog.gd
@@ -5,6 +5,7 @@ const AUTHORS: PackedStringArray = [
 	"Aaron Franke (aaronfranke)",
 	"AbhinavKDev (abhinav3967)",
 	"Álex Román Núñez (EIREXE)",
+	"alikin12",
 	"AlphinAlbukhari",
 	"Anaminus",
 	"Andreev Andrei",
@@ -19,10 +20,12 @@ const AUTHORS: PackedStringArray = [
 	"Darshan Phaldesai (luiq54)",
 	"dasimonde",
 	"Dávid Gábor BODOR (dragonfi)",
+	"donte5405",
 	"Fayez Akhtar (Variable)",
 	"Gamespleasure",
 	"GrantMoyer",
 	"gschwind",
+	"Hamster5295",
 	"Haoyu Qiu (timothyqiu)",
 	"Hugo Locurcio (Calinou)",
 	"huskee",
@@ -38,6 +41,7 @@ const AUTHORS: PackedStringArray = [
 	"kleonc",
 	"Laurenz Reinthaler (Schweini07)",
 	"Marco Galli (Gaarco)",
+	"Mariano Semelman (msemelman)",
 	"Marquis Kurt (alicerunsonfedora)",
 	"Martin Novák (novhack)",
 	"Martin Zabinski (Martin1991zab)",
@@ -56,6 +60,7 @@ const AUTHORS: PackedStringArray = [
 	"Subhang Nanduri (SbNanduri)",
 	"TheLsbt",
 	"THWLF",
+	"Vaibhav Kubre (kubre)",
 	"Vriska Weaver (henlo-birb)",
 ]
 
@@ -76,10 +81,13 @@ const TRANSLATORS_DICTIONARY := {
 	"Nicolas.C (nico57c)": ["French"],
 	"EGuillemot": ["French"],
 	"Roroto Sic (Roroto_Sic)": ["French"],
+	"ninjdai": ["French"],
+	"celeste tollec (celeste73-t)": ["French"],
 	"Schweini07": ["German"],
 	"Martin Zabinski (Martin1991zab)": ["German"],
 	"Manuel (DrMoebyus)": ["German"],
 	"Dominik K. (mezotv)": ["German"],
+	"alikin12": ["German"],
 	"Dawid Niedźwiedzki (tiritto)": ["Polish"],
 	"Serhiy Dmytryshyn (dies)": ["Polish"],
 	"Igor Santarek (jegor377)": ["Polish"],
@@ -104,13 +112,14 @@ const TRANSLATORS_DICTIONARY := {
 	"Geraldo PMJ (geraldopmj)": ["Brazilian Portuguese"],
 	"snorring_parrot": ["Brazilian Portuguese"],
 	"iLeonardito (iLeoww)": ["Brazilian Portuguese"],
+	"Heliana Moreira (helimoreira)": ["Brazilian Portuguese"],
 	"Andreev Andrei": ["Russian"],
 	"ax trifonov (ax34)": ["Russian"],
 	"Artem (blinovartem)": ["Russian"],
 	"Иван Соколов (SokoL1337)": ["Russian"],
 	"Daniil Belyakov (ermegil)": ["Russian"],
-	"pincetgore": ["Russian"],
 	"Elijah Fronzak (pincetgore)": ["Russian"],
+	"toxidcheckery": ["Russian"],
 	"stomleny_cmok": ["Russian", "Ukrainian"],
 	"Bohdan Matviiv (BodaMat)": ["Ukrainian"],
 	"Ruslan Hryschuk (kifflow)": ["Ukrainian"],
@@ -131,6 +140,7 @@ const TRANSLATORS_DICTIONARY := {
 	"Marco Galli (Gaarco)": ["Italian"],
 	"StarFang208": ["Italian"],
 	"Damiano Guida (damiano.guida22)": ["Italian"],
+	"albano battistella (albanobattistella)": ["Italian"],
 	"Azagaya VJ (azagaya.games)": ["Spanish"],
 	"Lilly And (KatieAnd)": ["Spanish"],
 	"UncleFangs": ["Spanish"],
@@ -147,6 +157,7 @@ const TRANSLATORS_DICTIONARY := {
 	"Quetzalcoutl (QuetzalcoutlDev)": ["Spanish"],
 	"Santiago (Zhamty)": ["Spanish"],
 	"Jesus Lavado (jess_lav)": ["Spanish"],
+	"Alejandro Moctezuma (AlejandroMoc)": ["Spanish"],
 	"Seifer23": ["Catalan"],
 	"Joel García Cascalló (jocsencat)": ["Catalan"],
 	"Agnis Aldiņš (NeZvers)": ["Latvian"],
@@ -217,15 +228,20 @@ const DONORS: PackedStringArray = [
 @onready var donors_container := $AboutUI/Credits/Donors as VBoxContainer
 @onready var translators_container := $AboutUI/Credits/Translators as VBoxContainer
 @onready var licenses_container := $AboutUI/Credits/Licenses as VBoxContainer
-
 @onready var authors := $AboutUI/Credits/Authors/AuthorTree as Tree
 @onready var donors := $AboutUI/Credits/Donors/DonorTree as Tree
 @onready var translators := $AboutUI/Credits/Translators/TranslatorTree as Tree
 @onready var license_tabs := $AboutUI/Credits/Licenses/LicenseTabs as TabBar
 @onready var license_text := $AboutUI/Credits/Licenses/LicenseText as TextEdit
+@onready var pixelorama_slogan := (
+	$AboutUI/IconsButtons/SloganAndLinks/VBoxContainer/PixeloramaSlogan as Label
+)
+@onready var copyright_label := $AboutUI/Copyright as Label
 
 
 func _ready() -> void:
+	pixelorama_slogan.label_settings.font_color = get_theme_color(&"font_color", &"Label")
+	copyright_label.label_settings.font_color = get_theme_color(&"font_color", &"Label")
 	create_donors()
 	license_tabs.add_tab("Pixelorama")
 	license_tabs.add_tab("Godot")
@@ -242,6 +258,14 @@ func _ready() -> void:
 	license_text.text = licenses[0]
 
 
+func _notification(what: int) -> void:
+	if not is_instance_valid(pixelorama_slogan):
+		return
+	if what == NOTIFICATION_THEME_CHANGED:
+		pixelorama_slogan.label_settings.font_color = get_theme_color(&"font_color", &"Label")
+		copyright_label.label_settings.font_color = get_theme_color(&"font_color", &"Label")
+
+
 func _on_AboutDialog_about_to_show() -> void:
 	title = tr("About Pixelorama") + " " + Global.current_version
 
diff --git a/src/UI/Dialogs/AboutDialog.tscn b/src/UI/Dialogs/AboutDialog.tscn
index 1aba4e8e5..70f04645f 100644
--- a/src/UI/Dialogs/AboutDialog.tscn
+++ b/src/UI/Dialogs/AboutDialog.tscn
@@ -1,12 +1,17 @@
-[gd_scene load_steps=7 format=3 uid="uid://w1v6plnv6ppt"]
+[gd_scene load_steps=8 format=3 uid="uid://w1v6plnv6ppt"]
 
 [ext_resource type="Script" path="res://src/UI/Dialogs/AboutDialog.gd" id="1"]
 [ext_resource type="Texture2D" uid="uid://b47r0c6auaqk6" path="res://assets/graphics/icons/icon.png" id="2"]
-[ext_resource type="FontFile" uid="uid://cy5lkye8vdr5t" path="res://assets/fonts/Roboto-Italic.ttf" id="3_jqhhb"]
+[ext_resource type="FontFile" uid="uid://cvc4lelf6hl7x" path="res://assets/fonts/Roboto-Regular.ttf" id="3_fj1id"]
 [ext_resource type="Texture2D" uid="uid://s25pa611bpvj" path="res://assets/graphics/splash_screen/orama_64x64.png" id="4"]
 
+[sub_resource type="FontVariation" id="FontVariation_dy14o"]
+base_font = ExtResource("3_fj1id")
+variation_transform = Transform2D(1, 0.2, 0, 1, 0, 0)
+spacing_space = -1
+
 [sub_resource type="LabelSettings" id="LabelSettings_bkh2e"]
-font = ExtResource("3_jqhhb")
+font = SubResource("FontVariation_dy14o")
 
 [sub_resource type="LabelSettings" id="LabelSettings_aewb6"]
 font_size = 12
diff --git a/src/UI/Dialogs/ExportDialog.gd b/src/UI/Dialogs/ExportDialog.gd
index 0e0ad5047..7f952fee7 100644
--- a/src/UI/Dialogs/ExportDialog.gd
+++ b/src/UI/Dialogs/ExportDialog.gd
@@ -163,6 +163,7 @@ func create_preview_container() -> VBoxContainer:
 
 func create_preview_rect() -> TextureRect:
 	var preview := TextureRect.new()
+	preview.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
 	preview.size_flags_horizontal = Control.SIZE_EXPAND_FILL
 	preview.size_flags_vertical = Control.SIZE_EXPAND_FILL
 	preview.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
@@ -269,7 +270,7 @@ func set_export_progress_bar(value: float) -> void:
 	export_progress_bar.value = value
 
 
-func _on_ExportDialog_about_to_show() -> void:
+func _on_about_to_popup() -> void:
 	get_ok_button().text = "Export"
 	Global.canvas.selection.transform_content_confirm()
 	var project := Global.current_project
@@ -290,18 +291,19 @@ func _on_ExportDialog_about_to_show() -> void:
 	path_dialog_popup.current_dir = project.export_directory_path
 	file_line_edit.text = project.file_name
 	file_format_options.selected = project.file_format
+	Export.cache_blended_frames()
 	show_tab()
 
 	# Set the size of the preview checker
 	checker.size = checker.get_parent().size
 
 
-func _on_Tabs_tab_clicked(tab: Export.ExportTab) -> void:
+func _on_tab_bar_tab_clicked(tab: Export.ExportTab) -> void:
 	Export.current_tab = tab
 	show_tab()
 
 
-func _on_Orientation_item_selected(id: Export.Orientation) -> void:
+func _on_orientation_item_selected(id: Export.Orientation) -> void:
 	Export.orientation = id
 	_handle_orientation_ui()
 	spritesheet_lines_count.value = Export.frames_divided_by_spritesheet_lines()
@@ -324,14 +326,14 @@ func _handle_orientation_ui() -> void:
 		spritesheet_lines_count.visible = false
 
 
-func _on_LinesCount_value_changed(value: float) -> void:
+func _on_lines_count_value_changed(value: float) -> void:
 	Export.lines_count = value
 	Export.process_spritesheet()
 	update_dimensions_label()
 	set_preview()
 
 
-func _on_Direction_item_selected(id: Export.AnimationDirection) -> void:
+func _on_direction_item_selected(id: Export.AnimationDirection) -> void:
 	Export.direction = id
 	preview_current_frame = 0
 	Export.process_data()
@@ -339,30 +341,34 @@ func _on_Direction_item_selected(id: Export.AnimationDirection) -> void:
 	update_dimensions_label()
 
 
-func _on_Resize_value_changed(value: float) -> void:
+func _on_resize_value_changed(value: float) -> void:
 	Export.resize = value
 	update_dimensions_label()
 
 
-func _on_Interpolation_item_selected(id: Image.Interpolation) -> void:
+func _on_quality_value_changed(value: float) -> void:
+	Export.save_quality = value / 100.0
+
+
+func _on_interpolation_item_selected(id: Image.Interpolation) -> void:
 	Export.interpolation = id
 
 
-func _on_ExportDialog_confirmed() -> void:
+func _on_confirmed() -> void:
 	Global.current_project.export_overwrite = false
 	if await Export.export_processed_images(false, self, Global.current_project):
 		hide()
 
 
-func _on_PathButton_pressed() -> void:
+func _on_path_button_pressed() -> void:
 	path_dialog_popup.popup_centered()
 
 
-func _on_PathLineEdit_text_changed(new_text: String) -> void:
+func _on_path_line_edit_text_changed(new_text: String) -> void:
 	Global.current_project.export_directory_path = new_text
 
 
-func _on_FileLineEdit_text_changed(new_text: String) -> void:
+func _on_file_line_edit_text_changed(new_text: String) -> void:
 	Global.current_project.file_name = new_text
 
 
@@ -382,7 +388,7 @@ func _on_path_dialog_canceled() -> void:
 		show()
 
 
-func _on_FileFormat_item_selected(idx: int) -> void:
+func _on_file_format_item_selected(idx: int) -> void:
 	var id := file_format_options.get_item_id(idx) as Export.FileFormat
 	Global.current_project.file_format = id
 	if not Export.is_single_file_format():
@@ -392,18 +398,22 @@ func _on_FileFormat_item_selected(idx: int) -> void:
 	else:
 		get_tree().set_group("ExportMultipleFilesOptions", "disabled", true)
 		get_tree().set_group("ExportMultipleFilesEditableOptions", "editable", false)
+
+	var show_quality := id == Export.FileFormat.JPEG
+	%QualityLabel.visible = show_quality
+	%Quality.visible = show_quality
 	set_preview()
 
 
 ## Overwrite existing file
-func _on_FileExistsAlert_confirmed() -> void:
+func _on_file_exists_alert_confirmed() -> void:
 	file_exists_alert_popup.dialog_text = Export.file_exists_alert
 	Export.stop_export = false
 	resume_export_function.emit()
 
 
-func _on_FileExistsAlert_custom_action(action: String) -> void:
-	if action == "cancel":
+func _on_file_exists_alert_custom_action(action: StringName) -> void:
+	if action == &"cancel":
 		# Cancel export
 		file_exists_alert_popup.dialog_text = Export.file_exists_alert
 		Export.stop_export = true
@@ -411,7 +421,7 @@ func _on_FileExistsAlert_custom_action(action: String) -> void:
 		file_exists_alert_popup.hide()
 
 
-func _on_FrameTimer_timeout() -> void:
+func _on_frame_timer_timeout() -> void:
 	var preview_texture_rect: TextureRect = previews.get_node("PreviewContainer/Preview")
 	if not preview_texture_rect:
 		return
@@ -440,15 +450,27 @@ func _on_split_layers_toggled(toggled_on: bool) -> void:
 	set_preview()
 
 
-func _on_IncludeTagsInFilename_toggled(button_pressed: bool) -> void:
+func _on_include_tags_in_filename_toggled(button_pressed: bool) -> void:
 	Export.include_tag_in_filename = button_pressed
 
 
-func _on_MultipleAnimationsDirectories_toggled(button_pressed: bool) -> void:
+func _on_multiple_animations_directories_toggled(button_pressed: bool) -> void:
 	Export.new_dir_for_each_frame_tag = button_pressed
 
 
-func _on_Frames_item_selected(id: int) -> void:
+func _on_trim_images_toggled(toggled_on: bool) -> void:
+	Export.trim_images = toggled_on
+	Export.process_data()
+	set_preview()
+
+
+func _on_clip_images_selection_toggled(toggled_on: bool) -> void:
+	Export.erase_unselected_area = toggled_on
+	Export.process_data()
+	set_preview()
+
+
+func _on_frames_item_selected(id: int) -> void:
 	Export.frame_current_tag = id
 	Export.process_data()
 	set_preview()
@@ -456,11 +478,12 @@ func _on_Frames_item_selected(id: int) -> void:
 	spritesheet_lines_count.value = Export.lines_count
 
 
-func _on_Layers_item_selected(id: int) -> void:
+func _on_layers_item_selected(id: int) -> void:
 	Export.export_layers = id
+	Export.cache_blended_frames()
 	Export.process_data()
 	set_preview()
 
 
-func _on_SeparatorCharacter_text_changed(new_text: String) -> void:
+func _on_separator_character_text_changed(new_text: String) -> void:
 	Export.separator_character = new_text
diff --git a/src/UI/Dialogs/ExportDialog.tscn b/src/UI/Dialogs/ExportDialog.tscn
index 16458fcfe..0efa1bc9b 100644
--- a/src/UI/Dialogs/ExportDialog.tscn
+++ b/src/UI/Dialogs/ExportDialog.tscn
@@ -79,12 +79,11 @@ unique_name_in_owner = true
 layout_mode = 2
 size_flags_horizontal = 3
 mouse_default_cursor_shape = 2
-item_count = 4
 selected = 0
+item_count = 4
 popup/item_0/text = "Columns"
-popup/item_0/id = 1
 popup/item_1/text = "Rows"
-popup/item_1/id = 0
+popup/item_1/id = 1
 popup/item_2/text = "Tags by column"
 popup/item_2/id = 2
 popup/item_3/text = "Tags by row"
@@ -116,7 +115,6 @@ size_flags_horizontal = 3
 mouse_default_cursor_shape = 2
 item_count = 2
 popup/item_0/text = "All frames"
-popup/item_0/id = 0
 popup/item_1/text = "Selected frames"
 popup/item_1/id = 1
 
@@ -130,7 +128,6 @@ layout_mode = 2
 mouse_default_cursor_shape = 2
 item_count = 2
 popup/item_0/text = "Visible layers"
-popup/item_0/id = 0
 popup/item_1/text = "Selected layers"
 popup/item_1/id = 1
 
@@ -143,10 +140,9 @@ custom_minimum_size = Vector2(100, 0)
 layout_mode = 2
 size_flags_horizontal = 3
 mouse_default_cursor_shape = 2
-item_count = 3
 selected = 0
+item_count = 3
 popup/item_0/text = "Forward"
-popup/item_0/id = 0
 popup/item_1/text = "Backwards"
 popup/item_1/id = 1
 popup/item_2/text = "Ping-Pong"
@@ -167,6 +163,7 @@ min_value = 50.0
 max_value = 1000.0
 step = 50.0
 value = 100.0
+allow_greater = true
 nine_patch_stretch = true
 stretch_margin_left = 3
 stretch_margin_top = 3
@@ -176,6 +173,28 @@ script = ExtResource("4")
 suffix = "%"
 snap_step = 100.0
 
+[node name="QualityLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"]
+unique_name_in_owner = true
+visible = false
+custom_minimum_size = Vector2(30, 0)
+layout_mode = 2
+text = "Quality:"
+
+[node name="Quality" type="TextureProgressBar" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"]
+unique_name_in_owner = true
+visible = false
+layout_mode = 2
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
+value = 75.0
+nine_patch_stretch = true
+stretch_margin_left = 3
+stretch_margin_top = 3
+stretch_margin_right = 3
+stretch_margin_bottom = 3
+script = ExtResource("4")
+
 [node name="DimensionLabelText" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"]
 layout_mode = 2
 size_flags_horizontal = 3
@@ -255,10 +274,9 @@ unique_name_in_owner = true
 layout_mode = 2
 size_flags_horizontal = 3
 mouse_default_cursor_shape = 2
-item_count = 5
 selected = 0
+item_count = 5
 popup/item_0/text = "Nearest"
-popup/item_0/id = 0
 popup/item_1/text = "Bilinear"
 popup/item_1/id = 1
 popup/item_2/text = "Cubic"
@@ -301,6 +319,18 @@ tooltip_text = "Creates multiple files but every file is stored in different fol
 mouse_default_cursor_shape = 2
 text = "Create new folder for each frame tag"
 
+[node name="TrimImages" type="CheckBox" parent="VBoxContainer/VSplitContainer/VBoxContainer/AdvancedOptions/GridContainer" groups=["ExportImageOptions", "ExportMultipleFilesOptions"]]
+layout_mode = 2
+tooltip_text = "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible."
+mouse_default_cursor_shape = 2
+text = "Trim images"
+
+[node name="ClipSelection" type="CheckBox" parent="VBoxContainer/VSplitContainer/VBoxContainer/AdvancedOptions/GridContainer" groups=["ExportImageOptions"]]
+layout_mode = 2
+tooltip_text = "Only export content that is within the bounds of a selected area."
+mouse_default_cursor_shape = 2
+text = "Clip image content to selection"
+
 [node name="PathDialog" type="FileDialog" parent="." groups=["FileDialogs"]]
 mode = 2
 title = "Open a Directory"
@@ -335,27 +365,30 @@ size_flags_horizontal = 3
 
 [node name="FrameTimer" type="Timer" parent="."]
 
-[connection signal="about_to_popup" from="." to="." method="_on_ExportDialog_about_to_show"]
-[connection signal="confirmed" from="." to="." method="_on_ExportDialog_confirmed"]
-[connection signal="tab_clicked" from="VBoxContainer/TabBar" to="." method="_on_Tabs_tab_clicked"]
-[connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Orientation" to="." method="_on_Orientation_item_selected"]
-[connection signal="value_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/LinesCount" to="." method="_on_LinesCount_value_changed"]
-[connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Frames" to="." method="_on_Frames_item_selected"]
-[connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Layers" to="." method="_on_Layers_item_selected"]
-[connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Direction" to="." method="_on_Direction_item_selected"]
-[connection signal="value_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Resize" to="." method="_on_Resize_value_changed"]
-[connection signal="text_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/FilePath/PathLineEdit" to="." method="_on_PathLineEdit_text_changed"]
-[connection signal="pressed" from="VBoxContainer/VSplitContainer/VBoxContainer/FilePath/PathButton" to="." method="_on_PathButton_pressed"]
-[connection signal="text_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/FilePath/FileLineEdit" to="." method="_on_FileLineEdit_text_changed"]
-[connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/FilePath/FileFormat" to="." method="_on_FileFormat_item_selected"]
-[connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/AdvancedOptions/GridContainer/Interpolation" to="." method="_on_Interpolation_item_selected"]
-[connection signal="text_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/AdvancedOptions/GridContainer/SeparatorCharacter" to="." method="_on_SeparatorCharacter_text_changed"]
+[connection signal="about_to_popup" from="." to="." method="_on_about_to_popup"]
+[connection signal="confirmed" from="." to="." method="_on_confirmed"]
+[connection signal="tab_clicked" from="VBoxContainer/TabBar" to="." method="_on_tab_bar_tab_clicked"]
+[connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Orientation" to="." method="_on_orientation_item_selected"]
+[connection signal="value_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/LinesCount" to="." method="_on_lines_count_value_changed"]
+[connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Frames" to="." method="_on_frames_item_selected"]
+[connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Layers" to="." method="_on_layers_item_selected"]
+[connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Direction" to="." method="_on_direction_item_selected"]
+[connection signal="value_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Resize" to="." method="_on_resize_value_changed"]
+[connection signal="value_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Quality" to="." method="_on_quality_value_changed"]
+[connection signal="text_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/FilePath/PathLineEdit" to="." method="_on_path_line_edit_text_changed"]
+[connection signal="pressed" from="VBoxContainer/VSplitContainer/VBoxContainer/FilePath/PathButton" to="." method="_on_path_button_pressed"]
+[connection signal="text_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/FilePath/FileLineEdit" to="." method="_on_file_line_edit_text_changed"]
+[connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/FilePath/FileFormat" to="." method="_on_file_format_item_selected"]
+[connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/AdvancedOptions/GridContainer/Interpolation" to="." method="_on_interpolation_item_selected"]
+[connection signal="text_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/AdvancedOptions/GridContainer/SeparatorCharacter" to="." method="_on_separator_character_text_changed"]
 [connection signal="toggled" from="VBoxContainer/VSplitContainer/VBoxContainer/AdvancedOptions/GridContainer/ExportJSON" to="." method="_on_export_json_toggled"]
 [connection signal="toggled" from="VBoxContainer/VSplitContainer/VBoxContainer/AdvancedOptions/GridContainer/SplitLayers" to="." method="_on_split_layers_toggled"]
-[connection signal="toggled" from="VBoxContainer/VSplitContainer/VBoxContainer/AdvancedOptions/GridContainer/IncludeTagsInFilename" to="." method="_on_IncludeTagsInFilename_toggled"]
-[connection signal="toggled" from="VBoxContainer/VSplitContainer/VBoxContainer/AdvancedOptions/GridContainer/MultipleAnimationsDirectories" to="." method="_on_MultipleAnimationsDirectories_toggled"]
+[connection signal="toggled" from="VBoxContainer/VSplitContainer/VBoxContainer/AdvancedOptions/GridContainer/IncludeTagsInFilename" to="." method="_on_include_tags_in_filename_toggled"]
+[connection signal="toggled" from="VBoxContainer/VSplitContainer/VBoxContainer/AdvancedOptions/GridContainer/MultipleAnimationsDirectories" to="." method="_on_multiple_animations_directories_toggled"]
+[connection signal="toggled" from="VBoxContainer/VSplitContainer/VBoxContainer/AdvancedOptions/GridContainer/TrimImages" to="." method="_on_trim_images_toggled"]
+[connection signal="toggled" from="VBoxContainer/VSplitContainer/VBoxContainer/AdvancedOptions/GridContainer/ClipSelection" to="." method="_on_clip_images_selection_toggled"]
 [connection signal="canceled" from="PathDialog" to="." method="_on_path_dialog_canceled"]
 [connection signal="dir_selected" from="PathDialog" to="." method="_on_path_dialog_dir_selected"]
-[connection signal="confirmed" from="FileExistsAlert" to="." method="_on_FileExistsAlert_confirmed"]
-[connection signal="custom_action" from="FileExistsAlert" to="." method="_on_FileExistsAlert_custom_action"]
-[connection signal="timeout" from="FrameTimer" to="." method="_on_FrameTimer_timeout"]
+[connection signal="confirmed" from="FileExistsAlert" to="." method="_on_file_exists_alert_confirmed"]
+[connection signal="custom_action" from="FileExistsAlert" to="." method="_on_file_exists_alert_custom_action"]
+[connection signal="timeout" from="FrameTimer" to="." method="_on_frame_timer_timeout"]
diff --git a/src/UI/Dialogs/ImageEffects/GaussianBlur.gd b/src/UI/Dialogs/ImageEffects/GaussianBlur.gd
new file mode 100644
index 000000000..d30a5485f
--- /dev/null
+++ b/src/UI/Dialogs/ImageEffects/GaussianBlur.gd
@@ -0,0 +1,55 @@
+extends ImageEffect
+
+var blur_type := 0
+var blur_amount := 16
+var blur_radius := 1.0
+var blur_direction := Vector2.ONE
+var shader := preload("res://src/Shaders/Effects/GaussianBlur.gdshader")
+
+
+func _ready() -> void:
+	super._ready()
+	var sm := ShaderMaterial.new()
+	sm.shader = shader
+	preview.set_material(sm)
+
+
+func commit_action(cel: Image, project := Global.current_project) -> void:
+	var selection_tex: ImageTexture
+	if selection_checkbox.button_pressed and project.has_selection:
+		var selection := project.selection_map.return_cropped_copy(project.size)
+		selection_tex = ImageTexture.create_from_image(selection)
+
+	var params := {
+		"blur_type": blur_type,
+		"blur_amount": blur_amount,
+		"blur_radius": blur_radius,
+		"blur_direction": blur_direction,
+		"selection": selection_tex
+	}
+	if !has_been_confirmed:
+		for param in params:
+			preview.material.set_shader_parameter(param, params[param])
+	else:
+		var gen := ShaderImageEffect.new()
+		gen.generate_image(cel, shader, params, project.size)
+
+
+func _on_blur_type_item_selected(index: int) -> void:
+	blur_type = index
+	update_preview()
+
+
+func _on_blur_amount_value_changed(value: float) -> void:
+	blur_amount = value
+	update_preview()
+
+
+func _on_blur_radius_value_changed(value: float) -> void:
+	blur_radius = value
+	update_preview()
+
+
+func _on_blur_direction_value_changed(value: Vector2) -> void:
+	blur_direction = value
+	update_preview()
diff --git a/src/UI/Dialogs/ImageEffects/GaussianBlur.tscn b/src/UI/Dialogs/ImageEffects/GaussianBlur.tscn
new file mode 100644
index 000000000..e199e41fe
--- /dev/null
+++ b/src/UI/Dialogs/ImageEffects/GaussianBlur.tscn
@@ -0,0 +1,90 @@
+[gd_scene load_steps=5 format=3 uid="uid://beile55gp1bc"]
+
+[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="1_cuu40"]
+[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/GaussianBlur.gd" id="2_37xhl"]
+[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="3_237k2"]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="4_yprgi"]
+
+[node name="GaussianBlur" instance=ExtResource("1_cuu40")]
+title = "Gaussian Blur"
+size = Vector2i(427, 437)
+script = ExtResource("2_37xhl")
+
+[node name="VBoxContainer" parent="." index="3"]
+offset_right = 419.0
+offset_bottom = 388.0
+
+[node name="ShowAnimate" parent="VBoxContainer" index="0"]
+visible = false
+
+[node name="BlurOptions" type="GridContainer" parent="VBoxContainer" index="2"]
+layout_mode = 2
+columns = 2
+
+[node name="BlurTypeLabel" type="Label" parent="VBoxContainer/BlurOptions" index="0"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Blur type:"
+
+[node name="BlurType" type="OptionButton" parent="VBoxContainer/BlurOptions" index="1"]
+layout_mode = 2
+size_flags_horizontal = 3
+selected = 0
+item_count = 4
+popup/item_0/text = "Xor's Gaussian Blur"
+popup/item_1/text = "Monk's Multi-Pass Gaussian Blur"
+popup/item_1/id = 1
+popup/item_2/text = "NoDev's Single-Pass Gaussian Blur"
+popup/item_2/id = 2
+popup/item_3/text = "NoDev's Multi-Pass Gaussian Blur"
+popup/item_3/id = 3
+
+[node name="BlurAmountLabel" type="Label" parent="VBoxContainer/BlurOptions" index="2"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Blur amount:"
+
+[node name="BlurAmount" type="TextureProgressBar" parent="VBoxContainer/BlurOptions" index="3"]
+layout_mode = 2
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
+value = 16.0
+nine_patch_stretch = true
+stretch_margin_left = 3
+stretch_margin_top = 3
+stretch_margin_right = 3
+stretch_margin_bottom = 3
+script = ExtResource("3_237k2")
+
+[node name="BlurRadiusLabel" type="Label" parent="VBoxContainer/BlurOptions" index="4"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Blur radius:"
+
+[node name="BlurRadius" type="TextureProgressBar" parent="VBoxContainer/BlurOptions" index="5"]
+layout_mode = 2
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
+value = 1.0
+nine_patch_stretch = true
+stretch_margin_left = 3
+stretch_margin_top = 3
+stretch_margin_right = 3
+stretch_margin_bottom = 3
+script = ExtResource("3_237k2")
+
+[node name="BlurDirectionLabel" type="Label" parent="VBoxContainer/BlurOptions" index="6"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Blur direction:"
+
+[node name="BlurDirection" parent="VBoxContainer/BlurOptions" index="7" instance=ExtResource("4_yprgi")]
+layout_mode = 2
+value = Vector2(1, 1)
+
+[connection signal="item_selected" from="VBoxContainer/BlurOptions/BlurType" to="." method="_on_blur_type_item_selected"]
+[connection signal="value_changed" from="VBoxContainer/BlurOptions/BlurAmount" to="." method="_on_blur_amount_value_changed"]
+[connection signal="value_changed" from="VBoxContainer/BlurOptions/BlurRadius" to="." method="_on_blur_radius_value_changed"]
+[connection signal="value_changed" from="VBoxContainer/BlurOptions/BlurDirection" to="." method="_on_blur_direction_value_changed"]
diff --git a/src/UI/Dialogs/ImageEffects/GradientDialog.gd b/src/UI/Dialogs/ImageEffects/GradientDialog.gd
index 316d870f0..a49dcc29b 100644
--- a/src/UI/Dialogs/ImageEffects/GradientDialog.gd
+++ b/src/UI/Dialogs/ImageEffects/GradientDialog.gd
@@ -63,17 +63,22 @@ func commit_action(cel: Image, project := Global.current_project) -> void:
 
 	var dither_texture := selected_dither_matrix.texture
 	var gradient := gradient_edit.gradient
-	var n_of_colors := gradient.offsets.size()
+	var offsets := gradient.offsets
+	offsets.sort()
+	var n_of_colors := offsets.size()
 	# Pass the gradient offsets as an array to the shader
-	# ...but since Godot 3.x doesn't support uniform arrays, instead we construct
+	# ...but we can't provide arrays with variable sizes as uniforms, instead we construct
 	# a nx1 grayscale texture with each offset stored in each pixel, and pass it to the shader
 	var offsets_image := Image.create(n_of_colors, 1, false, Image.FORMAT_L8)
 	# Construct an image that contains the selected colors of the gradient without interpolation
 	var gradient_image := Image.create(n_of_colors, 1, false, Image.FORMAT_RGBA8)
 	for i in n_of_colors:
-		var c := gradient.offsets[i]
+		var c := offsets[i]
 		offsets_image.set_pixel(i, 0, Color(c, c, c, c))
-		gradient_image.set_pixel(i, 0, gradient.colors[i])
+		var actual_index := gradient.offsets.find(offsets[i])
+		if actual_index == -1:
+			actual_index = i
+		gradient_image.set_pixel(i, 0, gradient.colors[actual_index])
 	var offsets_tex := ImageTexture.create_from_image(offsets_image)
 	var gradient_tex: Texture2D
 	if shader == shader_linear:
diff --git a/src/UI/Dialogs/ImageEffects/GradientDialog.tscn b/src/UI/Dialogs/ImageEffects/GradientDialog.tscn
index 004eea72b..f1c59b593 100644
--- a/src/UI/Dialogs/ImageEffects/GradientDialog.tscn
+++ b/src/UI/Dialogs/ImageEffects/GradientDialog.tscn
@@ -32,10 +32,9 @@ unique_name_in_owner = true
 layout_mode = 2
 size_flags_horizontal = 3
 mouse_default_cursor_shape = 2
-item_count = 2
 selected = 0
+item_count = 2
 popup/item_0/text = "Linear"
-popup/item_0/id = 0
 popup/item_1/text = "Radial"
 popup/item_1/id = 1
 
@@ -47,10 +46,9 @@ text = "Dithering pattern:"
 unique_name_in_owner = true
 layout_mode = 2
 mouse_default_cursor_shape = 2
-item_count = 1
 selected = 0
+item_count = 1
 popup/item_0/text = "None"
-popup/item_0/id = 0
 
 [node name="RepeatLabel" type="Label" parent="VBoxContainer/GradientOptions" index="4" groups=["gradient_common"]]
 layout_mode = 2
@@ -60,10 +58,9 @@ text = "Repeat:"
 unique_name_in_owner = true
 layout_mode = 2
 mouse_default_cursor_shape = 2
-item_count = 4
 selected = 0
+item_count = 4
 popup/item_0/text = "None"
-popup/item_0/id = 0
 popup/item_1/text = "Repeat"
 popup/item_1/id = 1
 popup/item_2/text = "Mirror"
diff --git a/src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn b/src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn
index 773962b90..b60399b0d 100644
--- a/src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn
+++ b/src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn
@@ -35,7 +35,7 @@ grow_horizontal = 2
 grow_vertical = 2
 texture = ExtResource("4")
 expand_mode = 1
-stretch_mode = 6
+stretch_mode = 5
 
 [node name="AspectRatioContainer" type="AspectRatioContainer" parent="VBoxContainer"]
 layout_mode = 2
@@ -45,7 +45,7 @@ size_flags_vertical = 3
 custom_minimum_size = Vector2(200, 200)
 layout_mode = 2
 expand_mode = 1
-stretch_mode = 5
+stretch_mode = 4
 
 [node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource("2")]
 show_behind_parent = true
diff --git a/src/UI/Dialogs/ImageEffects/OffsetImage.gd b/src/UI/Dialogs/ImageEffects/OffsetImage.gd
index eed79dd01..bfd94d303 100644
--- a/src/UI/Dialogs/ImageEffects/OffsetImage.gd
+++ b/src/UI/Dialogs/ImageEffects/OffsetImage.gd
@@ -66,7 +66,7 @@ func recalculate_preview(params: Dictionary) -> void:
 
 
 ## Altered version of blend_layers() located in DrawingAlgos.gd
-## This function is REQUIRED in order for offset effect to work correctly with cliping masks
+## This function is REQUIRED in order for offset effect to work correctly with clipping masks
 func blend_layers(
 	image: Image,
 	frame: Frame,
@@ -101,8 +101,14 @@ func blend_layers(
 			if not layer_is_selected:
 				include = false
 		var cel := frame.cels[ordered_index]
-		var cel_image := layer.display_effects(cel)
-		if include:  ## apply offset effect to it
+		var cel_image: Image
+		if layer is GroupLayer and layer.blend_mode != BaseLayer.BlendModes.PASS_THROUGH:
+			cel_image = (layer as GroupLayer).blend_children(frame)
+		else:
+			cel_image = layer.display_effects(cel)
+		if layer.is_blended_by_ancestor() and not only_selected_cels and not only_selected_layers:
+			include = false
+		if include:  # Apply offset effect to it
 			gen.generate_image(cel_image, shader, effect_params, project.size)
 		textures.append(cel_image)
 		DrawingAlgos.set_layer_metadata_image(layer, cel, metadata_image, ordered_index, include)
diff --git a/src/UI/Dialogs/ImageEffects/OutlineDialog.gd b/src/UI/Dialogs/ImageEffects/OutlineDialog.gd
index 8543ee4e2..f3b99c5c8 100644
--- a/src/UI/Dialogs/ImageEffects/OutlineDialog.gd
+++ b/src/UI/Dialogs/ImageEffects/OutlineDialog.gd
@@ -31,7 +31,7 @@ func commit_action(cel: Image, project := Global.current_project) -> void:
 	var params := {
 		"color": color,
 		"width": anim_thickness,
-		"pattern": pattern,
+		"brush": pattern,
 		"inside": inside_image,
 		"selection": selection_tex
 	}
diff --git a/src/UI/Dialogs/ImageEffects/OutlineDialog.tscn b/src/UI/Dialogs/ImageEffects/OutlineDialog.tscn
index 844a82515..7f9e1699d 100644
--- a/src/UI/Dialogs/ImageEffects/OutlineDialog.tscn
+++ b/src/UI/Dialogs/ImageEffects/OutlineDialog.tscn
@@ -51,16 +51,15 @@ size_flags_horizontal = 3
 [node name="PatternLabel" type="Label" parent="VBoxContainer/OutlineOptions" index="4"]
 layout_mode = 2
 size_flags_horizontal = 3
-text = "Pattern:"
+text = "Brush:"
 
 [node name="PatternOptionButton" type="OptionButton" parent="VBoxContainer/OutlineOptions" index="5"]
 layout_mode = 2
 size_flags_horizontal = 3
 mouse_default_cursor_shape = 2
-item_count = 3
 selected = 0
+item_count = 3
 popup/item_0/text = "Diamond"
-popup/item_0/id = 0
 popup/item_1/text = "Circle"
 popup/item_1/id = 1
 popup/item_2/text = "Square"
diff --git a/src/UI/Dialogs/ImageEffects/ResizeCanvas.gd b/src/UI/Dialogs/ImageEffects/ResizeCanvas.gd
index 6b56dbd0c..d3805dee3 100644
--- a/src/UI/Dialogs/ImageEffects/ResizeCanvas.gd
+++ b/src/UI/Dialogs/ImageEffects/ResizeCanvas.gd
@@ -17,25 +17,9 @@ var image := Image.create(1, 1, false, Image.FORMAT_RGBA8)
 func _on_ResizeCanvas_about_to_show() -> void:
 	Global.canvas.selection.transform_content_confirm()
 	image.resize(Global.current_project.size.x, Global.current_project.size.y)
-
-	var layer_i := 0
-	for cel in Global.current_project.frames[Global.current_project.current_frame].cels:
-		var layer := Global.current_project.layers[layer_i]
-		if cel is PixelCel and layer.is_visible_in_hierarchy():
-			var cel_image := Image.new()
-			cel_image.copy_from(cel.get_image())
-			var opacity := cel.get_final_opacity(layer)
-			if opacity < 1.0:  # If we have cel transparency
-				for xx in cel_image.get_size().x:
-					for yy in cel_image.get_size().y:
-						var pixel_color := cel_image.get_pixel(xx, yy)
-						pixel_color.a *= cel.opacity
-						cel_image.set_pixel(xx, yy, pixel_color)
-			image.blend_rect(
-				cel_image, Rect2i(Vector2i.ZERO, Global.current_project.size), Vector2i.ZERO
-			)
-		layer_i += 1
-
+	image.fill(Color(0.0, 0.0, 0.0, 0.0))
+	var frame := Global.current_project.frames[Global.current_project.current_frame]
+	DrawingAlgos.blend_layers(image, frame)
 	width_spinbox.value = Global.current_project.size.x
 	height_spinbox.value = Global.current_project.size.y
 	update_preview()
diff --git a/src/UI/Dialogs/ImageEffects/ResizeCanvas.tscn b/src/UI/Dialogs/ImageEffects/ResizeCanvas.tscn
index 234da3897..ab8db99e7 100644
--- a/src/UI/Dialogs/ImageEffects/ResizeCanvas.tscn
+++ b/src/UI/Dialogs/ImageEffects/ResizeCanvas.tscn
@@ -101,12 +101,9 @@ layout_mode = 2
 expand_mode = 1
 stretch_mode = 5
 
-[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource("1")]
+[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer" instance=ExtResource("1")]
 show_behind_parent = true
-layout_mode = 0
-anchors_preset = 0
-anchor_right = 1.0
-anchor_bottom = 1.0
+layout_mode = 2
 
 [connection signal="about_to_popup" from="." to="." method="_on_ResizeCanvas_about_to_show"]
 [connection signal="confirmed" from="." to="." method="_on_ResizeCanvas_confirmed"]
diff --git a/src/UI/Dialogs/ImageEffects/ShaderEffect.gd b/src/UI/Dialogs/ImageEffects/ShaderEffect.gd
index 5b44531a1..bd6524942 100644
--- a/src/UI/Dialogs/ImageEffects/ShaderEffect.gd
+++ b/src/UI/Dialogs/ImageEffects/ShaderEffect.gd
@@ -51,7 +51,7 @@ func change_shader(shader_tmp: Shader, shader_name: String) -> void:
 	for child in shader_params.get_children():
 		child.queue_free()
 
-	Global.create_ui_for_shader_uniforms(
+	ShaderLoader.create_ui_for_shader_uniforms(
 		shader_tmp, params, shader_params, _set_shader_parameter, _load_texture
 	)
 
diff --git a/src/UI/Dialogs/ImageEffects/ShaderEffect.tscn b/src/UI/Dialogs/ImageEffects/ShaderEffect.tscn
index e33f98a41..037559f87 100644
--- a/src/UI/Dialogs/ImageEffects/ShaderEffect.tscn
+++ b/src/UI/Dialogs/ImageEffects/ShaderEffect.tscn
@@ -30,7 +30,7 @@ material = SubResource("1")
 custom_minimum_size = Vector2(200, 200)
 layout_mode = 2
 expand_mode = 1
-stretch_mode = 5
+stretch_mode = 4
 
 [node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource("2")]
 show_behind_parent = true
diff --git a/src/UI/Dialogs/ManageLayouts.gd b/src/UI/Dialogs/ManageLayouts.gd
index 27edd6949..30ed0bd83 100644
--- a/src/UI/Dialogs/ManageLayouts.gd
+++ b/src/UI/Dialogs/ManageLayouts.gd
@@ -97,9 +97,8 @@ func _on_LayoutSettings_confirmed() -> void:
 		Global.control.main_ui.layout = layout
 		layout_list.add_item(layout_name.text)
 	Global.layouts.sort_custom(
-		func(a: DockableLayout, b: DockableLayout): return (
-			a.resource_path.get_file() < b.resource_path.get_file()
-		)
+		func(a: DockableLayout, b: DockableLayout):
+			return a.resource_path.get_file() < b.resource_path.get_file()
 	)
 	var layout_index := Global.layouts.find(layout)
 	Global.top_menu_container.populate_layouts_submenu()
diff --git a/src/UI/Dialogs/ModifySelection.gd b/src/UI/Dialogs/ModifySelection.gd
new file mode 100644
index 000000000..a4f656fe8
--- /dev/null
+++ b/src/UI/Dialogs/ModifySelection.gd
@@ -0,0 +1,43 @@
+extends ConfirmationDialog
+
+enum Types { EXPAND, SHRINK, BORDER }
+
+@export var type := Types.EXPAND:
+	set(value):
+		type = value
+		if type == Types.EXPAND:
+			title = "Expand Selection"
+		elif type == Types.SHRINK:
+			title = "Shrink Selection"
+		else:
+			title = "Border Selection"
+
+@onready var width_slider: ValueSlider = $GridContainer/WidthSlider
+@onready var brush_option_button: OptionButton = $GridContainer/BrushOptionButton
+@onready var selection_node := Global.canvas.selection
+
+
+func _on_visibility_changed() -> void:
+	if not visible:
+		Global.dialog_open(false)
+
+
+func _on_confirmed() -> void:
+	var project := Global.current_project
+	if !project.has_selection:
+		return
+	selection_node.transform_content_confirm()
+	var undo_data_tmp := selection_node.get_undo_data(false)
+	var width: int = width_slider.value
+	var brush := brush_option_button.selected
+	project.selection_map.crop(project.size.x, project.size.y)
+	if type == Types.EXPAND:
+		project.selection_map.expand(width, brush)
+	elif type == Types.SHRINK:
+		project.selection_map.shrink(width, brush)
+	else:
+		project.selection_map.border(width, brush)
+	selection_node.big_bounding_rectangle = project.selection_map.get_used_rect()
+	project.selection_offset = Vector2.ZERO
+	selection_node.commit_undo("Modify Selection", undo_data_tmp)
+	selection_node.queue_redraw()
diff --git a/src/UI/Dialogs/ModifySelection.tscn b/src/UI/Dialogs/ModifySelection.tscn
new file mode 100644
index 000000000..27a38debd
--- /dev/null
+++ b/src/UI/Dialogs/ModifySelection.tscn
@@ -0,0 +1,60 @@
+[gd_scene load_steps=3 format=3 uid="uid://wcbpnsm7gptu"]
+
+[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="1_3jelw"]
+[ext_resource type="Script" path="res://src/UI/Dialogs/ModifySelection.gd" id="1_w6rs7"]
+
+[node name="ModifySelection" type="ConfirmationDialog"]
+title = "Expand selection"
+position = Vector2i(0, 36)
+size = Vector2i(260, 130)
+script = ExtResource("1_w6rs7")
+
+[node name="GridContainer" type="GridContainer" parent="."]
+offset_left = 8.0
+offset_top = 8.0
+offset_right = 252.0
+offset_bottom = 81.0
+columns = 2
+
+[node name="WidthLabel" type="Label" parent="GridContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Width:"
+
+[node name="WidthSlider" type="TextureProgressBar" parent="GridContainer"]
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
+size_flags_horizontal = 3
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
+min_value = 1.0
+max_value = 25.0
+value = 1.0
+allow_greater = true
+nine_patch_stretch = true
+stretch_margin_left = 3
+stretch_margin_top = 3
+stretch_margin_right = 3
+stretch_margin_bottom = 3
+script = ExtResource("1_3jelw")
+
+[node name="BrushLabel" type="Label" parent="GridContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Brush:"
+
+[node name="BrushOptionButton" type="OptionButton" parent="GridContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
+selected = 0
+item_count = 3
+popup/item_0/text = "Diamond"
+popup/item_1/text = "Circle"
+popup/item_1/id = 1
+popup/item_2/text = "Square"
+popup/item_2/id = 2
+
+[connection signal="confirmed" from="." to="." method="_on_confirmed"]
+[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"]
diff --git a/src/UI/Dialogs/SaveSprite.tscn b/src/UI/Dialogs/SaveSprite.tscn
index 7fffcb0db..ebea77fc5 100644
--- a/src/UI/Dialogs/SaveSprite.tscn
+++ b/src/UI/Dialogs/SaveSprite.tscn
@@ -5,3 +5,5 @@ size = Vector2i(675, 400)
 ok_button_text = "Save"
 access = 2
 filters = PackedStringArray("*.pxo ; Pixelorama Project")
+option_count = 1
+option_0/name = "Include blended images"
diff --git a/src/UI/Dialogs/TileModeOffsetsDialog.gd b/src/UI/Dialogs/TileModeOffsetsDialog.gd
index 0d993e6d7..10acabc62 100644
--- a/src/UI/Dialogs/TileModeOffsetsDialog.gd
+++ b/src/UI/Dialogs/TileModeOffsetsDialog.gd
@@ -1,11 +1,12 @@
 extends ConfirmationDialog
 
-@onready var x_basis_x_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/XBasisX
-@onready var x_basis_y_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/XBasisY
-@onready var y_basis_x_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/YBasisX
-@onready var y_basis_y_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/YBasisY
+@onready var x_basis_label: Label = $VBoxContainer/OptionsContainer/XBasisLabel
+@onready var x_basis: ValueSliderV2 = $VBoxContainer/OptionsContainer/XBasis
+@onready var y_basis_label: Label = $VBoxContainer/OptionsContainer/YBasisLabel
+@onready var y_basis: ValueSliderV2 = $VBoxContainer/OptionsContainer/YBasis
 @onready var preview_rect: Control = $VBoxContainer/AspectRatioContainer/Preview
 @onready var tile_mode: Node2D = $VBoxContainer/AspectRatioContainer/Preview/TileMode
+@onready var masking: CheckButton = $VBoxContainer/OptionsContainer/Masking
 
 
 func _ready() -> void:
@@ -37,35 +38,25 @@ func _on_TileModeOffsetsDialog_about_to_show() -> void:
 		tile_mode.tiles.mode = Global.current_project.tiles.mode
 	tile_mode.tiles.x_basis = Global.current_project.tiles.x_basis
 	tile_mode.tiles.y_basis = Global.current_project.tiles.y_basis
-	x_basis_x_spinbox.value = tile_mode.tiles.x_basis.x
-	x_basis_y_spinbox.value = tile_mode.tiles.x_basis.y
-	y_basis_x_spinbox.value = tile_mode.tiles.y_basis.x
-	y_basis_y_spinbox.value = tile_mode.tiles.y_basis.y
+	x_basis.value = tile_mode.tiles.x_basis
+	y_basis.value = tile_mode.tiles.y_basis
 
 	_show_options()
 	if Global.current_project.tiles.mode == Tiles.MODE.X_AXIS:
-		y_basis_x_spinbox.visible = false
-		y_basis_y_spinbox.visible = false
-		$VBoxContainer/HBoxContainer/OptionsContainer/YBasisXLabel.visible = false
-		$VBoxContainer/HBoxContainer/OptionsContainer/YBasisYLabel.visible = false
+		y_basis.visible = false
+		y_basis_label.visible = false
 	elif Global.current_project.tiles.mode == Tiles.MODE.Y_AXIS:
-		x_basis_x_spinbox.visible = false
-		x_basis_y_spinbox.visible = false
-		$VBoxContainer/HBoxContainer/OptionsContainer/XBasisXLabel.visible = false
-		$VBoxContainer/HBoxContainer/OptionsContainer/XBasisYLabel.visible = false
+		x_basis.visible = false
+		x_basis_label.visible = false
 
 	update_preview()
 
 
 func _show_options() -> void:
-	x_basis_x_spinbox.visible = true
-	x_basis_y_spinbox.visible = true
-	y_basis_x_spinbox.visible = true
-	y_basis_y_spinbox.visible = true
-	$VBoxContainer/HBoxContainer/OptionsContainer/YBasisXLabel.visible = true
-	$VBoxContainer/HBoxContainer/OptionsContainer/YBasisYLabel.visible = true
-	$VBoxContainer/HBoxContainer/OptionsContainer/XBasisXLabel.visible = true
-	$VBoxContainer/HBoxContainer/OptionsContainer/XBasisYLabel.visible = true
+	x_basis.visible = true
+	y_basis.visible = true
+	x_basis_label.visible = true
+	y_basis_label.visible = true
 
 
 func _on_TileModeOffsetsDialog_confirmed() -> void:
@@ -75,23 +66,13 @@ func _on_TileModeOffsetsDialog_confirmed() -> void:
 	Global.transparent_checker.update_rect()
 
 
-func _on_XBasisX_value_changed(value: int) -> void:
-	tile_mode.tiles.x_basis.x = value
+func _on_x_basis_value_changed(value: Vector2) -> void:
+	tile_mode.tiles.x_basis = value
 	update_preview()
 
 
-func _on_XBasisY_value_changed(value: int) -> void:
-	tile_mode.tiles.x_basis.y = value
-	update_preview()
-
-
-func _on_YBasisX_value_changed(value: int) -> void:
-	tile_mode.tiles.y_basis.x = value
-	update_preview()
-
-
-func _on_YBasisY_value_changed(value: int) -> void:
-	tile_mode.tiles.y_basis.y = value
+func _on_y_basis_value_changed(value: Vector2) -> void:
+	tile_mode.tiles.y_basis = value
 	update_preview()
 
 
@@ -122,10 +103,17 @@ func _on_TileModeOffsetsDialog_size_changed() -> void:
 func _on_Reset_pressed() -> void:
 	tile_mode.tiles.x_basis = Vector2i(Global.current_project.size.x, 0)
 	tile_mode.tiles.y_basis = Vector2i(0, Global.current_project.size.y)
-	x_basis_x_spinbox.value = Global.current_project.size.x
-	x_basis_y_spinbox.value = 0
-	y_basis_x_spinbox.value = 0
-	y_basis_y_spinbox.value = Global.current_project.size.y
+	x_basis.value = tile_mode.tiles.x_basis
+	y_basis.value = tile_mode.tiles.y_basis
+	update_preview()
+
+
+func _on_isometric_pressed() -> void:
+	tile_mode.tiles.x_basis = Global.current_project.size / 2
+	tile_mode.tiles.x_basis.y *= -1
+	tile_mode.tiles.y_basis = Global.current_project.size / 2
+	x_basis.value = tile_mode.tiles.x_basis
+	y_basis.value = tile_mode.tiles.y_basis
 	update_preview()
 
 
@@ -138,10 +126,7 @@ func change_mask() -> void:
 	var tiles_size := tiles.tile_size
 	var image := Image.create(tiles_size.x, tiles_size.y, false, Image.FORMAT_RGBA8)
 	DrawingAlgos.blend_layers(image, current_frame)
-	if (
-		image.get_used_rect().size == Vector2i.ZERO
-		or not $VBoxContainer/HBoxContainer/Masking.button_pressed
-	):
+	if image.get_used_rect().size == Vector2i.ZERO or not masking.button_pressed:
 		tiles.reset_mask()
 	else:
 		load_mask(image)
diff --git a/src/UI/Dialogs/TileModeOffsetsDialog.tscn b/src/UI/Dialogs/TileModeOffsetsDialog.tscn
index fe5896422..a995621bb 100644
--- a/src/UI/Dialogs/TileModeOffsetsDialog.tscn
+++ b/src/UI/Dialogs/TileModeOffsetsDialog.tscn
@@ -1,7 +1,8 @@
-[gd_scene load_steps=5 format=3 uid="uid://c0nuukjakmai2"]
+[gd_scene load_steps=6 format=3 uid="uid://c0nuukjakmai2"]
 
 [ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="1"]
 [ext_resource type="Script" path="res://src/UI/Canvas/TileMode.gd" id="2"]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="2_ul2eq"]
 [ext_resource type="Script" path="res://src/UI/Dialogs/TileModeOffsetsDialog.gd" id="3"]
 
 [sub_resource type="CanvasItemMaterial" id="1"]
@@ -10,83 +11,72 @@ blend_mode = 4
 [node name="TileModeOffsetsDialog" type="ConfirmationDialog"]
 canvas_item_default_texture_filter = 0
 title = "Tile Mode Offsets"
+position = Vector2i(0, 36)
+size = Vector2i(298, 536)
 script = ExtResource("3")
 
 [node name="VBoxContainer" type="VBoxContainer" parent="."]
 offset_left = 8.0
 offset_top = 8.0
-offset_right = 293.0
-offset_bottom = 386.0
+offset_right = 290.0
+offset_bottom = 487.0
 
 [node name="TileModeOffsets" type="Label" parent="VBoxContainer"]
 layout_mode = 2
 text = "Tile Mode Offsets"
 
-[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
-layout_mode = 2
-
-[node name="OptionsContainer" type="GridContainer" parent="VBoxContainer/HBoxContainer"]
+[node name="OptionsContainer" type="GridContainer" parent="VBoxContainer"]
 layout_mode = 2
 theme_override_constants/h_separation = 2
 theme_override_constants/v_separation = 4
 columns = 2
 
-[node name="XBasisXLabel" type="Label" parent="VBoxContainer/HBoxContainer/OptionsContainer"]
+[node name="XBasisLabel" type="Label" parent="VBoxContainer/OptionsContainer"]
 layout_mode = 2
-text = "X-basis x:"
+size_flags_horizontal = 3
+text = "X-basis:"
 
-[node name="XBasisX" type="SpinBox" parent="VBoxContainer/HBoxContainer/OptionsContainer"]
+[node name="XBasis" parent="VBoxContainer/OptionsContainer" instance=ExtResource("2_ul2eq")]
 layout_mode = 2
-mouse_default_cursor_shape = 2
-min_value = -16384.0
-max_value = 16384.0
-suffix = "px"
+size_flags_horizontal = 3
+allow_greater = true
+allow_lesser = true
+suffix_x = "px"
+suffix_y = "px"
 
-[node name="XBasisYLabel" type="Label" parent="VBoxContainer/HBoxContainer/OptionsContainer"]
+[node name="YBasisLabel" type="Label" parent="VBoxContainer/OptionsContainer"]
 layout_mode = 2
-text = "X-basis y:"
+size_flags_horizontal = 3
+text = "Y-basis:"
 
-[node name="XBasisY" type="SpinBox" parent="VBoxContainer/HBoxContainer/OptionsContainer"]
+[node name="YBasis" parent="VBoxContainer/OptionsContainer" instance=ExtResource("2_ul2eq")]
 layout_mode = 2
-mouse_default_cursor_shape = 2
-min_value = -16384.0
-max_value = 16384.0
-suffix = "px"
+size_flags_horizontal = 3
+allow_greater = true
+allow_lesser = true
+suffix_x = "px"
+suffix_y = "px"
 
-[node name="YBasisXLabel" type="Label" parent="VBoxContainer/HBoxContainer/OptionsContainer"]
+[node name="MaskingLabel" type="Label" parent="VBoxContainer/OptionsContainer"]
 layout_mode = 2
-text = "Y-basis x:"
+text = "Masking:"
 
-[node name="YBasisX" type="SpinBox" parent="VBoxContainer/HBoxContainer/OptionsContainer"]
-layout_mode = 2
-mouse_default_cursor_shape = 2
-min_value = -16384.0
-max_value = 16384.0
-suffix = "px"
-
-[node name="YBasisYLabel" type="Label" parent="VBoxContainer/HBoxContainer/OptionsContainer"]
-layout_mode = 2
-text = "Y-basis y:"
-
-[node name="YBasisY" type="SpinBox" parent="VBoxContainer/HBoxContainer/OptionsContainer"]
-layout_mode = 2
-mouse_default_cursor_shape = 2
-min_value = -16384.0
-max_value = 16384.0
-suffix = "px"
-
-[node name="Reset" type="Button" parent="VBoxContainer/HBoxContainer/OptionsContainer"]
-layout_mode = 2
-mouse_default_cursor_shape = 2
-text = "Reset"
-
-[node name="VSeparator" type="VSeparator" parent="VBoxContainer/HBoxContainer"]
-layout_mode = 2
-
-[node name="Masking" type="CheckButton" parent="VBoxContainer/HBoxContainer"]
+[node name="Masking" type="CheckButton" parent="VBoxContainer/OptionsContainer"]
 layout_mode = 2
+size_flags_horizontal = 3
 size_flags_vertical = 0
-text = "Masking"
+
+[node name="Reset" type="Button" parent="VBoxContainer/OptionsContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
+text = "Default"
+
+[node name="Isometric" type="Button" parent="VBoxContainer/OptionsContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
+text = "Isometric"
 
 [node name="AspectRatioContainer" type="AspectRatioContainer" parent="VBoxContainer"]
 layout_mode = 2
@@ -111,9 +101,8 @@ anchor_bottom = 1.0
 [connection signal="confirmed" from="." to="." method="_on_TileModeOffsetsDialog_confirmed"]
 [connection signal="size_changed" from="." to="." method="_on_TileModeOffsetsDialog_size_changed"]
 [connection signal="visibility_changed" from="." to="." method="_on_TileModeOffsetsDialog_visibility_changed"]
-[connection signal="value_changed" from="VBoxContainer/HBoxContainer/OptionsContainer/XBasisX" to="." method="_on_XBasisX_value_changed"]
-[connection signal="value_changed" from="VBoxContainer/HBoxContainer/OptionsContainer/XBasisY" to="." method="_on_XBasisY_value_changed"]
-[connection signal="value_changed" from="VBoxContainer/HBoxContainer/OptionsContainer/YBasisX" to="." method="_on_YBasisX_value_changed"]
-[connection signal="value_changed" from="VBoxContainer/HBoxContainer/OptionsContainer/YBasisY" to="." method="_on_YBasisY_value_changed"]
-[connection signal="pressed" from="VBoxContainer/HBoxContainer/OptionsContainer/Reset" to="." method="_on_Reset_pressed"]
-[connection signal="toggled" from="VBoxContainer/HBoxContainer/Masking" to="." method="_on_Masking_toggled"]
+[connection signal="value_changed" from="VBoxContainer/OptionsContainer/XBasis" to="." method="_on_x_basis_value_changed"]
+[connection signal="value_changed" from="VBoxContainer/OptionsContainer/YBasis" to="." method="_on_y_basis_value_changed"]
+[connection signal="toggled" from="VBoxContainer/OptionsContainer/Masking" to="." method="_on_Masking_toggled"]
+[connection signal="pressed" from="VBoxContainer/OptionsContainer/Reset" to="." method="_on_Reset_pressed"]
+[connection signal="pressed" from="VBoxContainer/OptionsContainer/Isometric" to="." method="_on_isometric_pressed"]
diff --git a/src/UI/Dialogs/WindowOpacityDialog.gd b/src/UI/Dialogs/WindowOpacityDialog.gd
index e8f0524a3..1aa4f83db 100644
--- a/src/UI/Dialogs/WindowOpacityDialog.gd
+++ b/src/UI/Dialogs/WindowOpacityDialog.gd
@@ -1,18 +1,22 @@
 extends AcceptDialog
 
+var main_canvas := Global.control.find_child("Main Canvas", true, false)
+
 @onready var slider := $VBoxContainer/ValueSlider as ValueSlider
 @onready var fullscreen_warning := $VBoxContainer/FullscreenWarning as Label
-@onready var main_canvas := Global.control.find_child("Main Canvas") as Control
 
 
 func _ready() -> void:
+	if main_canvas is FloatingWindow:  # If it's shifted to a window then get the content.
+		main_canvas = main_canvas.window_content
 	await get_tree().process_frame
 	Global.control.main_ui.sort_children.connect(_recalculate_opacity)
 
 
 func _on_WindowOpacityDialog_about_to_show() -> void:
-	get_tree().root.transparent = true
-	get_tree().root.transparent_bg = true
+	var canvas_window = main_canvas.get_window()
+	canvas_window.transparent = true
+	canvas_window.transparent_bg = true
 	slider.editable = not is_fullscreen()
 	fullscreen_warning.visible = not slider.editable
 
@@ -26,12 +30,16 @@ func set_window_opacity(value: float) -> void:
 		value = 100.0
 		slider.value = value
 	value = value / 100.0
-	# Find the TabContainer that has the Main Canvas panel
+	# Find the TabContainer that has the Main Canvas panel.
 	for container: Control in Global.control.main_ui._panel_container.get_children():
 		if container is TabContainer:
 			var center := container.get_rect().get_center()
 			if main_canvas.get_rect().has_point(center):
-				container.self_modulate.a = value
+				if main_canvas.get_window() != get_tree().root:
+					# In case we converted to window while trransparency was active.
+					container.self_modulate.a = 1.0
+				else:
+					container.self_modulate.a = value
 	Global.transparent_checker.update_transparency(value)
 
 
diff --git a/src/UI/GlobalToolOptions/DynamicsPanel.gd b/src/UI/GlobalToolOptions/DynamicsPanel.gd
index e798298d2..c8738ae3a 100644
--- a/src/UI/GlobalToolOptions/DynamicsPanel.gd
+++ b/src/UI/GlobalToolOptions/DynamicsPanel.gd
@@ -29,6 +29,15 @@ func _ready() -> void:
 	size_velocity_button.toggled.connect(
 		_on_dynamics_toggled.bind(size_velocity_button, SIZE, Tools.Dynamics.VELOCITY)
 	)
+	for child: Control in $VBoxContainer.get_children():
+		## Resets the y-size to an appropriate value
+		child.visibility_changed.connect(_recalculate_size)
+
+
+func _recalculate_size():
+	await get_tree().process_frame
+	set_size(Vector2i(size.x, 0))
+	set_size(Vector2i(size.x, size.y + 10))
 
 
 func _input(event: InputEvent) -> void:
diff --git a/src/UI/GlobalToolOptions/GlobalToolOptions.gd b/src/UI/GlobalToolOptions/GlobalToolOptions.gd
index 5f179a39f..8a1a1415b 100644
--- a/src/UI/GlobalToolOptions/GlobalToolOptions.gd
+++ b/src/UI/GlobalToolOptions/GlobalToolOptions.gd
@@ -10,11 +10,24 @@ extends PanelContainer
 
 
 func _ready() -> void:
+	Tools.options_reset.connect(reset_options)
+	%HorizontalMirrorOptions.get_popup().id_pressed.connect(
+		_on_horizontal_mirror_options_id_pressed
+	)
+	%VerticalMirrorOptions.get_popup().id_pressed.connect(_on_vertical_mirror_options_id_pressed)
 	# Resize tools panel when window gets resized
 	get_tree().get_root().size_changed.connect(_on_resized)
 	horizontal_mirror.button_pressed = Tools.horizontal_mirror
 	vertical_mirror.button_pressed = Tools.vertical_mirror
 	pixel_perfect.button_pressed = Tools.pixel_perfect
+	alpha_lock.button_pressed = Tools.alpha_locked
+
+
+func reset_options() -> void:
+	horizontal_mirror.button_pressed = false
+	vertical_mirror.button_pressed = false
+	pixel_perfect.button_pressed = false
+	alpha_lock.button_pressed = false
 
 
 func _on_resized() -> void:
@@ -80,3 +93,23 @@ func _on_alpha_lock_toggled(toggled_on: bool) -> void:
 func _on_Dynamics_pressed() -> void:
 	var pos := dynamics.global_position + Vector2(0, 32)
 	dynamics_panel.popup_on_parent(Rect2(pos, dynamics_panel.size))
+
+
+func _on_horizontal_mirror_options_id_pressed(id: int) -> void:
+	var project := Global.current_project
+	if id == 0:
+		project.x_symmetry_point = project.size.x - 1
+	elif id == 1:
+		project.x_symmetry_point = Global.camera.camera_screen_center.x * 2
+	project.y_symmetry_axis.points[0].x = project.x_symmetry_point / 2 + 0.5
+	project.y_symmetry_axis.points[1].x = project.x_symmetry_point / 2 + 0.5
+
+
+func _on_vertical_mirror_options_id_pressed(id: int) -> void:
+	var project := Global.current_project
+	if id == 0:
+		project.y_symmetry_point = project.size.y - 1
+	elif id == 1:
+		project.y_symmetry_point = Global.camera.camera_screen_center.y * 2
+	project.x_symmetry_axis.points[0].y = project.y_symmetry_point / 2 + 0.5
+	project.x_symmetry_axis.points[1].y = project.y_symmetry_point / 2 + 0.5
diff --git a/src/UI/GlobalToolOptions/GlobalToolOptions.tscn b/src/UI/GlobalToolOptions/GlobalToolOptions.tscn
index f60013ef2..012f227e5 100644
--- a/src/UI/GlobalToolOptions/GlobalToolOptions.tscn
+++ b/src/UI/GlobalToolOptions/GlobalToolOptions.tscn
@@ -1,8 +1,9 @@
-[gd_scene load_steps=24 format=3 uid="uid://wo0hqxkst808"]
+[gd_scene load_steps=25 format=3 uid="uid://wo0hqxkst808"]
 
 [ext_resource type="Texture2D" uid="uid://cjrokejjsp5dm" path="res://assets/graphics/misc/horizontal_mirror_off.png" id="1"]
 [ext_resource type="Texture2D" uid="uid://hiduvaa73fr6" path="res://assets/graphics/misc/vertical_mirror_off.png" id="2"]
 [ext_resource type="Script" path="res://src/UI/GlobalToolOptions/GlobalToolOptions.gd" id="3"]
+[ext_resource type="Texture2D" uid="uid://ct8wn8m6x4m54" path="res://assets/graphics/misc/value_arrow.svg" id="3_faalk"]
 [ext_resource type="Texture2D" uid="uid://22h12g8p3jtd" path="res://assets/graphics/misc/pixel_perfect_off.png" id="4"]
 [ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="5"]
 [ext_resource type="Texture2D" uid="uid://j8eywwy082a4" path="res://assets/graphics/misc/alpha_lock_off.png" id="5_jv20x"]
@@ -73,7 +74,7 @@ size_flags_vertical = 0
 columns = 5
 
 [node name="Horizontal" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]]
-custom_minimum_size = Vector2(32, 32)
+custom_minimum_size = Vector2(46, 32)
 layout_mode = 2
 tooltip_text = "Enable horizontal mirrored drawing"
 mouse_default_cursor_shape = 2
@@ -81,19 +82,55 @@ toggle_mode = true
 shortcut = SubResource("Shortcut_eld87")
 
 [node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/Horizontal"]
-layout_mode = 0
+layout_mode = 1
+anchors_preset = 4
+anchor_top = 0.5
+anchor_bottom = 0.5
+offset_left = 5.0
+offset_top = -10.0
+offset_right = 25.0
+offset_bottom = 11.0
+grow_vertical = 2
+texture = ExtResource("1")
+
+[node name="HorizontalMirrorOptions" type="MenuButton" parent="ScrollContainer/CenterContainer/GridContainer/Horizontal"]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 1
+anchors_preset = 6
+anchor_left = 1.0
+anchor_top = 0.5
+anchor_right = 1.0
+anchor_bottom = 0.5
+offset_left = -20.0
+offset_top = -10.0
+offset_bottom = 10.0
+grow_horizontal = 0
+grow_vertical = 2
+mouse_default_cursor_shape = 2
+item_count = 2
+popup/item_0/text = "Move to canvas center"
+popup/item_1/text = "Move to view center"
+popup/item_1/id = 1
+
+[node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/Horizontal/HorizontalMirrorOptions"]
+layout_mode = 1
+anchors_preset = 8
 anchor_left = 0.5
 anchor_top = 0.5
 anchor_right = 0.5
 anchor_bottom = 0.5
-offset_left = -10.0
-offset_top = -10.5
-offset_right = 10.0
-offset_bottom = 10.5
-texture = ExtResource("1")
+offset_left = -6.0
+offset_top = -6.0
+offset_right = 6.0
+offset_bottom = 6.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("3_faalk")
+stretch_mode = 3
 
 [node name="Vertical" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]]
-custom_minimum_size = Vector2(32, 32)
+custom_minimum_size = Vector2(46, 32)
 layout_mode = 2
 tooltip_text = "Enable vertical mirrored drawing"
 mouse_default_cursor_shape = 2
@@ -101,17 +138,47 @@ toggle_mode = true
 shortcut = SubResource("Shortcut_ai7qc")
 
 [node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/Vertical"]
-layout_mode = 0
-anchor_left = 0.5
+layout_mode = 1
+anchors_preset = 4
 anchor_top = 0.5
-anchor_right = 0.5
 anchor_bottom = 0.5
-offset_left = -10.0
+offset_left = 5.0
 offset_top = -10.0
-offset_right = 10.0
+offset_right = 25.0
 offset_bottom = 10.0
+grow_vertical = 2
 texture = ExtResource("2")
 
+[node name="VerticalMirrorOptions" type="MenuButton" parent="ScrollContainer/CenterContainer/GridContainer/Vertical"]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 1
+anchors_preset = 6
+anchor_left = 1.0
+anchor_top = 0.5
+anchor_right = 1.0
+anchor_bottom = 0.5
+offset_left = -20.0
+offset_top = -10.0
+offset_bottom = 10.0
+grow_horizontal = 0
+grow_vertical = 2
+mouse_default_cursor_shape = 2
+item_count = 2
+popup/item_0/text = "Move to canvas center"
+popup/item_1/text = "Move to view center"
+popup/item_1/id = 1
+
+[node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/Vertical/VerticalMirrorOptions"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("3_faalk")
+stretch_mode = 3
+
 [node name="PixelPerfect" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]]
 custom_minimum_size = Vector2(32, 32)
 layout_mode = 2
diff --git a/src/UI/Nodes/BasisSliders.gd b/src/UI/Nodes/BasisSliders.gd
new file mode 100644
index 000000000..b81096dd3
--- /dev/null
+++ b/src/UI/Nodes/BasisSliders.gd
@@ -0,0 +1,65 @@
+@tool
+class_name BasisSliders
+extends HBoxContainer
+
+signal value_changed(value: Basis)
+
+@export var value: Basis:
+	set(val):
+		value = val
+		_can_emit_signal = false
+		get_sliders()[0].value = value.x
+		get_sliders()[1].value = value.y
+		get_sliders()[2].value = value.z
+		_can_emit_signal = true
+@export var min_value := Vector3.ZERO:
+	set(val):
+		min_value = val
+		get_sliders()[0].min_value = val
+		get_sliders()[1].min_value = val
+		get_sliders()[2].min_value = val
+@export var max_value := Vector3(100.0, 100.0, 100.0):
+	set(val):
+		max_value = val
+		get_sliders()[0].max_value = val
+		get_sliders()[1].max_value = val
+		get_sliders()[2].max_value = val
+@export var step := 1.0:
+	set(val):
+		step = val
+		for slider in get_sliders():
+			slider.step = val
+@export var allow_greater := false:
+	set(val):
+		allow_greater = val
+		for slider in get_sliders():
+			slider.allow_greater = val
+@export var allow_lesser := false:
+	set(val):
+		allow_lesser = val
+		for slider in get_sliders():
+			slider.allow_lesser = val
+
+var _can_emit_signal := true
+
+
+func get_sliders() -> Array[ValueSliderV3]:
+	return [$XSlider, $YSlider, $ZSlider]
+
+
+func _on_x_slider_value_changed(val: Vector3) -> void:
+	value.x = val
+	if _can_emit_signal:
+		value_changed.emit(value)
+
+
+func _on_y_slider_value_changed(val: Vector3) -> void:
+	value.y = val
+	if _can_emit_signal:
+		value_changed.emit(value)
+
+
+func _on_z_slider_value_changed(val: Vector3) -> void:
+	value.z = val
+	if _can_emit_signal:
+		value_changed.emit(value)
diff --git a/src/UI/Nodes/BasisSliders.tscn b/src/UI/Nodes/BasisSliders.tscn
new file mode 100644
index 000000000..299ab83d4
--- /dev/null
+++ b/src/UI/Nodes/BasisSliders.tscn
@@ -0,0 +1,40 @@
+[gd_scene load_steps=3 format=3 uid="uid://d0d66oh6bw3kt"]
+
+[ext_resource type="Script" path="res://src/UI/Nodes/BasisSliders.gd" id="1_sbf5t"]
+[ext_resource type="PackedScene" uid="uid://dpoteid430evf" path="res://src/UI/Nodes/ValueSliderV3.tscn" id="2_7swri"]
+
+[node name="BasisSliders" type="HBoxContainer"]
+offset_right = 40.0
+offset_bottom = 40.0
+script = ExtResource("1_sbf5t")
+
+[node name="XSlider" parent="." instance=ExtResource("2_7swri")]
+layout_mode = 2
+size_flags_horizontal = 3
+value = Vector3(1, 0, 0)
+slider_min_size = Vector2(64, 24)
+prefix_x = "XX:"
+prefix_y = "YX:"
+prefix_z = "ZX:"
+
+[node name="YSlider" parent="." instance=ExtResource("2_7swri")]
+layout_mode = 2
+size_flags_horizontal = 3
+value = Vector3(0, 1, 0)
+slider_min_size = Vector2(64, 24)
+prefix_x = "XY:"
+prefix_y = "YY:"
+prefix_z = "ZY:"
+
+[node name="ZSlider" parent="." instance=ExtResource("2_7swri")]
+layout_mode = 2
+size_flags_horizontal = 3
+value = Vector3(0, 0, 1)
+slider_min_size = Vector2(64, 24)
+prefix_x = "XZ:"
+prefix_y = "YZ:"
+prefix_z = "ZZ:"
+
+[connection signal="value_changed" from="XSlider" to="." method="_on_x_slider_value_changed"]
+[connection signal="value_changed" from="YSlider" to="." method="_on_y_slider_value_changed"]
+[connection signal="value_changed" from="ZSlider" to="." method="_on_z_slider_value_changed"]
diff --git a/src/UI/Nodes/CollapsibleContainer.gd b/src/UI/Nodes/CollapsibleContainer.gd
index 61bf7dc96..d311e8b0c 100644
--- a/src/UI/Nodes/CollapsibleContainer.gd
+++ b/src/UI/Nodes/CollapsibleContainer.gd
@@ -33,12 +33,9 @@ func _ready() -> void:
 	_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
 	_button.toggled.connect(set_visible_children)
 	add_child(_button, false, Node.INTERNAL_MODE_FRONT)
-	_texture_rect.anchor_top = 0.5
-	_texture_rect.anchor_bottom = 0.5
-	_texture_rect.offset_left = 2
-	_texture_rect.offset_top = -6
-	_texture_rect.offset_right = 14
-	_texture_rect.offset_bottom = 6
+	_texture_rect.set_anchors_and_offsets_preset(
+		Control.PRESET_CENTER_LEFT, Control.PRESET_MODE_MINSIZE
+	)
 	_texture_rect.rotation_degrees = -90
 	_texture_rect.pivot_offset = Vector2(6, 6)
 	_texture_rect.add_to_group("UIButtons")
diff --git a/src/UI/Nodes/GradientEdit.tscn b/src/UI/Nodes/GradientEdit.tscn
index 1373646b1..c1bde37f0 100644
--- a/src/UI/Nodes/GradientEdit.tscn
+++ b/src/UI/Nodes/GradientEdit.tscn
@@ -26,6 +26,8 @@ offset_right = 20.0
 offset_bottom = 7.0
 
 [node name="Popup" type="PopupPanel" parent="."]
+unresizable = false
+borderless = false
 
 [node name="ColorPicker" type="ColorPicker" parent="Popup"]
 offset_left = 4.0
@@ -46,10 +48,9 @@ unique_name_in_owner = true
 layout_mode = 2
 size_flags_horizontal = 3
 mouse_default_cursor_shape = 2
-item_count = 3
 selected = 0
+item_count = 3
 popup/item_0/text = "Linear"
-popup/item_0/id = 0
 popup/item_1/text = "Constant"
 popup/item_1/id = 1
 popup/item_2/text = "Cubic"
@@ -68,10 +69,9 @@ unique_name_in_owner = true
 layout_mode = 2
 size_flags_horizontal = 3
 mouse_default_cursor_shape = 2
-item_count = 3
 selected = 0
+item_count = 3
 popup/item_0/text = "sRGB"
-popup/item_0/id = 0
 popup/item_1/text = "Linear sRGB"
 popup/item_1/id = 1
 popup/item_2/text = "Oklab"
diff --git a/src/UI/Nodes/TransparentChecker.gd b/src/UI/Nodes/TransparentChecker.gd
index a1d39cb8a..f01d2250f 100644
--- a/src/UI/Nodes/TransparentChecker.gd
+++ b/src/UI/Nodes/TransparentChecker.gd
@@ -11,8 +11,8 @@ func update_rect() -> void:
 		set_bounds(Global.current_project.size)
 	if self == Global.transparent_checker:
 		fit_rect(Global.current_project.tiles.get_bounding_rect())
-		Global.second_viewport.get_node("SubViewport/TransparentChecker").update_rect()
-		Global.small_preview_viewport.get_node("SubViewport/TransparentChecker").update_rect()
+		for canvas_preview in get_tree().get_nodes_in_group("CanvasPreviews"):
+			canvas_preview.get_viewport().get_node("TransparentChecker").update_rect()
 	material.set_shader_parameter("size", Global.checker_size)
 	material.set_shader_parameter("color1", Global.checker_color_1)
 	material.set_shader_parameter("color2", Global.checker_color_2)
diff --git a/src/UI/Nodes/ValueSlider.gd b/src/UI/Nodes/ValueSlider.gd
index 9d9a4a508..b990b19cf 100644
--- a/src/UI/Nodes/ValueSlider.gd
+++ b/src/UI/Nodes/ValueSlider.gd
@@ -80,15 +80,21 @@ func _notification(what: int) -> void:
 		_reset_display(false)
 
 
-func _input(event: InputEvent) -> void:
+func _unhandled_input(event: InputEvent) -> void:
 	if not editable or not is_visible_in_tree():
 		return
-	if event.is_action_pressed(global_increment_action, true):
+	if (
+		not global_increment_action.is_empty()
+		and event.is_action_pressed(global_increment_action, true)
+	):
 		if snap_by_default:
 			value += step if event.ctrl_pressed else snap_step
 		else:
 			value += snap_step if event.ctrl_pressed else step
-	elif event.is_action_pressed(global_decrement_action, true):
+	elif (
+		not global_decrement_action.is_empty()
+		and event.is_action_pressed(global_decrement_action, true)
+	):
 		if snap_by_default:
 			value -= step if event.ctrl_pressed else snap_step
 		else:
@@ -108,11 +114,13 @@ func _gui_input(event: InputEvent) -> void:
 					value += step if event.ctrl_pressed else snap_step
 				else:
 					value += snap_step if event.ctrl_pressed else step
+				get_viewport().set_input_as_handled()
 			elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
 				if snap_by_default:
 					value -= step if event.ctrl_pressed else snap_step
 				else:
 					value -= snap_step if event.ctrl_pressed else step
+				get_viewport().set_input_as_handled()
 	elif state == HELD:
 		if event.is_action_released("left_mouse"):
 			state = TYPING
diff --git a/src/UI/Nodes/ValueSliderV3.gd b/src/UI/Nodes/ValueSliderV3.gd
index 0c9f44874..e1ba93c0c 100644
--- a/src/UI/Nodes/ValueSliderV3.gd
+++ b/src/UI/Nodes/ValueSliderV3.gd
@@ -4,8 +4,8 @@ extends HBoxContainer
 ## A class that combines three ValueSlider nodes, for easy usage with Vector3 values.
 ## Also supports aspect ratio locking.
 
-signal value_changed(value)
-signal ratio_toggled(button_pressed)
+signal value_changed(value: Vector3)
+signal ratio_toggled(button_pressed: bool)
 
 @export var editable := true:
 	set(val):
diff --git a/src/UI/Nodes/ValueSliderV3.tscn b/src/UI/Nodes/ValueSliderV3.tscn
index 9c96cd74d..4c0eed5d7 100644
--- a/src/UI/Nodes/ValueSliderV3.tscn
+++ b/src/UI/Nodes/ValueSliderV3.tscn
@@ -1,86 +1,83 @@
-[gd_scene load_steps=6 format=2]
+[gd_scene load_steps=6 format=3 uid="uid://dpoteid430evf"]
 
-[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=1]
-[ext_resource path="res://src/UI/Nodes/ValueSliderV3.gd" type="Script" id=2]
-[ext_resource path="res://assets/graphics/misc/lock_aspect_2.png" type="Texture2D" id=3]
-[ext_resource path="res://assets/graphics/misc/lock_aspect_guides.png" type="Texture2D" id=4]
-[ext_resource path="res://assets/graphics/misc/lock_aspect.png" type="Texture2D" id=5]
+[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="1"]
+[ext_resource type="Script" path="res://src/UI/Nodes/ValueSliderV3.gd" id="2"]
+[ext_resource type="Texture2D" uid="uid://cancw70yw0pv7" path="res://assets/graphics/misc/lock_aspect_2.png" id="3"]
+[ext_resource type="Texture2D" uid="uid://kd10jfc1dxf5" path="res://assets/graphics/misc/lock_aspect_guides.png" id="4"]
+[ext_resource type="Texture2D" uid="uid://beqermx8s5q8y" path="res://assets/graphics/misc/lock_aspect.png" id="5"]
 
 [node name="ValueSliderV3" type="HBoxContainer"]
 offset_right = 45.0
 offset_bottom = 52.0
-script = ExtResource( 2 )
+script = ExtResource("2")
 
 [node name="GridContainer" type="GridContainer" parent="."]
-offset_right = 45.0
-offset_bottom = 80.0
+layout_mode = 2
 size_flags_horizontal = 3
 
 [node name="X" type="TextureProgressBar" parent="GridContainer"]
-offset_right = 45.0
-offset_bottom = 24.0
-custom_minimum_size = Vector2( 32, 24 )
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(32, 24)
+layout_mode = 2
 size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
 nine_patch_stretch = true
 stretch_margin_left = 3
 stretch_margin_top = 3
 stretch_margin_right = 3
 stretch_margin_bottom = 3
-script = ExtResource( 1 )
+script = ExtResource("1")
 prefix = "X:"
 
 [node name="Y" type="TextureProgressBar" parent="GridContainer"]
-offset_top = 28.0
-offset_right = 45.0
-offset_bottom = 52.0
-custom_minimum_size = Vector2( 32, 24 )
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(32, 24)
+layout_mode = 2
 size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
 nine_patch_stretch = true
 stretch_margin_left = 3
 stretch_margin_top = 3
 stretch_margin_right = 3
 stretch_margin_bottom = 3
-script = ExtResource( 1 )
+script = ExtResource("1")
 prefix = "Y:"
 
 [node name="Z" type="TextureProgressBar" parent="GridContainer"]
-offset_top = 56.0
-offset_right = 45.0
-offset_bottom = 80.0
-custom_minimum_size = Vector2( 32, 24 )
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(32, 24)
+layout_mode = 2
 size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
 nine_patch_stretch = true
 stretch_margin_left = 3
 stretch_margin_top = 3
 stretch_margin_right = 3
 stretch_margin_bottom = 3
-script = ExtResource( 1 )
+script = ExtResource("1")
 prefix = "Z:"
 
 [node name="Ratio" type="Control" parent="."]
 visible = false
-offset_left = 36.0
-offset_right = 52.0
-offset_bottom = 80.0
-custom_minimum_size = Vector2( 16, 0 )
+custom_minimum_size = Vector2(16, 0)
+layout_mode = 2
 
 [node name="RatioGuides" type="NinePatchRect" parent="Ratio" groups=["UIButtons"]]
+custom_minimum_size = Vector2(9, 0)
+layout_mode = 0
 anchor_bottom = 1.0
 offset_right = 9.0
-custom_minimum_size = Vector2( 9, 0 )
-texture = ExtResource( 4 )
-region_rect = Rect2( 0, 0, 9, 44 )
+texture = ExtResource("4")
+region_rect = Rect2(0, 0, 9, 44)
 patch_margin_top = 15
 patch_margin_bottom = 13
 
 [node name="RatioButton" type="TextureButton" parent="Ratio" groups=["UIButtons"]]
 unique_name_in_owner = true
+layout_mode = 0
 anchor_left = 0.5
 anchor_top = 0.5
 anchor_right = 0.5
@@ -92,8 +89,8 @@ offset_bottom = 8.0
 tooltip_text = "Lock aspect ratio"
 mouse_default_cursor_shape = 2
 toggle_mode = true
-texture_normal = ExtResource( 3 )
-texture_pressed = ExtResource( 5 )
+texture_normal = ExtResource("3")
+texture_pressed = ExtResource("5")
 
 [connection signal="value_changed" from="GridContainer/X" to="." method="_on_X_value_changed"]
 [connection signal="value_changed" from="GridContainer/Y" to="." method="_on_Y_value_changed"]
diff --git a/src/UI/PerspectiveEditor/PerspectiveEditor.gd b/src/UI/PerspectiveEditor/PerspectiveEditor.gd
index 8db7402d5..bc0eae541 100644
--- a/src/UI/PerspectiveEditor/PerspectiveEditor.gd
+++ b/src/UI/PerspectiveEditor/PerspectiveEditor.gd
@@ -2,7 +2,7 @@ extends PanelContainer
 
 var axes: Node2D
 var do_pool := []  ## A pool that stores data of points removed by undo
-var delete_pool := []  ## A pool that containing deleted data and their index
+var delete_pool := []  ## A pool that contains deleted data and their index
 ## The vanishing point UI resource
 var vanishing_point_res := preload("res://src/UI/PerspectiveEditor/VanishingPoint.tscn")
 ## Option to show/hide tracker guides. (guides whose end points follow the mouse)
@@ -73,7 +73,7 @@ func _update_points() -> void:
 	# Delete old vanishing points
 	for c in vanishing_point_container.get_children():
 		c.queue_free()
-	# Add the "updated" vanising points from the current_project
+	# Add the "updated" vanishing points from the current_project
 	for idx in Global.current_project.vanishing_points.size():
 		# Create the point
 		var vanishing_point := vanishing_point_res.instantiate()
diff --git a/src/UI/Recorder/Recorder.gd b/src/UI/Recorder/Recorder.gd
index f2b611b9e..9009c2bba 100644
--- a/src/UI/Recorder/Recorder.gd
+++ b/src/UI/Recorder/Recorder.gd
@@ -1,17 +1,17 @@
+class_name RecorderPanel
 extends PanelContainer
 
-signal frame_saved
-
 enum Mode { CANVAS, PIXELORAMA }
 
 var mode := Mode.CANVAS
-var chosen_dir := ""
+var chosen_dir := "":
+	set(value):
+		chosen_dir = value
+		if chosen_dir.ends_with("/"):  # Remove end back-slashes if present
+			chosen_dir[-1] = ""
+var recorded_projects := {}  ## [Dictionary] of [Project] and [Recorder].
 var save_dir := ""
-var project: Project
-var cache: Array[Image] = []  ## Images stored during recording
-var frame_captured := 0  ## Used to visualize frames captured
-var skip_amount := 1  ## Number of "do" actions after which a frame can be captured
-var current_frame_no := 0  ## Used to compare with skip_amount to see if it can be captured
+var skip_amount := 1  ## Number of "do" actions after which a frame can be captured.
 var resize_percent := 100
 var _path_dialog: FileDialog:
 	get:
@@ -28,7 +28,6 @@ var _path_dialog: FileDialog:
 		return _path_dialog
 
 @onready var captured_label := %CapturedLabel as Label
-@onready var project_list := $"%TargetProjectOption" as OptionButton
 @onready var start_button := $"%Start" as Button
 @onready var size_label := $"%Size" as Label
 @onready var path_field := $"%Path" as LineEdit
@@ -36,125 +35,99 @@ var _path_dialog: FileDialog:
 @onready var options_container := %OptionsContainer as VBoxContainer
 
 
+class Recorder:
+	var project: Project
+	var recorder_panel: RecorderPanel
+	var actions_done := -1
+	var frames_captured := 0
+	var save_directory := ""
+
+	func _init(_project: Project, _recorder_panel: RecorderPanel) -> void:
+		project = _project
+		recorder_panel = _recorder_panel
+		# Create a new directory based on time
+		var time_dict := Time.get_time_dict_from_system()
+		var folder := str(
+			project.name, time_dict.hour, "_", time_dict.minute, "_", time_dict.second
+		)
+		var dir := DirAccess.open(recorder_panel.chosen_dir)
+		save_directory = recorder_panel.chosen_dir.path_join(folder)
+		dir.make_dir_recursive(save_directory)
+		project.removed.connect(recorder_panel.finalize_recording.bind(project))
+		project.undo_redo.version_changed.connect(capture_frame)
+
+	func _notification(what: int) -> void:
+		if what == NOTIFICATION_PREDELETE:
+			# Needed so that the project won't be forever remained in memory because of bind().
+			project.removed.disconnect(recorder_panel.finalize_recording)
+
+	func capture_frame() -> void:
+		actions_done += 1
+		if actions_done % recorder_panel.skip_amount != 0:
+			return
+		var image: Image
+		if recorder_panel.mode == RecorderPanel.Mode.PIXELORAMA:
+			image = recorder_panel.get_window().get_texture().get_image()
+		else:
+			var frame := project.frames[project.current_frame]
+			image = Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
+			DrawingAlgos.blend_layers(image, frame, Vector2i.ZERO, project)
+
+			if recorder_panel.resize_percent != 100:
+				var resize := recorder_panel.resize_percent / 100
+				var new_width := image.get_width() * resize
+				var new_height := image.get_height() * resize
+				image.resize(new_width, new_height, Image.INTERPOLATE_NEAREST)
+		var save_file := str(project.name, "_", frames_captured, ".png")
+		image.save_png(save_directory.path_join(save_file))
+		frames_captured += 1
+		recorder_panel.captured_label.text = str("Saved: ", frames_captured)
+
+
 func _ready() -> void:
-	refresh_projects_list()
-	project = Global.current_project
-	frame_saved.connect(_on_frame_saved)
+	if OS.get_name() == "Web":
+		ExtensionsApi.panel.remove_node_from_tab.call_deferred(self)
+		return
+	Global.project_switched.connect(_on_project_switched)
 	# Make a recordings folder if there isn't one
 	chosen_dir = Global.home_data_directory.path_join("Recordings")
 	DirAccess.make_dir_recursive_absolute(chosen_dir)
 	path_field.text = chosen_dir
-	size_label.text = str("(", project.size.x, "×", project.size.y, ")")
+
+
+func _on_project_switched() -> void:
+	if recorded_projects.has(Global.current_project):
+		initialize_recording()
+		start_button.set_pressed_no_signal(true)
+		Global.change_button_texturerect(start_button.get_child(0), "stop.png")
+	else:
+		finalize_recording()
+		start_button.set_pressed_no_signal(false)
+		Global.change_button_texturerect(start_button.get_child(0), "start.png")
 
 
 func initialize_recording() -> void:
-	connect_undo()  # connect to detect changes in project
-	cache.clear()  # clear the cache array to store new images
-	frame_captured = 0
-	current_frame_no = skip_amount - 1
-
 	# disable some options that are not required during recording
-	project_list.visible = false
 	captured_label.visible = true
 	for child in options_container.get_children():
 		if !child.is_in_group("visible during recording"):
 			child.visible = false
 
-	save_dir = chosen_dir
-	# Remove end back-slashes if present
-	if save_dir.ends_with("/"):
-		save_dir[-1] = ""
 
-	# Create a new directory based on time
-	var time_dict := Time.get_time_dict_from_system()
-	var folder := str(project.name, time_dict.hour, "_", time_dict.minute, "_", time_dict.second)
-	var dir := DirAccess.open(save_dir)
-	save_dir = save_dir.path_join(folder)
-	dir.make_dir_recursive(save_dir)
-
-	capture_frame()  # capture first frame
-	$Timer.start()
-
-
-func capture_frame() -> void:
-	current_frame_no += 1
-	if current_frame_no != skip_amount:
-		return
-	current_frame_no = 0
-	var image: Image
-	if mode == Mode.PIXELORAMA:
-		image = get_tree().root.get_viewport().get_texture().get_image()
-	else:
-		var frame := project.frames[project.current_frame]
-		image = Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
-		DrawingAlgos.blend_layers(image, frame, Vector2i.ZERO, project)
-
-	if mode == Mode.CANVAS:
-		if resize_percent != 100:
-			var resize := resize_percent / 100
-			image.resize(
-				image.get_width() * resize, image.get_height() * resize, Image.INTERPOLATE_NEAREST
-			)
-
-	cache.append(image)
-
-
-func _on_Timer_timeout() -> void:
-	# Saves frames little by little during recording
-	if cache.size() > 0:
-		save_frame(cache[0])
-		cache.remove_at(0)
-
-
-func save_frame(img: Image) -> void:
-	var save_file := str(project.name, "_", frame_captured, ".png")
-	img.save_png(save_dir.path_join(save_file))
-	frame_saved.emit()
-
-
-func _on_frame_saved() -> void:
-	frame_captured += 1
-	captured_label.text = str("Saved: ", frame_captured)
-
-
-func finalize_recording() -> void:
-	$Timer.stop()
-	for img in cache:
-		save_frame(img)
-	cache.clear()
-	disconnect_undo()
-	project_list.visible = true
-	captured_label.visible = false
-	for child in options_container.get_children():
-		child.visible = true
-	if mode == Mode.PIXELORAMA:
-		size_label.get_parent().visible = false
-
-
-func disconnect_undo() -> void:
-	project.undo_redo.version_changed.disconnect(capture_frame)
-
-
-func connect_undo() -> void:
-	project.undo_redo.version_changed.connect(capture_frame)
-
-
-func _on_TargetProjectOption_item_selected(index: int) -> void:
-	project = Global.projects[index]
-
-
-func _on_TargetProjectOption_pressed() -> void:
-	refresh_projects_list()
-
-
-func refresh_projects_list() -> void:
-	project_list.clear()
-	for proj in Global.projects:
-		project_list.add_item(proj.name)
+func finalize_recording(project := Global.current_project) -> void:
+	if recorded_projects.has(project):
+		recorded_projects.erase(project)
+	if project == Global.current_project:
+		captured_label.visible = false
+		for child in options_container.get_children():
+			child.visible = true
+		if mode == Mode.PIXELORAMA:
+			size_label.get_parent().visible = false
 
 
 func _on_Start_toggled(button_pressed: bool) -> void:
 	if button_pressed:
+		recorded_projects[Global.current_project] = Recorder.new(Global.current_project, self)
 		initialize_recording()
 		Global.change_button_texturerect(start_button.get_child(0), "stop.png")
 	else:
@@ -163,7 +136,8 @@ func _on_Start_toggled(button_pressed: bool) -> void:
 
 
 func _on_Settings_pressed() -> void:
-	options_dialog.popup_on_parent(Rect2(position, options_dialog.size))
+	_on_SpinBox_value_changed(resize_percent)
+	options_dialog.popup_on_parent(Rect2i(position, options_dialog.size))
 
 
 func _on_SkipAmount_value_changed(value: float) -> void:
@@ -181,7 +155,7 @@ func _on_Mode_toggled(button_pressed: bool) -> void:
 
 func _on_SpinBox_value_changed(value: float) -> void:
 	resize_percent = value
-	var new_size: Vector2 = project.size * (resize_percent / 100.0)
+	var new_size: Vector2 = Global.current_project.size * (resize_percent / 100.0)
 	size_label.text = str("(", new_size.x, "×", new_size.y, ")")
 
 
diff --git a/src/UI/Recorder/Recorder.tscn b/src/UI/Recorder/Recorder.tscn
index 717cc742f..5204fcf88 100644
--- a/src/UI/Recorder/Recorder.tscn
+++ b/src/UI/Recorder/Recorder.tscn
@@ -31,13 +31,6 @@ unique_name_in_owner = true
 visible = false
 layout_mode = 2
 
-[node name="TargetProjectOption" type="OptionButton" parent="ScrollContainer/CenterContainer/GridContainer"]
-unique_name_in_owner = true
-custom_minimum_size = Vector2(100, 0)
-layout_mode = 2
-tooltip_text = "Choose project"
-clip_text = true
-
 [node name="Start" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]]
 unique_name_in_owner = true
 custom_minimum_size = Vector2(32, 32)
@@ -58,7 +51,7 @@ offset_right = 10.0
 offset_bottom = 10.5
 texture = ExtResource("1")
 expand_mode = 1
-stretch_mode = 6
+stretch_mode = 5
 
 [node name="Settings" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]]
 unique_name_in_owner = true
@@ -79,7 +72,7 @@ offset_top = -10.5
 offset_right = 10.0
 offset_bottom = 10.5
 texture = ExtResource("3")
-stretch_mode = 6
+stretch_mode = 5
 
 [node name="OpenFolder" type="Button" parent="ScrollContainer/CenterContainer/GridContainer"]
 custom_minimum_size = Vector2(32, 32)
@@ -97,7 +90,7 @@ offset_top = 3.0
 offset_right = -3.0
 offset_bottom = -3.0
 texture = ExtResource("4")
-stretch_mode = 6
+stretch_mode = 5
 
 [node name="OptionsDialog" type="AcceptDialog" parent="."]
 position = Vector2i(0, 36)
@@ -143,6 +136,8 @@ text = "Capture frame every"
 [node name="SkipAmount" type="SpinBox" parent="OptionsDialog/PanelContainer/OptionsContainer/ActionGap"]
 layout_mode = 2
 size_flags_horizontal = 3
+min_value = 1.0
+value = 1.0
 suffix = "actions"
 
 [node name="ModeHeader" type="HBoxContainer" parent="OptionsDialog/PanelContainer/OptionsContainer" groups=["visible during recording"]]
@@ -223,10 +218,6 @@ editable = false
 layout_mode = 2
 text = "Choose"
 
-[node name="Timer" type="Timer" parent="."]
-
-[connection signal="item_selected" from="ScrollContainer/CenterContainer/GridContainer/TargetProjectOption" to="." method="_on_TargetProjectOption_item_selected"]
-[connection signal="pressed" from="ScrollContainer/CenterContainer/GridContainer/TargetProjectOption" to="." method="_on_TargetProjectOption_pressed"]
 [connection signal="toggled" from="ScrollContainer/CenterContainer/GridContainer/Start" to="." method="_on_Start_toggled"]
 [connection signal="pressed" from="ScrollContainer/CenterContainer/GridContainer/Settings" to="." method="_on_Settings_pressed"]
 [connection signal="pressed" from="ScrollContainer/CenterContainer/GridContainer/OpenFolder" to="." method="_on_open_folder_pressed"]
@@ -234,4 +225,3 @@ text = "Choose"
 [connection signal="toggled" from="OptionsDialog/PanelContainer/OptionsContainer/ModeType/Mode" to="." method="_on_Mode_toggled"]
 [connection signal="value_changed" from="OptionsDialog/PanelContainer/OptionsContainer/OutputScale/Resize" to="." method="_on_SpinBox_value_changed"]
 [connection signal="pressed" from="OptionsDialog/PanelContainer/OptionsContainer/PathContainer/Choose" to="." method="_on_Choose_pressed"]
-[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"]
diff --git a/src/UI/Tabs.gd b/src/UI/Tabs.gd
index a5260d6c3..66f8c4dca 100644
--- a/src/UI/Tabs.gd
+++ b/src/UI/Tabs.gd
@@ -4,6 +4,35 @@ extends TabBar
 var unsaved_changes_dialog: ConfirmationDialog = Global.control.find_child("UnsavedCanvasDialog")
 
 
+func _input(_event: InputEvent) -> void:
+	# NOTE: This feature has an unavoidable bug which sometimes causes the undoredo
+	# system to fail, because user is trying to draw while switching project simultaneously.
+	# This is because the current project has changed and the system tries to commit to the
+	# wrong undoredo.
+	# If a project is currently worked upon, then don't switch it.
+	# This doesn't stop the bug completely but significantly reduces its chances
+	# of appearing.
+	if (
+		Input.is_action_pressed("activate_left_tool")
+		or Input.is_action_pressed("activate_right_tool")
+	):
+		return
+	# Due to the bug mentioned above, we will use is_action_just_released
+	# instead of is_action_just_pressed. This won't remove the bug completely
+	# but it will significantly reduce its chance of appearing.
+	var tab_idx := current_tab
+	if Input.is_action_just_released(&"next_project", true):
+		tab_idx += 1
+		if tab_idx >= tab_count:
+			tab_idx = 0
+	elif Input.is_action_just_released(&"previous_project", true):
+		tab_idx -= 1
+		if tab_idx < 0:
+			tab_idx = tab_count - 1
+	if tab_idx != current_tab:
+		current_tab = tab_idx
+
+
 ## Handles closing tab with middle-click
 ## Thanks to https://github.com/godotengine/godot/issues/64498#issuecomment-1217992089
 func _gui_input(event: InputEvent) -> void:
diff --git a/src/UI/Timeline/AnimationTimeline.gd b/src/UI/Timeline/AnimationTimeline.gd
index 9a170fd71..ff1acb9c8 100644
--- a/src/UI/Timeline/AnimationTimeline.gd
+++ b/src/UI/Timeline/AnimationTimeline.gd
@@ -3,11 +3,13 @@ extends Panel
 signal animation_started(forward: bool)
 signal animation_finished
 
+enum LoopType { NO, CYCLE, PINGPONG }
+
 const FRAME_BUTTON_TSCN := preload("res://src/UI/Timeline/FrameButton.tscn")
 const LAYER_FX_SCENE_PATH := "res://src/UI/Timeline/LayerEffects/LayerEffectsSettings.tscn"
 
 var is_animation_running := false
-var animation_loop := 1  ## 0 is no loop, 1 is cycle loop, 2 is ping-pong loop
+var animation_loop := LoopType.CYCLE
 var animation_forward := true
 var first_frame := 0
 var last_frame := 0
@@ -24,11 +26,16 @@ var layer_effect_settings: AcceptDialog:
 			layer_effect_settings = load(LAYER_FX_SCENE_PATH).instantiate()
 			add_child(layer_effect_settings)
 		return layer_effect_settings
+var global_layer_visibility := true
+var global_layer_lock := false
+var global_layer_expand := true
 
-@onready var old_scroll := 0  ## The previous scroll state of $ScrollContainer
+@onready var animation_timer := $AnimationTimer as Timer
+@onready var old_scroll := 0  ## The previous scroll state of $ScrollContainer.
 @onready var tag_spacer := %TagSpacer as Control
 @onready var layer_settings_container := %LayerSettingsContainer as VBoxContainer
 @onready var layer_container := %LayerContainer as VBoxContainer
+@onready var layer_header_container := %LayerHeaderContainer as HBoxContainer
 @onready var add_layer_list := %AddLayerList as MenuButton
 @onready var remove_layer := %RemoveLayer as Button
 @onready var move_up_layer := %MoveUpLayer as Button
@@ -40,6 +47,7 @@ var layer_effect_settings: AcceptDialog:
 @onready var frame_scroll_bar := %FrameScrollBar as HScrollBar
 @onready var tag_scroll_container := %TagScroll as ScrollContainer
 @onready var layer_frame_h_split := %LayerFrameHSplit as HSplitContainer
+@onready var layer_frame_header_h_split := %LayerFrameHeaderHSplit as HSplitContainer
 @onready var delete_frame := %DeleteFrame as Button
 @onready var move_frame_left := %MoveFrameLeft as Button
 @onready var move_frame_right := %MoveFrameRight as Button
@@ -57,44 +65,19 @@ func _ready() -> void:
 	Global.control.find_child("LayerProperties").layer_property_changed.connect(_update_layer_ui)
 	min_cel_size = get_tree().current_scene.theme.default_font_size + 24
 	layer_container.custom_minimum_size.x = layer_settings_container.size.x + 12
+	layer_header_container.custom_minimum_size.x = layer_container.custom_minimum_size.x
 	cel_size = min_cel_size
 	cel_size_slider.min_value = min_cel_size
 	cel_size_slider.max_value = max_cel_size
 	cel_size_slider.value = cel_size
 	add_layer_list.get_popup().id_pressed.connect(add_layer)
 	frame_scroll_bar.value_changed.connect(_frame_scroll_changed)
-	Global.animation_timer.wait_time = 1 / Global.current_project.fps
+	animation_timer.wait_time = 1 / Global.current_project.fps
 	fps_spinbox.value = Global.current_project.fps
-
-	# Fill the blend modes OptionButton with items
-	blend_modes_button.add_item("Normal", BaseLayer.BlendModes.NORMAL)
-	blend_modes_button.add_separator("Darken")
-	blend_modes_button.add_item("Darken", BaseLayer.BlendModes.DARKEN)
-	blend_modes_button.add_item("Multiply", BaseLayer.BlendModes.MULTIPLY)
-	blend_modes_button.add_item("Color burn", BaseLayer.BlendModes.COLOR_BURN)
-	blend_modes_button.add_item("Linear burn", BaseLayer.BlendModes.LINEAR_BURN)
-	blend_modes_button.add_separator("Lighten")
-	blend_modes_button.add_item("Lighten", BaseLayer.BlendModes.LIGHTEN)
-	blend_modes_button.add_item("Screen", BaseLayer.BlendModes.SCREEN)
-	blend_modes_button.add_item("Color dodge", BaseLayer.BlendModes.COLOR_DODGE)
-	blend_modes_button.add_item("Add", BaseLayer.BlendModes.ADD)
-	blend_modes_button.add_separator("Contrast")
-	blend_modes_button.add_item("Overlay", BaseLayer.BlendModes.OVERLAY)
-	blend_modes_button.add_item("Soft light", BaseLayer.BlendModes.SOFT_LIGHT)
-	blend_modes_button.add_item("Hard light", BaseLayer.BlendModes.HARD_LIGHT)
-	blend_modes_button.add_separator("Inversion")
-	blend_modes_button.add_item("Difference", BaseLayer.BlendModes.DIFFERENCE)
-	blend_modes_button.add_item("Exclusion", BaseLayer.BlendModes.EXCLUSION)
-	blend_modes_button.add_item("Subtract", BaseLayer.BlendModes.SUBTRACT)
-	blend_modes_button.add_item("Divide", BaseLayer.BlendModes.DIVIDE)
-	blend_modes_button.add_separator("Component")
-	blend_modes_button.add_item("Hue", BaseLayer.BlendModes.HUE)
-	blend_modes_button.add_item("Saturation", BaseLayer.BlendModes.SATURATION)
-	blend_modes_button.add_item("Color", BaseLayer.BlendModes.COLOR)
-	blend_modes_button.add_item("Luminosity", BaseLayer.BlendModes.LUMINOSITY)
-
-	# Config loading
+	_fill_blend_modes_option_button()
+	# Config loading.
 	layer_frame_h_split.split_offset = Global.config_cache.get_value("timeline", "layer_size", 0)
+	layer_frame_header_h_split.split_offset = layer_frame_h_split.split_offset
 	cel_size = Global.config_cache.get_value("timeline", "cel_size", cel_size)  # Call setter
 	var past_rate = Global.config_cache.get_value(
 		"timeline", "past_rate", Global.onion_skinning_past_rate
@@ -111,12 +94,16 @@ func _ready() -> void:
 	var future_above = Global.config_cache.get_value(
 		"timeline", "future_above_canvas", future_above_canvas
 	)
+	var onion_skinning_opacity = Global.config_cache.get_value(
+		"timeline", "onion_skinning_opacity", 0.6
+	)
+	%OnionSkinningOpacity.value = onion_skinning_opacity * 100.0
 	%PastOnionSkinning.value = past_rate
 	%FutureOnionSkinning.value = future_rate
 	%BlueRedMode.button_pressed = blue_red
 	%PastPlacement.select(0 if past_above else 1)
 	%FuturePlacement.select(0 if future_above else 1)
-	# emit signals that were supposed to be emitted (Check if it's still required in godot 4)
+	# Emit signals that were supposed to be emitted.
 	%PastPlacement.item_selected.emit(0 if past_above else 1)
 	%FuturePlacement.item_selected.emit(0 if future_above else 1)
 	Global.cel_switched.connect(_cel_switched)
@@ -131,6 +118,7 @@ func _notification(what: int) -> void:
 		await get_tree().process_frame
 		if is_instance_valid(layer_settings_container):
 			layer_container.custom_minimum_size.x = layer_settings_container.size.x + 12
+			layer_header_container.custom_minimum_size.x = layer_container.custom_minimum_size.x
 
 
 func _input(event: InputEvent) -> void:
@@ -153,6 +141,22 @@ func _input(event: InputEvent) -> void:
 	if timeline_rect.has_point(mouse_pos):
 		if Input.is_key_pressed(KEY_CTRL):
 			cel_size += (2 * int(event.is_action("zoom_in")) - 2 * int(event.is_action("zoom_out")))
+			get_viewport().set_input_as_handled()
+
+
+func reset_settings() -> void:
+	cel_size = 36
+	%OnionSkinningOpacity.value = 60.0
+	%PastOnionSkinning.value = 1
+	%FutureOnionSkinning.value = 1
+	%BlueRedMode.button_pressed = false
+	%PastPlacement.select(0)
+	%FuturePlacement.select(0)
+	%PastPlacement.item_selected.emit(0)
+	%FuturePlacement.item_selected.emit(0)
+	for onion_skinning_node: Node2D in get_tree().get_nodes_in_group("canvas_onion_skinning"):
+		onion_skinning_node.opacity = 0.6
+		onion_skinning_node.queue_redraw()
 
 
 func _get_minimum_size() -> Vector2:
@@ -220,6 +224,49 @@ func _cel_size_changed(value: int) -> void:
 		tag_c.update_position_and_size()
 
 
+## Fill the blend modes OptionButton with items
+func _fill_blend_modes_option_button() -> void:
+	blend_modes_button.clear()
+	var selected_layers_are_groups := true
+	if Global.current_project.layers.size() == 0:
+		selected_layers_are_groups = false
+	else:
+		for idx_pair in Global.current_project.selected_cels:
+			var layer := Global.current_project.layers[idx_pair[1]]
+			if not layer is GroupLayer:
+				selected_layers_are_groups = false
+				break
+	if selected_layers_are_groups:
+		# Special blend mode that appears only when group layers are selected
+		blend_modes_button.add_item("Pass through", BaseLayer.BlendModes.PASS_THROUGH)
+	blend_modes_button.add_item("Normal", BaseLayer.BlendModes.NORMAL)
+	blend_modes_button.add_item("Erase", BaseLayer.BlendModes.ERASE)
+	blend_modes_button.add_separator("Darken")
+	blend_modes_button.add_item("Darken", BaseLayer.BlendModes.DARKEN)
+	blend_modes_button.add_item("Multiply", BaseLayer.BlendModes.MULTIPLY)
+	blend_modes_button.add_item("Color burn", BaseLayer.BlendModes.COLOR_BURN)
+	blend_modes_button.add_item("Linear burn", BaseLayer.BlendModes.LINEAR_BURN)
+	blend_modes_button.add_separator("Lighten")
+	blend_modes_button.add_item("Lighten", BaseLayer.BlendModes.LIGHTEN)
+	blend_modes_button.add_item("Screen", BaseLayer.BlendModes.SCREEN)
+	blend_modes_button.add_item("Color dodge", BaseLayer.BlendModes.COLOR_DODGE)
+	blend_modes_button.add_item("Add", BaseLayer.BlendModes.ADD)
+	blend_modes_button.add_separator("Contrast")
+	blend_modes_button.add_item("Overlay", BaseLayer.BlendModes.OVERLAY)
+	blend_modes_button.add_item("Soft light", BaseLayer.BlendModes.SOFT_LIGHT)
+	blend_modes_button.add_item("Hard light", BaseLayer.BlendModes.HARD_LIGHT)
+	blend_modes_button.add_separator("Inversion")
+	blend_modes_button.add_item("Difference", BaseLayer.BlendModes.DIFFERENCE)
+	blend_modes_button.add_item("Exclusion", BaseLayer.BlendModes.EXCLUSION)
+	blend_modes_button.add_item("Subtract", BaseLayer.BlendModes.SUBTRACT)
+	blend_modes_button.add_item("Divide", BaseLayer.BlendModes.DIVIDE)
+	blend_modes_button.add_separator("Component")
+	blend_modes_button.add_item("Hue", BaseLayer.BlendModes.HUE)
+	blend_modes_button.add_item("Saturation", BaseLayer.BlendModes.SATURATION)
+	blend_modes_button.add_item("Color", BaseLayer.BlendModes.COLOR)
+	blend_modes_button.add_item("Luminosity", BaseLayer.BlendModes.LUMINOSITY)
+
+
 func _on_blend_modes_item_selected(index: int) -> void:
 	var project := Global.current_project
 	var current_mode := blend_modes_button.get_item_id(index)
@@ -231,14 +278,19 @@ func _on_blend_modes_item_selected(index: int) -> void:
 		project.undo_redo.add_undo_property(layer, "blend_mode", previous_mode)
 	project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
 	project.undo_redo.add_do_method(_update_layer_ui)
-	project.undo_redo.add_do_method(Global.canvas.draw_layers)
+	project.undo_redo.add_do_method(_update_layers)
 	project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
 	project.undo_redo.add_undo_method(_update_layer_ui)
-	project.undo_redo.add_undo_method(Global.canvas.draw_layers)
+	project.undo_redo.add_undo_method(_update_layers)
 	project.undo_redo.commit_action()
 	SteamManager.set_achievement("ACH_BLEND_IN")
 
 
+func _update_layers() -> void:
+	Global.canvas.update_all_layers = true
+	Global.canvas.draw_layers()
+
+
 func add_frame() -> void:
 	var project := Global.current_project
 	var frame_add_index := project.current_frame + 1
@@ -570,16 +622,16 @@ func _on_timeline_settings_button_pressed() -> void:
 func _on_LoopAnim_pressed() -> void:
 	var texture_button: TextureRect = loop_animation_button.get_child(0)
 	match animation_loop:
-		0:  # Make it loop
-			animation_loop = 1
+		LoopType.NO:
+			animation_loop = LoopType.CYCLE
 			Global.change_button_texturerect(texture_button, "loop.png")
 			loop_animation_button.tooltip_text = "Cycle loop"
-		1:  # Make it ping-pong
-			animation_loop = 2
+		LoopType.CYCLE:
+			animation_loop = LoopType.PINGPONG
 			Global.change_button_texturerect(texture_button, "loop_pingpong.png")
 			loop_animation_button.tooltip_text = "Ping-pong loop"
-		2:  # Make it stop
-			animation_loop = 0
+		LoopType.PINGPONG:
+			animation_loop = LoopType.NO
 			Global.change_button_texturerect(texture_button, "loop_none.png")
 			loop_animation_button.tooltip_text = "No loop"
 
@@ -605,7 +657,7 @@ func _on_AnimationTimer_timeout() -> void:
 	if first_frame == last_frame:
 		play_forward.button_pressed = false
 		play_backwards.button_pressed = false
-		Global.animation_timer.stop()
+		animation_timer.stop()
 		return
 
 	Global.canvas.selection.transform_content_confirm()
@@ -615,26 +667,24 @@ func _on_AnimationTimer_timeout() -> void:
 		if project.current_frame < last_frame:
 			project.selected_cels.clear()
 			project.change_cel(project.current_frame + 1, -1)
-			Global.animation_timer.wait_time = (
-				project.frames[project.current_frame].duration * (1 / fps)
-			)
-			Global.animation_timer.start()  # Change the frame, change the wait time and start a cycle
+			animation_timer.wait_time = project.frames[project.current_frame].duration * (1.0 / fps)
+			animation_timer.start()  # Change the frame, change the wait time and start a cycle
 		else:
 			match animation_loop:
-				0:  # No loop
+				LoopType.NO:
 					play_forward.button_pressed = false
 					play_backwards.button_pressed = false
-					Global.animation_timer.stop()
+					animation_timer.stop()
 					animation_finished.emit()
 					is_animation_running = false
-				1:  # Cycle loop
+				LoopType.CYCLE:
 					project.selected_cels.clear()
 					project.change_cel(first_frame, -1)
-					Global.animation_timer.wait_time = (
+					animation_timer.wait_time = (
 						project.frames[project.current_frame].duration * (1 / fps)
 					)
-					Global.animation_timer.start()
-				2:  # Ping pong loop
+					animation_timer.start()
+				LoopType.PINGPONG:
 					animation_forward = false
 					_on_AnimationTimer_timeout()
 
@@ -642,26 +692,24 @@ func _on_AnimationTimer_timeout() -> void:
 		if project.current_frame > first_frame:
 			project.selected_cels.clear()
 			project.change_cel(project.current_frame - 1, -1)
-			Global.animation_timer.wait_time = (
-				project.frames[project.current_frame].duration * (1 / fps)
-			)
-			Global.animation_timer.start()
+			animation_timer.wait_time = project.frames[project.current_frame].duration * (1.0 / fps)
+			animation_timer.start()
 		else:
 			match animation_loop:
-				0:  # No loop
+				LoopType.NO:
 					play_backwards.button_pressed = false
 					play_forward.button_pressed = false
-					Global.animation_timer.stop()
+					animation_timer.stop()
 					animation_finished.emit()
 					is_animation_running = false
-				1:  # Cycle loop
+				LoopType.CYCLE:
 					project.selected_cels.clear()
 					project.change_cel(last_frame, -1)
-					Global.animation_timer.wait_time = (
+					animation_timer.wait_time = (
 						project.frames[project.current_frame].duration * (1 / fps)
 					)
-					Global.animation_timer.start()
-				2:  # Ping pong loop
+					animation_timer.start()
+				LoopType.PINGPONG:
 					animation_forward = true
 					_on_AnimationTimer_timeout()
 	frame_scroll_container.ensure_control_visible(
@@ -700,16 +748,16 @@ func play_animation(play: bool, forward_dir: bool) -> void:
 		play_forward.toggled.connect(_on_PlayForward_toggled)
 
 	if play:
-		Global.animation_timer.set_one_shot(true)  # wait_time can't change correctly if it's playing
+		animation_timer.set_one_shot(true)  # wait_time can't change correctly if it's playing
 		var duration: float = (
 			Global.current_project.frames[Global.current_project.current_frame].duration
 		)
-		Global.animation_timer.wait_time = duration * (1 / Global.current_project.fps)
-		Global.animation_timer.start()
+		animation_timer.wait_time = duration * (1 / Global.current_project.fps)
+		animation_timer.start()
 		animation_forward = forward_dir
 		animation_started.emit(forward_dir)
 	else:
-		Global.animation_timer.stop()
+		animation_timer.stop()
 		animation_finished.emit()
 
 	is_animation_running = play
@@ -745,7 +793,7 @@ func _on_FirstFrame_pressed() -> void:
 
 func _on_FPSValue_value_changed(value: float) -> void:
 	Global.current_project.fps = value
-	Global.animation_timer.wait_time = 1 / Global.current_project.fps
+	animation_timer.wait_time = 1 / Global.current_project.fps
 
 
 func _on_PastOnionSkinning_value_changed(value: float) -> void:
@@ -1005,6 +1053,7 @@ func _on_MergeDownLayer_pressed() -> void:
 		textures.append(top_image)
 		var metadata_image := Image.create(2, 4, false, Image.FORMAT_R8)
 		DrawingAlgos.set_layer_metadata_image(bottom_layer, bottom_cel, metadata_image, 0)
+		metadata_image.set_pixel(0, 1, Color(1.0, 0.0, 0.0, 0.0))
 		DrawingAlgos.set_layer_metadata_image(top_layer, top_cel, metadata_image, 1)
 		var texture_array := Texture2DArray.new()
 		texture_array.create_from_images(textures)
@@ -1070,6 +1119,7 @@ func _on_timeline_settings_visibility_changed() -> void:
 func _cel_switched() -> void:
 	_toggle_frame_buttons()
 	_toggle_layer_buttons()
+	_fill_blend_modes_option_button()
 	# Temporarily disconnect it in order to prevent layer opacity changing
 	# in the rest of the selected layers, if there are any.
 	opacity_slider.value_changed.disconnect(_on_opacity_slider_value_changed)
@@ -1079,10 +1129,9 @@ func _cel_switched() -> void:
 
 func _update_layer_ui() -> void:
 	var project := Global.current_project
-	opacity_slider.value = project.layers[project.current_layer].opacity * 100
-	var blend_mode_index := blend_modes_button.get_item_index(
-		project.layers[project.current_layer].blend_mode
-	)
+	var layer := project.layers[project.current_layer]
+	opacity_slider.value = layer.opacity * 100
+	var blend_mode_index := blend_modes_button.get_item_index(layer.blend_mode)
 	blend_modes_button.selected = blend_mode_index
 
 
@@ -1210,12 +1259,14 @@ func project_layer_added(layer: int) -> void:
 	Global.layer_vbox.move_child(layer_button, count - 1 - layer)
 	Global.cel_vbox.add_child(cel_hbox)
 	Global.cel_vbox.move_child(cel_hbox, count - 1 - layer)
+	update_global_layer_buttons()
 
 
 func project_layer_removed(layer: int) -> void:
 	var count := Global.layer_vbox.get_child_count()
 	Global.layer_vbox.get_child(count - 1 - layer).free()
 	Global.cel_vbox.get_child(count - 1 - layer).free()
+	update_global_layer_buttons()
 
 
 func project_cel_added(frame: int, layer: int) -> void:
@@ -1240,3 +1291,72 @@ func _on_layer_fx_pressed() -> void:
 
 func _on_cel_size_slider_value_changed(value: float) -> void:
 	cel_size = value
+
+
+func _on_onion_skinning_opacity_value_changed(value: float) -> void:
+	var onion_skinning_opacity := value / 100.0
+	Global.config_cache.set_value("timeline", "onion_skinning_opacity", onion_skinning_opacity)
+	for onion_skinning_node: Node2D in get_tree().get_nodes_in_group("canvas_onion_skinning"):
+		onion_skinning_node.opacity = onion_skinning_opacity
+		onion_skinning_node.queue_redraw()
+
+
+func _on_global_visibility_button_pressed() -> void:
+	var layer_visible := !global_layer_visibility
+	for layer_button: LayerButton in Global.layer_vbox.get_children():
+		var layer: BaseLayer = Global.current_project.layers[layer_button.layer_index]
+		if layer.parent == null and layer.visible != layer_visible:
+			layer_button.visibility_button.pressed.emit()
+
+
+func _on_global_lock_button_pressed() -> void:
+	var locked := !global_layer_lock
+	for layer_button: LayerButton in Global.layer_vbox.get_children():
+		var layer: BaseLayer = Global.current_project.layers[layer_button.layer_index]
+		if layer.parent == null and layer.locked != locked:
+			layer_button.lock_button.pressed.emit()
+
+
+func _on_global_expand_button_pressed() -> void:
+	var expand := !global_layer_expand
+	for layer_button: LayerButton in Global.layer_vbox.get_children():
+		var layer: BaseLayer = Global.current_project.layers[layer_button.layer_index]
+		if layer.parent == null and layer is GroupLayer and layer.expanded != expand:
+			layer_button.expand_button.pressed.emit()
+
+
+func update_global_layer_buttons() -> void:
+	global_layer_visibility = false
+	global_layer_lock = true
+	global_layer_expand = true
+	for layer: BaseLayer in Global.current_project.layers:
+		if layer.parent == null:
+			if layer.visible:
+				global_layer_visibility = true
+			if not layer.locked:
+				global_layer_lock = false
+			if layer is GroupLayer and not layer.expanded:
+				global_layer_expand = false
+			if global_layer_visibility and not global_layer_lock and not global_layer_expand:
+				break
+	if global_layer_visibility:
+		Global.change_button_texturerect(%GlobalVisibilityButton.get_child(0), "layer_visible.png")
+	else:
+		Global.change_button_texturerect(
+			%GlobalVisibilityButton.get_child(0), "layer_invisible.png"
+		)
+	if global_layer_lock:
+		Global.change_button_texturerect(%GlobalLockButton.get_child(0), "lock.png")
+	else:
+		Global.change_button_texturerect(%GlobalLockButton.get_child(0), "unlock.png")
+	if global_layer_expand:
+		Global.change_button_texturerect(%GlobalExpandButton.get_child(0), "group_expanded.png")
+	else:
+		Global.change_button_texturerect(%GlobalExpandButton.get_child(0), "group_collapsed.png")
+
+
+func _on_layer_frame_h_split_dragged(offset: int) -> void:
+	if layer_frame_header_h_split.split_offset != offset:
+		layer_frame_header_h_split.split_offset = offset
+	if layer_frame_h_split.split_offset != offset:
+		layer_frame_h_split.split_offset = offset
diff --git a/src/UI/Timeline/AnimationTimeline.tscn b/src/UI/Timeline/AnimationTimeline.tscn
index 57daca63c..efb04ba70 100644
--- a/src/UI/Timeline/AnimationTimeline.tscn
+++ b/src/UI/Timeline/AnimationTimeline.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=73 format=3 uid="uid://dbr6mulku2qju"]
+[gd_scene load_steps=76 format=3 uid="uid://dbr6mulku2qju"]
 
 [ext_resource type="Script" path="res://src/UI/Timeline/AnimationTimeline.gd" id="1"]
 [ext_resource type="Texture2D" uid="uid://d36mlbmq06q4e" path="res://assets/graphics/layers/new.png" id="2"]
@@ -18,10 +18,13 @@
 [ext_resource type="Texture2D" uid="uid://c7smxwfa8826j" path="res://assets/graphics/timeline/play.png" id="22"]
 [ext_resource type="Texture2D" uid="uid://cw7nn7360atot" path="res://assets/graphics/timeline/previous_frame.png" id="23"]
 [ext_resource type="Texture2D" uid="uid://esistdjfbrc4" path="res://assets/graphics/timeline/play_backwards.png" id="24"]
+[ext_resource type="Texture2D" uid="uid://c2b3htff5yox8" path="res://assets/graphics/layers/layer_visible.png" id="24_6ikqj"]
 [ext_resource type="Texture2D" uid="uid://l4jj86y1hukm" path="res://assets/graphics/timeline/go_to_last_frame.png" id="25"]
+[ext_resource type="Texture2D" uid="uid://dhc0pnnqojd2m" path="res://assets/graphics/layers/unlock.png" id="25_7x5su"]
 [ext_resource type="Texture2D" uid="uid://b2ndrc0cvy1m5" path="res://assets/graphics/timeline/next_frame.png" id="26"]
 [ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="26_tfw1u"]
 [ext_resource type="Texture2D" uid="uid://cerkv5yx4cqeh" path="res://assets/graphics/timeline/copy_frame.png" id="27"]
+[ext_resource type="Texture2D" uid="uid://dndlglvqc7v6a" path="res://assets/graphics/layers/group_expanded.png" id="27_lrc8y"]
 [ext_resource type="Texture2D" uid="uid://dukip7mvotxsp" path="res://assets/graphics/timeline/onion_skinning_off.png" id="29"]
 [ext_resource type="Texture2D" uid="uid://dinubfua8gqhw" path="res://assets/graphics/timeline/expandable.png" id="30"]
 [ext_resource type="Texture2D" uid="uid://fbwld5ofmocm" path="res://assets/graphics/timeline/loop.png" id="31"]
@@ -238,7 +241,6 @@ offset_bottom = 10.0
 mouse_default_cursor_shape = 2
 item_count = 3
 popup/item_0/text = "Add Pixel Layer"
-popup/item_0/id = 0
 popup/item_1/text = "Add Group Layer"
 popup/item_1/id = 1
 popup/item_2/text = "Add 3D Layer"
@@ -587,7 +589,7 @@ texture = ExtResource("23")
 unique_name_in_owner = true
 custom_minimum_size = Vector2(24, 24)
 layout_mode = 2
-tooltip_text = "Play the animation backwards (from end to beginning)"
+tooltip_text = "Play the animation backwards"
 focus_mode = 0
 mouse_default_cursor_shape = 2
 toggle_mode = true
@@ -610,7 +612,7 @@ unique_name_in_owner = true
 custom_minimum_size = Vector2(24, 24)
 layout_mode = 2
 size_flags_horizontal = 0
-tooltip_text = "Play the animation forward (from beginning to end)"
+tooltip_text = "Play the animation forward"
 focus_mode = 0
 mouse_default_cursor_shape = 2
 toggle_mode = true
@@ -784,22 +786,155 @@ mouse_filter = 1
 [node name="MainBodyVBoxContainer" type="VBoxContainer" parent="TimelineContainer/MainBodyPanel"]
 layout_mode = 2
 size_flags_horizontal = 3
+theme_override_constants/separation = 0
+
+[node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer"]
+clip_contents = true
+custom_minimum_size = Vector2(0, 38)
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_constants/margin_bottom = 0
+
+[node name="LayerFrameHeaderHSplit" type="HSplitContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+theme_override_constants/separation = 6
+theme_override_constants/minimum_grab_thickness = 12
+theme_override_icons/grabber = SubResource("ImageTexture_ku1qg")
+
+[node name="LayerHeaderContainer" type="HBoxContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit"]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(84, 0)
+layout_mode = 2
+size_flags_vertical = 0
+theme_override_constants/separation = 0
+
+[node name="GlobalVisibilityButton" type="Button" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer" groups=["UIButtons"]]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(28, 22)
+layout_mode = 2
+tooltip_text = "Toggle layer's visibility"
+focus_mode = 0
+mouse_default_cursor_shape = 2
+
+[node name="TextureRect" type="TextureRect" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer/GlobalVisibilityButton"]
+layout_mode = 0
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -11.0
+offset_top = -11.0
+offset_right = 11.0
+offset_bottom = 11.0
+size_flags_horizontal = 0
+size_flags_vertical = 0
+texture = ExtResource("24_6ikqj")
+
+[node name="GlobalLockButton" type="Button" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer" groups=["UIButtons"]]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(28, 22)
+layout_mode = 2
+tooltip_text = "Lock/unlock layer"
+focus_mode = 0
+mouse_default_cursor_shape = 2
+
+[node name="TextureRect" type="TextureRect" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer/GlobalLockButton"]
+layout_mode = 0
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -11.0
+offset_top = -11.0
+offset_right = 11.0
+offset_bottom = 11.0
+size_flags_horizontal = 0
+size_flags_vertical = 0
+texture = ExtResource("25_7x5su")
+
+[node name="GlobalExpandButton" type="Button" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer" groups=["UIButtons"]]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(28, 22)
+layout_mode = 2
+tooltip_text = "Expand/collapse group"
+focus_mode = 0
+mouse_default_cursor_shape = 2
+
+[node name="TextureRect" type="TextureRect" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer/GlobalExpandButton"]
+layout_mode = 0
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -11.0
+offset_top = -11.0
+offset_right = 11.0
+offset_bottom = 11.0
+size_flags_horizontal = 0
+size_flags_vertical = 0
+texture = ExtResource("27_lrc8y")
+
+[node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_constants/margin_left = 0
+theme_override_constants/margin_top = 2
+theme_override_constants/margin_right = 1
+theme_override_constants/margin_bottom = 0
+
+[node name="OpacitySlider" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer/MarginContainer" instance=ExtResource("9")]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 29)
+layout_mode = 2
+size_flags_vertical = 0
+value = 100.0
+prefix = "Opacity:"
+
+[node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit"]
+layout_mode = 2
+theme_override_constants/margin_left = -2
+theme_override_constants/margin_top = 0
+theme_override_constants/margin_right = 0
+theme_override_constants/margin_bottom = 0
+
+[node name="FrameScrollHeaderContainer" type="Container" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/MarginContainer" node_paths=PackedStringArray("h_scroll_bar")]
+clip_contents = true
+layout_mode = 2
+script = ExtResource("11")
+h_scroll_bar = NodePath("../../../../FrameScrollBar")
+
+[node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/MarginContainer/FrameScrollHeaderContainer"]
+layout_mode = 2
+theme_override_constants/margin_left = 1
+theme_override_constants/margin_top = 2
+theme_override_constants/margin_right = 0
+theme_override_constants/margin_bottom = 0
+
+[node name="FrameHBox" type="HBoxContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/MarginContainer/FrameScrollHeaderContainer/MarginContainer"]
+custom_minimum_size = Vector2(0, 30)
+layout_mode = 2
+theme_override_constants/separation = 0
 
 [node name="TimelineScroll" type="ScrollContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer"]
 layout_mode = 2
 size_flags_vertical = 3
+vertical_scroll_mode = 2
 
 [node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll"]
 layout_mode = 2
 size_flags_horizontal = 3
 size_flags_vertical = 3
+theme_override_constants/margin_right = 0
 
 [node name="LayerFrameHSplit" type="HSplitContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer"]
 unique_name_in_owner = true
 layout_mode = 2
 size_flags_horizontal = 3
 size_flags_vertical = 3
-theme_override_constants/separation = 0
+theme_override_constants/separation = 6
 theme_override_constants/minimum_grab_thickness = 12
 theme_override_icons/grabber = SubResource("ImageTexture_ku1qg")
 
@@ -808,21 +943,6 @@ unique_name_in_owner = true
 layout_mode = 2
 theme_override_constants/separation = 1
 
-[node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer"]
-layout_mode = 2
-theme_override_constants/margin_left = 0
-theme_override_constants/margin_top = 2
-theme_override_constants/margin_right = 1
-theme_override_constants/margin_bottom = 0
-
-[node name="OpacitySlider" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer/MarginContainer" instance=ExtResource("9")]
-unique_name_in_owner = true
-custom_minimum_size = Vector2(0, 29)
-layout_mode = 2
-size_flags_vertical = 0
-value = 100.0
-prefix = "Opacity:"
-
 [node name="LayerVBox" type="VBoxContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer"]
 layout_mode = 2
 size_flags_horizontal = 3
@@ -831,7 +951,7 @@ theme_override_constants/separation = 0
 [node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit"]
 layout_mode = 2
 theme_override_constants/margin_left = -2
-theme_override_constants/margin_top = 0
+theme_override_constants/margin_top = -2
 theme_override_constants/margin_right = 0
 theme_override_constants/margin_bottom = 0
 
@@ -840,7 +960,7 @@ unique_name_in_owner = true
 clip_contents = true
 layout_mode = 2
 script = ExtResource("11")
-h_scroll_bar = NodePath("../../../../../BreakFreeFromContainer/FrameScrollBar")
+h_scroll_bar = NodePath("../../../../../FrameScrollBar")
 
 [node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/MarginContainer/FrameScrollContainer"]
 layout_mode = 2
@@ -849,28 +969,14 @@ theme_override_constants/margin_top = 2
 theme_override_constants/margin_right = 0
 theme_override_constants/margin_bottom = 0
 
-[node name="FrameAndCelBox" type="VBoxContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/MarginContainer/FrameScrollContainer/MarginContainer"]
+[node name="CelVBox" type="VBoxContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/MarginContainer/FrameScrollContainer/MarginContainer"]
 layout_mode = 2
 theme_override_constants/separation = 0
 
-[node name="FrameHBox" type="HBoxContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/MarginContainer/FrameScrollContainer/MarginContainer/FrameAndCelBox"]
-custom_minimum_size = Vector2(0, 30)
-layout_mode = 2
-theme_override_constants/separation = 0
-
-[node name="CelVBox" type="VBoxContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/MarginContainer/FrameScrollContainer/MarginContainer/FrameAndCelBox"]
-layout_mode = 2
-theme_override_constants/separation = 0
-
-[node name="BreakFreeFromContainer" type="Control" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer"]
-layout_mode = 2
-
-[node name="FrameScrollBar" type="HScrollBar" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/BreakFreeFromContainer"]
+[node name="FrameScrollBar" type="HScrollBar" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer"]
 unique_name_in_owner = true
-layout_mode = 0
-anchor_right = 1.0
-offset_left = 41.0
-offset_top = -12.0
+z_index = 2
+layout_mode = 2
 size_flags_horizontal = 3
 
 [node name="AnimationTimer" type="Timer" parent="."]
@@ -976,7 +1082,6 @@ size_flags_horizontal = 3
 mouse_default_cursor_shape = 2
 item_count = 2
 popup/item_0/text = "Above canvas"
-popup/item_0/id = 0
 popup/item_1/text = "Below canvas"
 popup/item_1/id = 1
 
@@ -990,10 +1095,18 @@ layout_mode = 2
 mouse_default_cursor_shape = 2
 item_count = 2
 popup/item_0/text = "Above canvas"
-popup/item_0/id = 0
 popup/item_1/text = "Below canvas"
 popup/item_1/id = 1
 
+[node name="OnionSkinningOpacityLabel" type="Label" parent="TimelineSettings/MarginContainer/VBoxContainer/OnionSkinningOptionsContainer"]
+layout_mode = 2
+text = "Opacity"
+
+[node name="OnionSkinningOpacity" parent="TimelineSettings/MarginContainer/VBoxContainer/OnionSkinningOptionsContainer" instance=ExtResource("9")]
+unique_name_in_owner = true
+layout_mode = 2
+suffix = "%"
+
 [node name="BlueRedMode" type="CheckBox" parent="TimelineSettings/MarginContainer/VBoxContainer"]
 unique_name_in_owner = true
 layout_mode = 2
@@ -1033,8 +1146,14 @@ color = Color(0, 0.741176, 1, 0.501961)
 [connection signal="pressed" from="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons/OnionSkinning" to="." method="_on_OnionSkinning_pressed"]
 [connection signal="pressed" from="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons/LoopAnim" to="." method="_on_LoopAnim_pressed"]
 [connection signal="value_changed" from="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons/FPSValue" to="." method="_on_FPSValue_value_changed"]
+[connection signal="dragged" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit" to="." method="_on_layer_frame_h_split_dragged"]
+[connection signal="gui_input" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit" to="." method="_on_LayerFrameSplitContainer_gui_input"]
+[connection signal="pressed" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer/GlobalVisibilityButton" to="." method="_on_global_visibility_button_pressed"]
+[connection signal="pressed" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer/GlobalLockButton" to="." method="_on_global_lock_button_pressed"]
+[connection signal="pressed" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer/GlobalExpandButton" to="." method="_on_global_expand_button_pressed"]
+[connection signal="value_changed" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer/MarginContainer/OpacitySlider" to="." method="_on_opacity_slider_value_changed"]
+[connection signal="dragged" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit" to="." method="_on_layer_frame_h_split_dragged"]
 [connection signal="gui_input" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit" to="." method="_on_LayerFrameSplitContainer_gui_input"]
-[connection signal="value_changed" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer/MarginContainer/OpacitySlider" to="." method="_on_opacity_slider_value_changed"]
 [connection signal="resized" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer/LayerVBox" to="." method="_on_LayerVBox_resized"]
 [connection signal="timeout" from="AnimationTimer" to="." method="_on_AnimationTimer_timeout"]
 [connection signal="close_requested" from="TimelineSettings" to="." method="_on_timeline_settings_close_requested"]
@@ -1045,4 +1164,5 @@ color = Color(0, 0.741176, 1, 0.501961)
 [connection signal="value_changed" from="TimelineSettings/MarginContainer/VBoxContainer/OnionSkinningOptionsContainer/FutureOnionSkinning" to="." method="_on_FutureOnionSkinning_value_changed"]
 [connection signal="item_selected" from="TimelineSettings/MarginContainer/VBoxContainer/OnionSkinningOptionsContainer/PastPlacement" to="." method="_on_PastPlacement_item_selected"]
 [connection signal="item_selected" from="TimelineSettings/MarginContainer/VBoxContainer/OnionSkinningOptionsContainer/FuturePlacement" to="." method="_on_FuturePlacement_item_selected"]
+[connection signal="value_changed" from="TimelineSettings/MarginContainer/VBoxContainer/OnionSkinningOptionsContainer/OnionSkinningOpacity" to="." method="_on_onion_skinning_opacity_value_changed"]
 [connection signal="toggled" from="TimelineSettings/MarginContainer/VBoxContainer/BlueRedMode" to="." method="_on_BlueRedMode_toggled"]
diff --git a/src/UI/Timeline/CelButton.tscn b/src/UI/Timeline/CelButton.tscn
index 77f56cc0d..5861f2f92 100644
--- a/src/UI/Timeline/CelButton.tscn
+++ b/src/UI/Timeline/CelButton.tscn
@@ -59,7 +59,7 @@ grow_vertical = 2
 size_flags_horizontal = 0
 size_flags_vertical = 0
 expand_mode = 1
-stretch_mode = 6
+stretch_mode = 5
 
 [node name="TransparentChecker" parent="CelTexture" instance=ExtResource("2_mi8wp")]
 show_behind_parent = true
diff --git a/src/UI/Timeline/CelProperties.gd b/src/UI/Timeline/CelProperties.gd
index b35e06ba3..0aefdd9da 100644
--- a/src/UI/Timeline/CelProperties.gd
+++ b/src/UI/Timeline/CelProperties.gd
@@ -37,6 +37,7 @@ func _on_opacity_slider_value_changed(value: float) -> void:
 	for cel_index in cel_indices:
 		var cel := Global.current_project.frames[cel_index[0]].cels[cel_index[1]]
 		cel.opacity = value / 100.0
+	Global.canvas.update_all_layers = true
 	Global.canvas.queue_redraw()
 
 
diff --git a/src/UI/Timeline/LayerButton.gd b/src/UI/Timeline/LayerButton.gd
index 4ac8667b6..800fea1e7 100644
--- a/src/UI/Timeline/LayerButton.gd
+++ b/src/UI/Timeline/LayerButton.gd
@@ -99,6 +99,7 @@ func _update_buttons_all_layers() -> void:
 		var expanded := layer.is_expanded_in_hierarchy()
 		layer_button.visible = expanded
 		Global.cel_vbox.get_child(layer_button.get_index()).visible = expanded
+	Global.animation_timeline.update_global_layer_buttons()
 
 
 func _input(event: InputEvent) -> void:
@@ -145,9 +146,7 @@ func _on_main_button_gui_input(event: InputEvent) -> void:
 			line_edit.grab_focus()
 
 	elif event.button_index == MOUSE_BUTTON_RIGHT and event.pressed:
-		var layer := Global.current_project.layers[layer_index]
-		if not layer is GroupLayer:
-			popup_menu.popup_on_parent(Rect2(get_global_mouse_position(), Vector2.ONE))
+		popup_menu.popup_on_parent(Rect2(get_global_mouse_position(), Vector2.ONE))
 
 
 func _on_layer_name_line_edit_focus_exited() -> void:
@@ -222,6 +221,7 @@ func _on_popup_menu_id_pressed(id: int) -> void:
 		layer.clipping_mask = not layer.clipping_mask
 		popup_menu.set_item_checked(id, layer.clipping_mask)
 		clipping_mask_icon.visible = layer.clipping_mask
+		Global.canvas.update_all_layers = true
 		Global.canvas.draw_layers()
 
 
diff --git a/src/UI/Timeline/LayerEffects/LayerEffectsSettings.gd b/src/UI/Timeline/LayerEffects/LayerEffectsSettings.gd
index 32230e239..3e035037b 100644
--- a/src/UI/Timeline/LayerEffects/LayerEffectsSettings.gd
+++ b/src/UI/Timeline/LayerEffects/LayerEffectsSettings.gd
@@ -4,6 +4,10 @@ const LAYER_EFFECT_BUTTON = preload("res://src/UI/Timeline/LayerEffects/LayerEff
 const DELETE_TEXTURE := preload("res://assets/graphics/misc/close.svg")
 
 var effects: Array[LayerEffect] = [
+	LayerEffect.new(
+		"Convolution Matrix", preload("res://src/Shaders/Effects/ConvolutionMatrix.gdshader")
+	),
+	LayerEffect.new("Gaussian Blur", preload("res://src/Shaders/Effects/GaussianBlur.gdshader")),
 	LayerEffect.new("Offset", preload("res://src/Shaders/Effects/OffsetPixels.gdshader")),
 	LayerEffect.new("Outline", preload("res://src/Shaders/Effects/OutlineInline.gdshader")),
 	LayerEffect.new("Drop Shadow", preload("res://src/Shaders/Effects/DropShadow.gdshader")),
@@ -20,6 +24,7 @@ var effects: Array[LayerEffect] = [
 	LayerEffect.new("Pixelize", preload("res://src/Shaders/Effects/Pixelize.gdshader")),
 	LayerEffect.new("Posterize", preload("res://src/Shaders/Effects/Posterize.gdshader")),
 	LayerEffect.new("Gradient Map", preload("res://src/Shaders/Effects/GradientMap.gdshader")),
+	LayerEffect.new("Index Map", preload("res://src/Shaders/Effects/IndexMap.gdshader")),
 ]
 
 @onready var enabled_button: CheckButton = $VBoxContainer/HBoxContainer/EnabledButton
@@ -95,7 +100,7 @@ func _create_effect_ui(layer: BaseLayer, effect: LayerEffect) -> void:
 		hbox.add_child(apply_button)
 	hbox.add_child(delete_button)
 	var parameter_vbox := CollapsibleContainer.new()
-	Global.create_ui_for_shader_uniforms(
+	ShaderLoader.create_ui_for_shader_uniforms(
 		effect.shader,
 		effect.params,
 		parameter_vbox,
diff --git a/src/UI/Timeline/LayerProperties.gd b/src/UI/Timeline/LayerProperties.gd
index 9196933fb..f8753ac85 100644
--- a/src/UI/Timeline/LayerProperties.gd
+++ b/src/UI/Timeline/LayerProperties.gd
@@ -10,9 +10,36 @@ var layer_indices: PackedInt32Array
 @onready var user_data_text_edit := $GridContainer/UserDataTextEdit as TextEdit
 
 
-func _ready() -> void:
-	# Fill the blend modes OptionButton with items
+func _on_visibility_changed() -> void:
+	if layer_indices.size() == 0:
+		return
+	Global.dialog_open(visible)
+	var first_layer := Global.current_project.layers[layer_indices[0]]
+	if visible:
+		_fill_blend_modes_option_button()
+		name_line_edit.text = first_layer.name
+		opacity_slider.value = first_layer.opacity * 100.0
+		var blend_mode_index := blend_modes_button.get_item_index(first_layer.blend_mode)
+		blend_modes_button.selected = blend_mode_index
+		user_data_text_edit.text = first_layer.user_data
+	else:
+		layer_indices = []
+
+
+## Fill the blend modes OptionButton with items
+func _fill_blend_modes_option_button() -> void:
+	blend_modes_button.clear()
+	var selected_layers_are_groups := true
+	for layer_index in layer_indices:
+		var layer := Global.current_project.layers[layer_index]
+		if not layer is GroupLayer:
+			selected_layers_are_groups = false
+			break
+	if selected_layers_are_groups:
+		# Special blend mode that appears only when group layers are selected
+		blend_modes_button.add_item("Pass through", BaseLayer.BlendModes.PASS_THROUGH)
 	blend_modes_button.add_item("Normal", BaseLayer.BlendModes.NORMAL)
+	blend_modes_button.add_item("Erase", BaseLayer.BlendModes.ERASE)
 	blend_modes_button.add_item("Darken", BaseLayer.BlendModes.DARKEN)
 	blend_modes_button.add_item("Multiply", BaseLayer.BlendModes.MULTIPLY)
 	blend_modes_button.add_item("Color burn", BaseLayer.BlendModes.COLOR_BURN)
@@ -34,20 +61,6 @@ func _ready() -> void:
 	blend_modes_button.add_item("Luminosity", BaseLayer.BlendModes.LUMINOSITY)
 
 
-func _on_visibility_changed() -> void:
-	if layer_indices.size() == 0:
-		return
-	Global.dialog_open(visible)
-	var first_layer := Global.current_project.layers[layer_indices[0]]
-	if visible:
-		name_line_edit.text = first_layer.name
-		opacity_slider.value = first_layer.opacity * 100.0
-		blend_modes_button.selected = first_layer.blend_mode
-		user_data_text_edit.text = first_layer.user_data
-	else:
-		layer_indices = []
-
-
 func _on_name_line_edit_text_changed(new_text: String) -> void:
 	if layer_indices.size() == 0:
 		return
@@ -63,18 +76,21 @@ func _on_opacity_slider_value_changed(value: float) -> void:
 		var layer := Global.current_project.layers[layer_index]
 		layer.opacity = value / 100.0
 	_emit_layer_property_signal()
+	Global.canvas.update_all_layers = true
 	Global.canvas.queue_redraw()
 
 
 func _on_blend_mode_option_button_item_selected(index: BaseLayer.BlendModes) -> void:
 	if layer_indices.size() == 0:
 		return
+	Global.canvas.update_all_layers = true
 	var project := Global.current_project
+	var current_mode := blend_modes_button.get_item_id(index)
 	project.undo_redo.create_action("Set Blend Mode")
 	for layer_index in layer_indices:
 		var layer := project.layers[layer_index]
 		var previous_mode := layer.blend_mode
-		project.undo_redo.add_do_property(layer, "blend_mode", index)
+		project.undo_redo.add_do_property(layer, "blend_mode", current_mode)
 		project.undo_redo.add_undo_property(layer, "blend_mode", previous_mode)
 	project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
 	project.undo_redo.add_do_method(Global.canvas.draw_layers)
diff --git a/src/UI/TopMenuContainer/TopMenuContainer.gd b/src/UI/TopMenuContainer/TopMenuContainer.gd
index 42113e54b..43456a878 100644
--- a/src/UI/TopMenuContainer/TopMenuContainer.gd
+++ b/src/UI/TopMenuContainer/TopMenuContainer.gd
@@ -4,7 +4,7 @@ const DOCS_URL := "https://www.oramainteractive.com/Pixelorama-Docs/"
 const ISSUES_URL := "https://github.com/Orama-Interactive/Pixelorama/issues"
 const SUPPORT_URL := "https://www.patreon.com/OramaInteractive"
 # gdlint: ignore=max-line-length
-const CHANGELOG_URL := "https://github.com/Orama-Interactive/Pixelorama/blob/master/CHANGELOG.md#v101---2024-08-05"
+const CHANGELOG_URL := "https://github.com/Orama-Interactive/Pixelorama/blob/master/CHANGELOG.md#v104---2024-10-25"
 const EXTERNAL_LINK_ICON := preload("res://assets/graphics/misc/external_link.svg")
 const PIXELORAMA_ICON := preload("res://assets/graphics/icons/icon_16x16.png")
 const HEART_ICON := preload("res://assets/graphics/misc/heart.svg")
@@ -17,6 +17,7 @@ var zen_mode := false
 var new_image_dialog := Dialog.new("res://src/UI/Dialogs/CreateNewImage.tscn")
 var project_properties_dialog := Dialog.new("res://src/UI/Dialogs/ProjectProperties.tscn")
 var preferences_dialog := Dialog.new("res://src/Preferences/PreferencesDialog.tscn")
+var modify_selection := Dialog.new("res://src/UI/Dialogs/ModifySelection.tscn")
 var offset_image_dialog := Dialog.new("res://src/UI/Dialogs/ImageEffects/OffsetImage.tscn")
 var scale_image_dialog := Dialog.new("res://src/UI/Dialogs/ImageEffects/ScaleImage.tscn")
 var resize_canvas_dialog := Dialog.new("res://src/UI/Dialogs/ImageEffects/ResizeCanvas.tscn")
@@ -30,6 +31,7 @@ var hsv_dialog := Dialog.new("res://src/UI/Dialogs/ImageEffects/HSVDialog.tscn")
 var adjust_brightness_saturation_dialog := Dialog.new(
 	"res://src/UI/Dialogs/ImageEffects/BrightnessContrastDialog.tscn"
 )
+var gaussian_blur_dialog := Dialog.new("res://src/UI/Dialogs/ImageEffects/GaussianBlur.tscn")
 var gradient_dialog := Dialog.new("res://src/UI/Dialogs/ImageEffects/GradientDialog.tscn")
 var gradient_map_dialog := Dialog.new("res://src/UI/Dialogs/ImageEffects/GradientMapDialog.tscn")
 var palettize_dialog := Dialog.new("res://src/UI/Dialogs/ImageEffects/PalettizeDialog.tscn")
@@ -53,6 +55,7 @@ var about_dialog := Dialog.new("res://src/UI/Dialogs/AboutDialog.tscn")
 
 @onready var greyscale_vision: ColorRect = main_ui.find_child("GreyscaleVision")
 @onready var tile_mode_submenu := PopupMenu.new()
+@onready var selection_modify_submenu := PopupMenu.new()
 @onready var snap_to_submenu := PopupMenu.new()
 @onready var panels_submenu := PopupMenu.new()
 @onready var layouts_submenu := PopupMenu.new()
@@ -97,6 +100,19 @@ func _ready() -> void:
 	_setup_help_menu()
 
 
+func _input(event: InputEvent) -> void:
+	# Workaround for https://github.com/Orama-Interactive/Pixelorama/issues/1070
+	if event is InputEventMouseButton and event.pressed:
+		file_menu.activate_item_by_event(event)
+		edit_menu.activate_item_by_event(event)
+		select_menu.activate_item_by_event(event)
+		image_menu.activate_item_by_event(event)
+		effects_menu.activate_item_by_event(event)
+		view_menu.activate_item_by_event(event)
+		window_menu.activate_item_by_event(event)
+		help_menu.activate_item_by_event(event)
+
+
 func _notification(what: int) -> void:
 	if what == NOTIFICATION_TRANSLATION_CHANGED and Global.current_project != null:
 		_update_file_menu_buttons(Global.current_project)
@@ -205,6 +221,7 @@ func _setup_edit_menu() -> void:
 func _setup_view_menu() -> void:
 	# Order as in Global.ViewMenu enum
 	var view_menu_items := {
+		"Center Canvas": "center_canvas",
 		"Tile Mode": "",
 		"Tile Mode Offsets": "",
 		"Grayscale View": "",
@@ -225,6 +242,8 @@ func _setup_view_menu() -> void:
 			_setup_snap_to_submenu(item)
 		elif item == "Tile Mode Offsets":
 			view_menu.add_item(item, i)
+		elif item == "Center Canvas":
+			_set_menu_shortcut(view_menu_items[item], view_menu, i, item)
 		else:
 			_set_menu_shortcut(view_menu_items[item], view_menu, i, item, true)
 	view_menu.set_item_checked(Global.ViewMenu.SHOW_RULERS, true)
@@ -405,6 +424,7 @@ func _setup_effects_menu() -> void:
 		"Palettize": "palettize",
 		"Pixelize": "pixelize",
 		"Posterize": "posterize",
+		"Gaussian Blur": "gaussian_blur",
 		"Gradient": "gradient",
 		"Gradient Map": "gradient_map",
 		# "Shader": ""
@@ -422,17 +442,30 @@ func _setup_select_menu() -> void:
 		"All": "select_all",
 		"Clear": "clear_selection",
 		"Invert": "invert_selection",
-		"Tile Mode": ""
+		"Tile Mode": "",
+		"Modify": ""
 	}
 	for i in select_menu_items.size():
 		var item: String = select_menu_items.keys()[i]
 		if item == "Tile Mode":
 			select_menu.add_check_item(item, i)
+		elif item == "Modify":
+			_setup_selection_modify_submenu(item)
 		else:
 			_set_menu_shortcut(select_menu_items[item], select_menu, i, item)
 	select_menu.id_pressed.connect(select_menu_id_pressed)
 
 
+func _setup_selection_modify_submenu(item: String) -> void:
+	selection_modify_submenu.set_name("selection_modify_submenu")
+	selection_modify_submenu.add_item("Expand")
+	selection_modify_submenu.add_item("Shrink")
+	selection_modify_submenu.add_item("Border")
+	selection_modify_submenu.id_pressed.connect(_selection_modify_submenu_id_pressed)
+	select_menu.add_child(selection_modify_submenu)
+	select_menu.add_submenu_item(item, selection_modify_submenu.get_name())
+
+
 func _setup_help_menu() -> void:
 	# Order as in Global.HelpMenu enum
 	var help_menu_items := {
@@ -533,7 +566,7 @@ func _open_project_file() -> void:
 	if OS.get_name() == "Web":
 		Html5FileExchange.load_image()
 	else:
-		_popup_dialog(Global.open_sprites_dialog)
+		_popup_dialog(Global.control.open_sprite_dialog)
 		Global.control.opensprite_file_selected = false
 
 
@@ -545,6 +578,12 @@ func _on_open_last_project_file_menu_option_pressed() -> void:
 
 
 func _save_project_file() -> void:
+	if Global.current_project is ResourceProject:
+		Global.current_project.resource_updated.emit(Global.current_project)
+		if Global.current_project.has_changed:
+			Global.current_project.has_changed = false
+		Global.notification_label("Resource Updated")
+		return
 	var path: String = Global.current_project.save_path
 	if path == "":
 		Global.control.show_save_dialog()
@@ -591,6 +630,8 @@ func edit_menu_id_pressed(id: int) -> void:
 
 func view_menu_id_pressed(id: int) -> void:
 	match id:
+		Global.ViewMenu.CENTER_CANVAS:
+			Global.camera.offset = Global.current_project.size / 2
 		Global.ViewMenu.TILE_MODE_OFFSETS:
 			_popup_dialog(get_tree().current_scene.tile_mode_offsets_dialog)
 		Global.ViewMenu.GREYSCALE_VIEW:
@@ -641,6 +682,11 @@ func _tile_mode_submenu_id_pressed(id: Tiles.MODE) -> void:
 	get_tree().current_scene.tile_mode_offsets_dialog.change_mask()
 
 
+func _selection_modify_submenu_id_pressed(id: int) -> void:
+	modify_selection.popup()
+	modify_selection.node.type = id
+
+
 func _snap_to_submenu_id_pressed(id: int) -> void:
 	if id == 0:
 		Global.snap_to_rectangular_grid_boundary = !Global.snap_to_rectangular_grid_boundary
@@ -727,8 +773,6 @@ func _toggle_show_pixel_grid() -> void:
 func _toggle_show_rulers() -> void:
 	Global.show_rulers = !Global.show_rulers
 	view_menu.set_item_checked(Global.ViewMenu.SHOW_RULERS, Global.show_rulers)
-	Global.horizontal_ruler.visible = Global.show_rulers
-	Global.vertical_ruler.visible = Global.show_rulers
 
 
 func _toggle_show_guides() -> void:
@@ -811,6 +855,8 @@ func effects_menu_id_pressed(id: int) -> void:
 			hsv_dialog.popup()
 		Global.EffectsMenu.BRIGHTNESS_SATURATION:
 			adjust_brightness_saturation_dialog.popup()
+		Global.EffectsMenu.GAUSSIAN_BLUR:
+			gaussian_blur_dialog.popup()
 		Global.EffectsMenu.GRADIENT:
 			gradient_dialog.popup()
 		Global.EffectsMenu.GRADIENT_MAP:
diff --git a/src/UI/UI.gd b/src/UI/UI.gd
index 3cbc532b0..c95234f6d 100644
--- a/src/UI/UI.gd
+++ b/src/UI/UI.gd
@@ -1,12 +1,28 @@
 extends Panel
 
+var shader_disabled := false
+var transparency_material: ShaderMaterial
+
 @onready var main_canvas_container := find_child("Main Canvas") as Container
 
 
 func _ready() -> void:
+	transparency_material = material
+	main_canvas_container.property_list_changed.connect(_re_configure_shader)
 	update_transparent_shader()
 
 
+func _re_configure_shader():
+	await get_tree().process_frame
+	if get_window() != main_canvas_container.get_window():
+		material = null
+		shader_disabled = true
+	else:
+		if shader_disabled:
+			material = transparency_material
+			shader_disabled = false
+
+
 func _on_main_canvas_item_rect_changed() -> void:
 	update_transparent_shader()
 
@@ -20,6 +36,8 @@ func update_transparent_shader() -> void:
 		return
 	# Works independently of the transparency feature
 	var canvas_size: Vector2 = (main_canvas_container.size - Vector2.DOWN * 2) * Global.shrink
-	material.set_shader_parameter("screen_resolution", get_viewport().size)
-	material.set_shader_parameter("position", main_canvas_container.global_position * Global.shrink)
-	material.set_shader_parameter("size", canvas_size)
+	transparency_material.set_shader_parameter("screen_resolution", get_viewport().size)
+	transparency_material.set_shader_parameter(
+		"position", main_canvas_container.global_position * Global.shrink
+	)
+	transparency_material.set_shader_parameter("size", canvas_size)
diff --git a/src/UI/UI.tscn b/src/UI/UI.tscn
index 844ad29ef..1700b0868 100644
--- a/src/UI/UI.tscn
+++ b/src/UI/UI.tscn
@@ -205,6 +205,7 @@ hidden_tabs = {
 "Reference Images": true,
 "Second Canvas": true
 }
+windows = {}
 save_on_change = false
 
 [sub_resource type="ShaderMaterial" id="2"]
@@ -274,7 +275,7 @@ tab_close_display_policy = 2
 drag_to_rearrange_enabled = true
 script = ExtResource("3")
 
-[node name="HorizontalRuler" type="Button" parent="DockableContainer/Main Canvas"]
+[node name="HorizontalRuler" type="Button" parent="DockableContainer/Main Canvas" groups=["CanvasRulers"]]
 clip_contents = true
 custom_minimum_size = Vector2(0, 16)
 layout_mode = 2
@@ -290,7 +291,7 @@ size_flags_horizontal = 3
 size_flags_vertical = 3
 theme_override_constants/separation = 0
 
-[node name="VerticalRuler" type="Button" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler"]
+[node name="VerticalRuler" type="Button" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler" groups=["CanvasRulers"]]
 clip_contents = true
 custom_minimum_size = Vector2(16, 0)
 layout_mode = 2
@@ -324,7 +325,7 @@ anchors_preset = 0
 
 [node name="Canvas" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer/SubViewport" instance=ExtResource("19")]
 
-[node name="Camera2D" type="Node2D" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer/SubViewport"]
+[node name="Camera2D" type="Node2D" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer/SubViewport" groups=["CanvasCameras"]]
 script = ExtResource("7")
 
 [node name="CanvasLayer" type="CanvasLayer" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer/SubViewport"]
@@ -358,9 +359,9 @@ render_target_update_mode = 0
 material = SubResource("3")
 anchors_preset = 0
 
-[node name="CanvasPreview" parent="DockableContainer/Second Canvas/SubViewport" instance=ExtResource("2")]
+[node name="CanvasPreview" parent="DockableContainer/Second Canvas/SubViewport" groups=["CanvasPreviews"] instance=ExtResource("2")]
 
-[node name="Camera2D2" type="Node2D" parent="DockableContainer/Second Canvas/SubViewport"]
+[node name="Camera2D2" type="Node2D" parent="DockableContainer/Second Canvas/SubViewport" groups=["CanvasCameras"]]
 script = ExtResource("7")
 index = 1
 
@@ -420,3 +421,7 @@ layout_mode = 2
 [connection signal="mouse_entered" from="DockableContainer/Main Canvas/HorizontalRuler" to="DockableContainer/Main Canvas/HorizontalRuler" method="_on_HorizontalRuler_mouse_entered"]
 [connection signal="pressed" from="DockableContainer/Main Canvas/HorizontalRuler" to="DockableContainer/Main Canvas/HorizontalRuler" method="_on_HorizontalRuler_pressed"]
 [connection signal="pressed" from="DockableContainer/Main Canvas/ViewportandVerticalRuler/VerticalRuler" to="DockableContainer/Main Canvas/ViewportandVerticalRuler/VerticalRuler" method="_on_VerticalRuler_pressed"]
+[connection signal="mouse_entered" from="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer" to="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer" method="_on_ViewportContainer_mouse_entered"]
+[connection signal="mouse_exited" from="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer" to="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer" method="_on_ViewportContainer_mouse_exited"]
+[connection signal="mouse_entered" from="DockableContainer/Second Canvas" to="DockableContainer/Second Canvas" method="_on_ViewportContainer_mouse_entered"]
+[connection signal="mouse_exited" from="DockableContainer/Second Canvas" to="DockableContainer/Second Canvas" method="_on_ViewportContainer_mouse_exited"]
diff --git a/src/UI/ViewportContainer.gd b/src/UI/ViewportContainer.gd
index 603a078fb..e0966199b 100644
--- a/src/UI/ViewportContainer.gd
+++ b/src/UI/ViewportContainer.gd
@@ -2,8 +2,6 @@ extends SubViewportContainer
 
 @export var camera_path: NodePath
 
-var _mouse_inside = false
-
 @onready var camera := get_node(camera_path) as CanvasCamera
 
 
@@ -12,20 +10,17 @@ func _ready() -> void:
 	material.blend_mode = CanvasItemMaterial.BLEND_MODE_PREMULT_ALPHA
 
 
-func _input(event):
-	if event is InputEventMouseMotion:
-		if get_global_rect().has_point(event.position):
-			if !_mouse_inside:
-				_mouse_inside = true
-				camera.set_process_input(true)
-				Global.control.left_cursor.visible = Global.show_left_tool_icon
-				Global.control.right_cursor.visible = Global.show_right_tool_icon
-				if Global.cross_cursor:
-					Input.set_default_cursor_shape(Input.CURSOR_CROSS)
-		else:
-			if _mouse_inside:
-				_mouse_inside = false
-				camera.drag = false
-				Global.control.left_cursor.visible = false
-				Global.control.right_cursor.visible = false
-				Input.set_default_cursor_shape(Input.CURSOR_ARROW)
+func _on_ViewportContainer_mouse_entered() -> void:
+	camera.set_process_input(true)
+	Global.control.left_cursor.visible = Global.show_left_tool_icon
+	Global.control.right_cursor.visible = Global.show_right_tool_icon
+	if Global.cross_cursor:
+		Input.set_default_cursor_shape(Input.CURSOR_CROSS)
+
+
+func _on_ViewportContainer_mouse_exited() -> void:
+	camera.set_process_input(false)
+	camera.drag = false
+	Global.control.left_cursor.visible = false
+	Global.control.right_cursor.visible = false
+	Input.set_default_cursor_shape(Input.CURSOR_ARROW)