diff --git a/src/common/settings.cpp b/src/common/settings.cpp
index 15fd2e222..16a58a750 100644
--- a/src/common/settings.cpp
+++ b/src/common/settings.cpp
@@ -207,9 +207,7 @@ const char* TranslateCategory(Category category) {
     return "Miscellaneous";
 }
 
-void UpdateRescalingInfo() {
-    const auto setup = values.resolution_setup.GetValue();
-    auto& info = values.resolution_info;
+void TranslateResolutionInfo(ResolutionSetup setup, ResolutionScalingInfo& info) {
     info.downscale = false;
     switch (setup) {
     case ResolutionSetup::Res1_2X:
@@ -269,6 +267,12 @@ void UpdateRescalingInfo() {
     info.active = info.up_scale != 1 || info.down_shift != 0;
 }
 
+void UpdateRescalingInfo() {
+    const auto setup = values.resolution_setup.GetValue();
+    auto& info = values.resolution_info;
+    TranslateResolutionInfo(setup, info);
+}
+
 void RestoreGlobalState(bool is_powered_on) {
     // If a game is running, DO NOT restore the global settings state
     if (is_powered_on) {
diff --git a/src/common/settings.h b/src/common/settings.h
index b0bc6519a..4407c1e6d 100644
--- a/src/common/settings.h
+++ b/src/common/settings.h
@@ -525,6 +525,7 @@ std::string GetTimeZoneString(TimeZone time_zone);
 
 void LogSettings();
 
+void TranslateResolutionInfo(ResolutionSetup setup, ResolutionScalingInfo& info);
 void UpdateRescalingInfo();
 
 // Restore the global state of all applicable settings in the Values struct
diff --git a/src/yuzu/bootmanager.cpp b/src/yuzu/bootmanager.cpp
index bdd1497b5..407988b8f 100644
--- a/src/yuzu/bootmanager.cpp
+++ b/src/yuzu/bootmanager.cpp
@@ -11,6 +11,8 @@
 #include <glad/glad.h>
 
 #include <QtCore/qglobal.h>
+#include "common/settings_enums.h"
+#include "uisettings.h"
 #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) && YUZU_USE_QT_MULTIMEDIA
 #include <QCamera>
 #include <QCameraImageCapture>
@@ -916,7 +918,6 @@ void GRenderWindow::ReleaseRenderTarget() {
 
 void GRenderWindow::CaptureScreenshot(const QString& screenshot_path) {
     auto& renderer = system.Renderer();
-    const f32 res_scale = Settings::values.resolution_info.up_factor;
 
     if (renderer.IsScreenshotPending()) {
         LOG_WARNING(Render,
@@ -924,7 +925,18 @@ void GRenderWindow::CaptureScreenshot(const QString& screenshot_path) {
         return;
     }
 
-    const Layout::FramebufferLayout layout{Layout::FrameLayoutFromResolutionScale(res_scale)};
+    const Layout::FramebufferLayout layout{[]() {
+        u32 height = UISettings::values.screenshot_height.GetValue();
+        if (height == 0) {
+            height = Settings::values.use_docked_mode.GetValue() ? Layout::ScreenDocked::Height
+                                                                 : Layout::ScreenUndocked::Height;
+            height *= Settings::values.resolution_info.up_factor;
+        }
+        const u32 width =
+            UISettings::CalculateWidth(height, Settings::values.aspect_ratio.GetValue());
+        return Layout::DefaultFrameLayout(width, height);
+    }()};
+
     screenshot_image = QImage(QSize(layout.width, layout.height), QImage::Format_RGB32);
     renderer.RequestScreenshot(
         screenshot_image.bits(),
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index b2405f9b8..b22c83303 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -592,8 +592,7 @@ void Config::ReadRendererValues() {
 void Config::ReadScreenshotValues() {
     qt_config->beginGroup(QStringLiteral("Screenshots"));
 
-    UISettings::values.enable_screenshot_save_as =
-        ReadSetting(QStringLiteral("enable_screenshot_save_as"), true).toBool();
+    ReadCategory(Settings::Category::Screenshots);
     FS::SetYuzuPath(
         FS::YuzuPath::ScreenshotsDir,
         qt_config
diff --git a/src/yuzu/configuration/configure_dialog.cpp b/src/yuzu/configuration/configure_dialog.cpp
index 3c6bb3eb1..0ad95cc02 100644
--- a/src/yuzu/configuration/configure_dialog.cpp
+++ b/src/yuzu/configuration/configure_dialog.cpp
@@ -4,6 +4,7 @@
 #include <memory>
 #include "common/logging/log.h"
 #include "common/settings.h"
+#include "common/settings_enums.h"
 #include "core/core.h"
 #include "ui_configure.h"
 #include "vk_device_info.h"
@@ -41,16 +42,19 @@ ConfigureDialog::ConfigureDialog(QWidget* parent, HotkeyRegistry& registry_,
       general_tab{std::make_unique<ConfigureGeneral>(system_, nullptr, *builder, this)},
       graphics_advanced_tab{
           std::make_unique<ConfigureGraphicsAdvanced>(system_, nullptr, *builder, this)},
+      ui_tab{std::make_unique<ConfigureUi>(system_, this)},
       graphics_tab{std::make_unique<ConfigureGraphics>(
           system_, vk_device_records, [&]() { graphics_advanced_tab->ExposeComputeOption(); },
+          [this](Settings::AspectRatio ratio, Settings::ResolutionSetup setup) {
+              ui_tab->UpdateScreenshotInfo(ratio, setup);
+          },
           nullptr, *builder, this)},
       hotkeys_tab{std::make_unique<ConfigureHotkeys>(system_.HIDCore(), this)},
       input_tab{std::make_unique<ConfigureInput>(system_, this)},
       network_tab{std::make_unique<ConfigureNetwork>(system_, this)},
       profile_tab{std::make_unique<ConfigureProfileManager>(system_, this)},
       system_tab{std::make_unique<ConfigureSystem>(system_, nullptr, *builder, this)},
-      ui_tab{std::make_unique<ConfigureUi>(system_, this)}, web_tab{std::make_unique<ConfigureWeb>(
-                                                                this)} {
+      web_tab{std::make_unique<ConfigureWeb>(this)} {
     Settings::SetConfiguringGlobal(true);
 
     ui->setupUi(this);
diff --git a/src/yuzu/configuration/configure_dialog.h b/src/yuzu/configuration/configure_dialog.h
index 96e9a8c3e..b28ce288c 100644
--- a/src/yuzu/configuration/configure_dialog.h
+++ b/src/yuzu/configuration/configure_dialog.h
@@ -81,12 +81,12 @@ private:
     std::unique_ptr<ConfigureFilesystem> filesystem_tab;
     std::unique_ptr<ConfigureGeneral> general_tab;
     std::unique_ptr<ConfigureGraphicsAdvanced> graphics_advanced_tab;
+    std::unique_ptr<ConfigureUi> ui_tab;
     std::unique_ptr<ConfigureGraphics> graphics_tab;
     std::unique_ptr<ConfigureHotkeys> hotkeys_tab;
     std::unique_ptr<ConfigureInput> input_tab;
     std::unique_ptr<ConfigureNetwork> network_tab;
     std::unique_ptr<ConfigureProfileManager> profile_tab;
     std::unique_ptr<ConfigureSystem> system_tab;
-    std::unique_ptr<ConfigureUi> ui_tab;
     std::unique_ptr<ConfigureWeb> web_tab;
 };
diff --git a/src/yuzu/configuration/configure_graphics.cpp b/src/yuzu/configuration/configure_graphics.cpp
index a94fbc89a..8622dc184 100644
--- a/src/yuzu/configuration/configure_graphics.cpp
+++ b/src/yuzu/configuration/configure_graphics.cpp
@@ -24,6 +24,7 @@
 #include <QtCore/qobjectdefs.h>
 #include <qabstractbutton.h>
 #include <qboxlayout.h>
+#include <qcombobox.h>
 #include <qcoreevent.h>
 #include <qglobal.h>
 #include <qgridlayout.h>
@@ -77,13 +78,16 @@ static constexpr Settings::VSyncMode PresentModeToSetting(VkPresentModeKHR mode)
     }
 }
 
-ConfigureGraphics::ConfigureGraphics(const Core::System& system_,
-                                     std::vector<VkDeviceInfo::Record>& records_,
-                                     const std::function<void()>& expose_compute_option_,
-                                     std::shared_ptr<std::vector<ConfigurationShared::Tab*>> group_,
-                                     const ConfigurationShared::Builder& builder, QWidget* parent)
+ConfigureGraphics::ConfigureGraphics(
+    const Core::System& system_, std::vector<VkDeviceInfo::Record>& records_,
+    const std::function<void()>& expose_compute_option_,
+    const std::function<void(Settings::AspectRatio, Settings::ResolutionSetup)>&
+        update_aspect_ratio_,
+    std::shared_ptr<std::vector<ConfigurationShared::Tab*>> group_,
+    const ConfigurationShared::Builder& builder, QWidget* parent)
     : ConfigurationShared::Tab(group_, parent), ui{std::make_unique<Ui::ConfigureGraphics>()},
-      records{records_}, expose_compute_option{expose_compute_option_}, system{system_},
+      records{records_}, expose_compute_option{expose_compute_option_},
+      update_aspect_ratio{update_aspect_ratio_}, system{system_},
       combobox_translations{builder.ComboboxTranslations()},
       shader_mapping{
           combobox_translations.at(Settings::EnumMetadata<Settings::ShaderBackend>::Index())} {
@@ -140,6 +144,26 @@ ConfigureGraphics::ConfigureGraphics(const Core::System& system_,
         UpdateBackgroundColorButton(new_bg_color);
     });
 
+    const auto& update_screenshot_info = [this, &builder]() {
+        const auto& combobox_enumerations = builder.ComboboxTranslations().at(
+            Settings::EnumMetadata<Settings::AspectRatio>::Index());
+        const auto index = aspect_ratio_combobox->currentIndex();
+        const auto ratio = static_cast<Settings::AspectRatio>(combobox_enumerations[index].first);
+
+        const auto& combobox_enumerations_resolution = builder.ComboboxTranslations().at(
+            Settings::EnumMetadata<Settings::ResolutionSetup>::Index());
+        const auto res_index = resolution_combobox->currentIndex();
+        const auto setup = static_cast<Settings::ResolutionSetup>(
+            combobox_enumerations_resolution[res_index].first);
+
+        update_aspect_ratio(ratio, setup);
+    };
+
+    connect(aspect_ratio_combobox, QOverload<int>::of(&QComboBox::currentIndexChanged),
+            update_screenshot_info);
+    connect(resolution_combobox, QOverload<int>::of(&QComboBox::currentIndexChanged),
+            update_screenshot_info);
+
     api_combobox->setEnabled(!UISettings::values.has_broken_vulkan && api_combobox->isEnabled());
     ui->api_widget->setEnabled(
         (!UISettings::values.has_broken_vulkan || Settings::IsConfiguringGlobal()) &&
@@ -280,6 +304,14 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) {
             // Keep track of vsync_mode's combobox so we can populate it
             vsync_mode_combobox = widget->combobox;
             hold_graphics.emplace(setting->Id(), widget);
+        } else if (setting->Id() == Settings::values.aspect_ratio.Id()) {
+            // Keep track of the aspect ratio combobox to update other UI tabs that need it
+            aspect_ratio_combobox = widget->combobox;
+            hold_graphics.emplace(setting->Id(), widget);
+        } else if (setting->Id() == Settings::values.resolution_setup.Id()) {
+            // Keep track of the resolution combobox to update other UI tabs that need it
+            resolution_combobox = widget->combobox;
+            hold_graphics.emplace(setting->Id(), widget);
         } else {
             hold_graphics.emplace(setting->Id(), widget);
         }
diff --git a/src/yuzu/configuration/configure_graphics.h b/src/yuzu/configuration/configure_graphics.h
index 02d9b00f1..9c24a56db 100644
--- a/src/yuzu/configuration/configure_graphics.h
+++ b/src/yuzu/configuration/configure_graphics.h
@@ -14,6 +14,7 @@
 #include <qobjectdefs.h>
 #include <vulkan/vulkan_core.h>
 #include "common/common_types.h"
+#include "common/settings_enums.h"
 #include "configuration/shared_translation.h"
 #include "vk_device_info.h"
 #include "yuzu/configuration/configuration_shared.h"
@@ -43,12 +44,13 @@ class Builder;
 
 class ConfigureGraphics : public ConfigurationShared::Tab {
 public:
-    explicit ConfigureGraphics(const Core::System& system_,
-                               std::vector<VkDeviceInfo::Record>& records,
-                               const std::function<void()>& expose_compute_option_,
-                               std::shared_ptr<std::vector<ConfigurationShared::Tab*>> group,
-                               const ConfigurationShared::Builder& builder,
-                               QWidget* parent = nullptr);
+    explicit ConfigureGraphics(
+        const Core::System& system_, std::vector<VkDeviceInfo::Record>& records,
+        const std::function<void()>& expose_compute_option,
+        const std::function<void(Settings::AspectRatio, Settings::ResolutionSetup)>&
+            update_aspect_ratio,
+        std::shared_ptr<std::vector<ConfigurationShared::Tab*>> group,
+        const ConfigurationShared::Builder& builder, QWidget* parent = nullptr);
     ~ConfigureGraphics() override;
 
     void ApplyConfiguration() override;
@@ -91,6 +93,7 @@ private:
     u32 vulkan_device{};
     Settings::ShaderBackend shader_backend{};
     const std::function<void()>& expose_compute_option;
+    const std::function<void(Settings::AspectRatio, Settings::ResolutionSetup)> update_aspect_ratio;
 
     const Core::System& system;
     const ConfigurationShared::ComboboxTranslationMap& combobox_translations;
@@ -104,4 +107,6 @@ private:
     QWidget* vulkan_device_widget;
     QWidget* api_widget;
     QWidget* shader_backend_widget;
+    QComboBox* aspect_ratio_combobox;
+    QComboBox* resolution_combobox;
 };
diff --git a/src/yuzu/configuration/configure_per_game.cpp b/src/yuzu/configuration/configure_per_game.cpp
index cd8b3012e..4f9e8db08 100644
--- a/src/yuzu/configuration/configure_per_game.cpp
+++ b/src/yuzu/configuration/configure_per_game.cpp
@@ -17,6 +17,7 @@
 #include <QTimer>
 
 #include "common/fs/fs_util.h"
+#include "common/settings_enums.h"
 #include "configuration/shared_widget.h"
 #include "core/core.h"
 #include "core/file_sys/control_metadata.h"
@@ -57,7 +58,7 @@ ConfigurePerGame::ConfigurePerGame(QWidget* parent, u64 title_id_, const std::st
         std::make_unique<ConfigureGraphicsAdvanced>(system_, tab_group, *builder, this);
     graphics_tab = std::make_unique<ConfigureGraphics>(
         system_, vk_device_records, [&]() { graphics_advanced_tab->ExposeComputeOption(); },
-        tab_group, *builder, this);
+        [](Settings::AspectRatio, Settings::ResolutionSetup) {}, tab_group, *builder, this);
     input_tab = std::make_unique<ConfigureInputPerGame>(system_, game_config.get(), this);
     system_tab = std::make_unique<ConfigureSystem>(system_, tab_group, *builder, this);
 
diff --git a/src/yuzu/configuration/configure_ui.cpp b/src/yuzu/configuration/configure_ui.cpp
index 2ebb80302..34ab01617 100644
--- a/src/yuzu/configuration/configure_ui.cpp
+++ b/src/yuzu/configuration/configure_ui.cpp
@@ -1,18 +1,31 @@
 // SPDX-FileCopyrightText: 2016 Citra Emulator Project
 // SPDX-License-Identifier: GPL-2.0-or-later
 
-#include <array>
-#include <utility>
-#include <QFileDialog>
+#include "yuzu/configuration/configure_ui.h"
 
+#include <array>
+#include <set>
+#include <stdexcept>
+#include <string>
+#include <utility>
+
+#include <QCheckBox>
+#include <QComboBox>
+#include <QCoreApplication>
 #include <QDirIterator>
+#include <QFileDialog>
+#include <QString>
+#include <QToolButton>
+#include <QVariant>
+
 #include "common/common_types.h"
 #include "common/fs/path_util.h"
 #include "common/logging/log.h"
 #include "common/settings.h"
+#include "common/settings_enums.h"
 #include "core/core.h"
+#include "core/frontend/framebuffer_layout.h"
 #include "ui_configure_ui.h"
-#include "yuzu/configuration/configure_ui.h"
 #include "yuzu/uisettings.h"
 
 namespace {
@@ -54,8 +67,44 @@ QString GetTranslatedRowTextName(size_t index) {
 }
 } // Anonymous namespace
 
+static float GetUpFactor(Settings::ResolutionSetup res_setup) {
+    Settings::ResolutionScalingInfo info{};
+    Settings::TranslateResolutionInfo(res_setup, info);
+    return info.up_factor;
+}
+
+static void PopulateResolutionComboBox(QComboBox* screenshot_height, QWidget* parent) {
+    screenshot_height->clear();
+
+    const auto& enumeration =
+        Settings::EnumMetadata<Settings::ResolutionSetup>::Canonicalizations();
+    std::set<u32> resolutions{};
+    for (const auto& [name, value] : enumeration) {
+        const float up_factor = GetUpFactor(value);
+        u32 height_undocked = Layout::ScreenUndocked::Height * up_factor;
+        u32 height_docked = Layout::ScreenDocked::Height * up_factor;
+        resolutions.emplace(height_undocked);
+        resolutions.emplace(height_docked);
+    }
+
+    screenshot_height->addItem(parent->tr("Auto", "Screenshot height option"));
+    for (const auto res : resolutions) {
+        screenshot_height->addItem(QString::fromStdString(std::to_string(res)));
+    }
+}
+
+static u32 ScreenshotDimensionToInt(const QString& height) {
+    try {
+        return std::stoi(height.toStdString());
+    } catch (std::invalid_argument&) {
+        return 0;
+    }
+}
+
 ConfigureUi::ConfigureUi(Core::System& system_, QWidget* parent)
-    : QWidget(parent), ui{std::make_unique<Ui::ConfigureUi>()}, system{system_} {
+    : QWidget(parent), ui{std::make_unique<Ui::ConfigureUi>()},
+      ratio{Settings::values.aspect_ratio.GetValue()},
+      resolution_setting{Settings::values.resolution_setup.GetValue()}, system{system_} {
     ui->setupUi(this);
 
     InitializeLanguageComboBox();
@@ -68,6 +117,8 @@ ConfigureUi::ConfigureUi(Core::System& system_, QWidget* parent)
     InitializeIconSizeComboBox();
     InitializeRowComboBoxes();
 
+    PopulateResolutionComboBox(ui->screenshot_height, this);
+
     SetConfiguration();
 
     // Force game list reload if any of the relevant settings are changed.
@@ -104,6 +155,10 @@ ConfigureUi::ConfigureUi(Core::System& system_, QWidget* parent)
             ui->screenshot_path_edit->setText(dir);
         }
     });
+
+    connect(ui->screenshot_height, &QComboBox::currentTextChanged, [this]() { UpdateWidthText(); });
+
+    UpdateWidthText();
 }
 
 ConfigureUi::~ConfigureUi() = default;
@@ -123,6 +178,10 @@ void ConfigureUi::ApplyConfiguration() {
     UISettings::values.enable_screenshot_save_as = ui->enable_screenshot_save_as->isChecked();
     Common::FS::SetYuzuPath(Common::FS::YuzuPath::ScreenshotsDir,
                             ui->screenshot_path_edit->text().toStdString());
+
+    const u32 height = ScreenshotDimensionToInt(ui->screenshot_height->currentText());
+    UISettings::values.screenshot_height.SetValue(height);
+
     system.ApplySettings();
 }
 
@@ -147,6 +206,13 @@ void ConfigureUi::SetConfiguration() {
         UISettings::values.enable_screenshot_save_as.GetValue());
     ui->screenshot_path_edit->setText(QString::fromStdString(
         Common::FS::GetYuzuPathString(Common::FS::YuzuPath::ScreenshotsDir)));
+
+    const auto height = UISettings::values.screenshot_height.GetValue();
+    if (height == 0) {
+        ui->screenshot_height->setCurrentIndex(0);
+    } else {
+        ui->screenshot_height->setCurrentText(QStringLiteral("%1").arg(height));
+    }
 }
 
 void ConfigureUi::changeEvent(QEvent* event) {
@@ -317,3 +383,29 @@ void ConfigureUi::OnLanguageChanged(int index) {
 
     emit LanguageChanged(ui->language_combobox->itemData(index).toString());
 }
+
+void ConfigureUi::UpdateWidthText() {
+    const u32 height = ScreenshotDimensionToInt(ui->screenshot_height->currentText());
+    const u32 width = UISettings::CalculateWidth(height, ratio);
+    if (height == 0) {
+        const auto up_factor = GetUpFactor(resolution_setting);
+        const u32 height_docked = Layout::ScreenDocked::Height * up_factor;
+        const u32 width_docked = UISettings::CalculateWidth(height_docked, ratio);
+        const u32 height_undocked = Layout::ScreenUndocked::Height * up_factor;
+        const u32 width_undocked = UISettings::CalculateWidth(height_undocked, ratio);
+        ui->screenshot_width->setText(tr("Auto (%1 x %2, %3 x %4)", "Screenshot width value")
+                                          .arg(width_undocked)
+                                          .arg(height_undocked)
+                                          .arg(width_docked)
+                                          .arg(height_docked));
+    } else {
+        ui->screenshot_width->setText(QStringLiteral("%1 x").arg(width));
+    }
+}
+
+void ConfigureUi::UpdateScreenshotInfo(Settings::AspectRatio ratio_,
+                                       Settings::ResolutionSetup resolution_setting_) {
+    ratio = ratio_;
+    resolution_setting = resolution_setting_;
+    UpdateWidthText();
+}
diff --git a/src/yuzu/configuration/configure_ui.h b/src/yuzu/configuration/configure_ui.h
index 95af8370e..2a2563a13 100644
--- a/src/yuzu/configuration/configure_ui.h
+++ b/src/yuzu/configuration/configure_ui.h
@@ -5,6 +5,7 @@
 
 #include <memory>
 #include <QWidget>
+#include "common/settings_enums.h"
 
 namespace Core {
 class System;
@@ -23,6 +24,9 @@ public:
 
     void ApplyConfiguration();
 
+    void UpdateScreenshotInfo(Settings::AspectRatio ratio,
+                              Settings::ResolutionSetup resolution_info);
+
 private slots:
     void OnLanguageChanged(int index);
 
@@ -44,7 +48,11 @@ private:
     void UpdateFirstRowComboBox(bool init = false);
     void UpdateSecondRowComboBox(bool init = false);
 
+    void UpdateWidthText();
+
     std::unique_ptr<Ui::ConfigureUi> ui;
 
+    Settings::AspectRatio ratio;
+    Settings::ResolutionSetup resolution_setting;
     Core::System& system;
 };
diff --git a/src/yuzu/configuration/configure_ui.ui b/src/yuzu/configuration/configure_ui.ui
index 10bb27312..cb66ef104 100644
--- a/src/yuzu/configuration/configure_ui.ui
+++ b/src/yuzu/configuration/configure_ui.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>363</width>
-    <height>562</height>
+    <height>603</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -201,6 +201,41 @@
           </item>
          </layout>
         </item>
+        <item>
+         <layout class="QGridLayout" name="gridLayout">
+          <property name="spacing">
+           <number>6</number>
+          </property>
+          <item row="0" column="1">
+           <layout class="QHBoxLayout" name="horizontalLayout_5">
+            <item>
+             <widget class="QLabel" name="screenshot_width">
+              <property name="text">
+               <string>TextLabel</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QComboBox" name="screenshot_height">
+              <property name="editable">
+               <bool>true</bool>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item row="0" column="0">
+           <widget class="QLabel" name="label_3">
+            <property name="text">
+             <string>Resolution:</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
        </layout>
       </item>
      </layout>
diff --git a/src/yuzu/uisettings.cpp b/src/yuzu/uisettings.cpp
index f03dc01dd..1c833767b 100644
--- a/src/yuzu/uisettings.cpp
+++ b/src/yuzu/uisettings.cpp
@@ -36,4 +36,20 @@ bool IsDarkTheme() {
 
 Values values = {};
 
+u32 CalculateWidth(u32 height, Settings::AspectRatio ratio) {
+    switch (ratio) {
+    case Settings::AspectRatio::R4_3:
+        return height * 4 / 3;
+    case Settings::AspectRatio::R21_9:
+        return height * 21 / 9;
+    case Settings::AspectRatio::R16_10:
+        return height * 16 / 10;
+    case Settings::AspectRatio::R16_9:
+    case Settings::AspectRatio::Stretch:
+        // TODO: Move this function wherever appropriate to implement Stretched aspect
+        break;
+    }
+    return height * 16 / 9;
+}
+
 } // namespace UISettings
diff --git a/src/yuzu/uisettings.h b/src/yuzu/uisettings.h
index c9c89cee4..8efd63f31 100644
--- a/src/yuzu/uisettings.h
+++ b/src/yuzu/uisettings.h
@@ -13,6 +13,7 @@
 #include <QVector>
 #include "common/common_types.h"
 #include "common/settings.h"
+#include "common/settings_enums.h"
 
 using Settings::Category;
 using Settings::Setting;
@@ -127,8 +128,10 @@ struct Values {
     // logging
     Setting<bool> show_console{linkage, false, "showConsole", Category::Ui};
 
+    // Screenshots
     Setting<bool> enable_screenshot_save_as{linkage, true, "enable_screenshot_save_as",
                                             Category::Screenshots};
+    Setting<u32> screenshot_height{linkage, 0, "screenshot_height", Category::Screenshots};
 
     QString roms_path;
     QString symbols_path;
@@ -187,6 +190,8 @@ struct Values {
 
 extern Values values;
 
+u32 CalculateWidth(u32 height, Settings::AspectRatio ratio);
+
 } // namespace UISettings
 
 Q_DECLARE_METATYPE(UISettings::GameDir*);