diff --git a/CHANGELOG.md b/CHANGELOG.md
index c51aa466d1ff..9b163ec95dac 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,7 +4,11 @@ All notable changes to the `egui` crate will be documented in this file.
 NOTE: [`epaint`](crates/epaint/CHANGELOG.md), [`egui_plot`](crates/egui_plot/CHANGELOG.md), [`eframe`](crates/eframe/CHANGELOG.md), [`egui-winit`](crates/egui-winit/CHANGELOG.md), [`egui_glow`](crates/egui_glow/CHANGELOG.md) and [`egui-wgpu`](crates/egui-wgpu/CHANGELOG.md) have their own changelogs!
 
 This file is updated upon each release.
-Changes since the last release can be found by running the `scripts/generate_changelog.py` script.
+Changes since the last release can be found at <https://github.com/emilk/egui/compare/latest...HEAD> or by running the `scripts/generate_changelog.py` script.
+
+
+## 0.24.1 - 2023-11-30 - Bug fixes
+* Fix buggy text with multiple viewports on monitors with different scales [#3666](https://github.com/emilk/egui/pull/3666)
 
 
 ## 0.24.0 - 2023-11-23 - Multi-viewport
diff --git a/Cargo.lock b/Cargo.lock
index 7becef4e1087..4de3c27ab521 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1099,7 +1099,7 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
 
 [[package]]
 name = "ecolor"
-version = "0.24.0"
+version = "0.24.1"
 dependencies = [
  "bytemuck",
  "cint",
@@ -1110,7 +1110,7 @@ dependencies = [
 
 [[package]]
 name = "eframe"
-version = "0.24.0"
+version = "0.24.1"
 dependencies = [
  "bytemuck",
  "cocoa",
@@ -1146,7 +1146,7 @@ dependencies = [
 
 [[package]]
 name = "egui"
-version = "0.24.0"
+version = "0.24.1"
 dependencies = [
  "accesskit",
  "ahash",
@@ -1162,7 +1162,7 @@ dependencies = [
 
 [[package]]
 name = "egui-wgpu"
-version = "0.24.0"
+version = "0.24.1"
 dependencies = [
  "bytemuck",
  "document-features",
@@ -1178,7 +1178,7 @@ dependencies = [
 
 [[package]]
 name = "egui-winit"
-version = "0.24.0"
+version = "0.24.1"
 dependencies = [
  "accesskit_winit",
  "arboard",
@@ -1196,7 +1196,7 @@ dependencies = [
 
 [[package]]
 name = "egui_demo_app"
-version = "0.24.0"
+version = "0.24.1"
 dependencies = [
  "bytemuck",
  "chrono",
@@ -1220,7 +1220,7 @@ dependencies = [
 
 [[package]]
 name = "egui_demo_lib"
-version = "0.24.0"
+version = "0.24.1"
 dependencies = [
  "chrono",
  "criterion",
@@ -1235,7 +1235,7 @@ dependencies = [
 
 [[package]]
 name = "egui_extras"
-version = "0.24.0"
+version = "0.24.1"
 dependencies = [
  "chrono",
  "document-features",
@@ -1255,7 +1255,7 @@ dependencies = [
 
 [[package]]
 name = "egui_glow"
-version = "0.24.0"
+version = "0.24.1"
 dependencies = [
  "bytemuck",
  "document-features",
@@ -1274,7 +1274,7 @@ dependencies = [
 
 [[package]]
 name = "egui_plot"
-version = "0.24.0"
+version = "0.24.1"
 dependencies = [
  "document-features",
  "egui",
@@ -1303,7 +1303,7 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
 
 [[package]]
 name = "emath"
-version = "0.24.0"
+version = "0.24.1"
 dependencies = [
  "bytemuck",
  "document-features",
@@ -1379,7 +1379,7 @@ dependencies = [
 
 [[package]]
 name = "epaint"
-version = "0.24.0"
+version = "0.24.1"
 dependencies = [
  "ab_glyph",
  "ahash",
diff --git a/Cargo.toml b/Cargo.toml
index 9eeb1849a8be..bbf9fb19b030 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -20,7 +20,7 @@ members = [
 edition = "2021"
 license = "MIT OR Apache-2.0"
 rust-version = "1.72"
-version = "0.24.0"
+version = "0.24.1"
 
 
 [profile.release]
diff --git a/crates/ecolor/CHANGELOG.md b/crates/ecolor/CHANGELOG.md
index 0fb9f9d43658..8d6f16843796 100644
--- a/crates/ecolor/CHANGELOG.md
+++ b/crates/ecolor/CHANGELOG.md
@@ -3,7 +3,12 @@ All notable changes to the `ecolor` crate will be noted in this file.
 
 
 This file is updated upon each release.
-Changes since the last release can be found by running the `scripts/generate_changelog.py` script.
+Changes since the last release can be found at <https://github.com/emilk/egui/compare/latest...HEAD> or by running the `scripts/generate_changelog.py` script.
+
+
+## 0.24.1 - 2023-11-30
+* Optimize color conversions [#3666](https://github.com/emilk/egui/pull/3666)
+
 
 
 ## 0.24.0 - 2023-11-23
diff --git a/crates/eframe/CHANGELOG.md b/crates/eframe/CHANGELOG.md
index 92d6ec532642..238ed4f83a9d 100644
--- a/crates/eframe/CHANGELOG.md
+++ b/crates/eframe/CHANGELOG.md
@@ -4,7 +4,20 @@ All notable changes to the `eframe` crate.
 NOTE: [`egui-winit`](../egui-winit/CHANGELOG.md), [`egui_glium`](../egui_glium/CHANGELOG.md), [`egui_glow`](../egui_glow/CHANGELOG.md),and [`egui-wgpu`](../egui-wgpu/CHANGELOG.md) have their own changelogs!
 
 This file is updated upon each release.
-Changes since the last release can be found by running the `scripts/generate_changelog.py` script.
+Changes since the last release can be found at <https://github.com/emilk/egui/compare/latest...HEAD> or by running the `scripts/generate_changelog.py` script.
+
+
+## 0.24.1 - 2023-11-30
+#### Desktop/Native:
+* Fix window flashing white on launch [#3631](https://github.com/emilk/egui/pull/3631) (thanks [@zeozeozeo](https://github.com/zeozeozeo)!)
+* Fix windowing problems when using the `x11` feature on Linux [#3643](https://github.com/emilk/egui/pull/3643)
+* Fix bugs when there are multiple monitors with different scales [#3663](https://github.com/emilk/egui/pull/3663)
+* `glow` backend: clear framebuffer color before calling `App::update` [#3665](https://github.com/emilk/egui/pull/3665)
+
+#### Web:
+* Fix click-to-copy on Safari [#3621](https://github.com/emilk/egui/pull/3621)
+* Don't throw away frames on click/copy/cut [#3623](https://github.com/emilk/egui/pull/3623)
+* Remove dependency on `tts` [#3651](https://github.com/emilk/egui/pull/3651)
 
 
 ## 0.24.0 - 2023-11-23
diff --git a/crates/eframe/Cargo.toml b/crates/eframe/Cargo.toml
index 176790767879..68c0bfd7bd8c 100644
--- a/crates/eframe/Cargo.toml
+++ b/crates/eframe/Cargo.toml
@@ -102,7 +102,7 @@ x11 = ["egui-winit/x11"]
 __screenshot = []
 
 [dependencies]
-egui = { version = "0.24.0", path = "../egui", default-features = false, features = [
+egui = { version = "0.24.1", path = "../egui", default-features = false, features = [
   "bytemuck",
   "log",
 ] }
@@ -115,7 +115,7 @@ thiserror.workspace = true
 ## Enable this when generating docs.
 document-features = { version = "0.2", optional = true }
 
-egui_glow = { version = "0.24.0", path = "../egui_glow", optional = true, default-features = false }
+egui_glow = { version = "0.24.1", path = "../egui_glow", optional = true, default-features = false }
 glow = { version = "0.12", optional = true }
 ron = { version = "0.8", optional = true, features = ["integer128"] }
 serde = { version = "1", optional = true, features = ["derive"] }
@@ -123,7 +123,7 @@ serde = { version = "1", optional = true, features = ["derive"] }
 # -------------------------------------------
 # native:
 [target.'cfg(not(target_arch = "wasm32"))'.dependencies]
-egui-winit = { version = "0.24.0", path = "../egui-winit", default-features = false, features = [
+egui-winit = { version = "0.24.1", path = "../egui-winit", default-features = false, features = [
   "clipboard",
   "links",
 ] }
@@ -135,7 +135,7 @@ winit = { version = "0.28.1", default-features = false }
 
 # optional native:
 directories-next = { version = "2", optional = true }
-egui-wgpu = { version = "0.24.0", path = "../egui-wgpu", optional = true, features = [
+egui-wgpu = { version = "0.24.1", path = "../egui-wgpu", optional = true, features = [
   "winit",
 ] } # if wgpu is used, use it with winit
 pollster = { version = "0.3", optional = true } # needed for wgpu
@@ -209,6 +209,6 @@ web-sys = { version = "0.3.58", features = [
 ] }
 
 # optional web:
-egui-wgpu = { version = "0.24.0", path = "../egui-wgpu", optional = true } # if wgpu is used, use it without (!) winit
+egui-wgpu = { version = "0.24.1", path = "../egui-wgpu", optional = true } # if wgpu is used, use it without (!) winit
 raw-window-handle = { workspace = true, optional = true }
 wgpu = { workspace = true, optional = true }
diff --git a/crates/egui-wgpu/CHANGELOG.md b/crates/egui-wgpu/CHANGELOG.md
index 6633f9a3c53e..783c40c781da 100644
--- a/crates/egui-wgpu/CHANGELOG.md
+++ b/crates/egui-wgpu/CHANGELOG.md
@@ -3,9 +3,12 @@ All notable changes to the `egui-wgpu` integration will be noted in this file.
 
 
 This file is updated upon each release.
-Changes since the last release can be found by running the `scripts/generate_changelog.py` script.
+Changes since the last release can be found at <https://github.com/emilk/egui/compare/latest...HEAD> or by running the `scripts/generate_changelog.py` script.
 
 
+## 0.24.1 - 2023-11-30
+* Add a few `puffin` profile scopes
+
 
 ## 0.24.0 - 2023-11-23
 * Updated to wgpu 0.18 [#3505](https://github.com/emilk/egui/pull/3505) (thanks [@Wumpf](https://github.com/Wumpf)!)
diff --git a/crates/egui-wgpu/Cargo.toml b/crates/egui-wgpu/Cargo.toml
index 4fc8d6f986b9..22200bafdbed 100644
--- a/crates/egui-wgpu/Cargo.toml
+++ b/crates/egui-wgpu/Cargo.toml
@@ -36,8 +36,8 @@ winit = ["dep:winit"]
 
 
 [dependencies]
-egui = { version = "0.24.0", path = "../egui", default-features = false }
-epaint = { version = "0.24.0", path = "../epaint", default-features = false, features = [
+egui = { version = "0.24.1", path = "../egui", default-features = false }
+epaint = { version = "0.24.1", path = "../epaint", default-features = false, features = [
   "bytemuck",
 ] }
 
diff --git a/crates/egui-winit/CHANGELOG.md b/crates/egui-winit/CHANGELOG.md
index 1d953162d763..d646624d91d6 100644
--- a/crates/egui-winit/CHANGELOG.md
+++ b/crates/egui-winit/CHANGELOG.md
@@ -2,7 +2,12 @@
 All notable changes to the `egui-winit` integration will be noted in this file.
 
 This file is updated upon each release.
-Changes since the last release can be found by running the `scripts/generate_changelog.py` script.
+Changes since the last release can be found at <https://github.com/emilk/egui/compare/latest...HEAD> or by running the `scripts/generate_changelog.py` script.
+
+
+## 0.24.1 - 2023-11-30
+* Don't treat `WindowEvent::CloseRequested` as consumed [#3627](https://github.com/emilk/egui/pull/3627) (thanks [@Aaron1011](https://github.com/Aaron1011)!)
+* Fix windowing problems when using the `x11` feature on Linux [#3643](https://github.com/emilk/egui/pull/3643)
 
 
 ## 0.24.0 - 2023-11-23
diff --git a/crates/egui-winit/Cargo.toml b/crates/egui-winit/Cargo.toml
index 0e0c134a2798..178d99cdaf2c 100644
--- a/crates/egui-winit/Cargo.toml
+++ b/crates/egui-winit/Cargo.toml
@@ -55,7 +55,7 @@ wayland = ["winit/wayland", "bytemuck"]
 x11 = ["winit/x11", "bytemuck"]
 
 [dependencies]
-egui = { version = "0.24.0", path = "../egui", default-features = false, features = [
+egui = { version = "0.24.1", path = "../egui", default-features = false, features = [
   "log",
 ] }
 log = { version = "0.4", features = ["std"] }
diff --git a/crates/egui/Cargo.toml b/crates/egui/Cargo.toml
index 61e27dd72492..7c48cc329e6e 100644
--- a/crates/egui/Cargo.toml
+++ b/crates/egui/Cargo.toml
@@ -76,7 +76,7 @@ unity = ["epaint/unity"]
 
 
 [dependencies]
-epaint = { version = "0.24.0", path = "../epaint", default-features = false }
+epaint = { version = "0.24.1", path = "../epaint", default-features = false }
 
 ahash = { version = "0.8.6", default-features = false, features = [
     "no-rng", # we don't need DOS-protection, so we let users opt-in to it instead
diff --git a/crates/egui_demo_app/Cargo.toml b/crates/egui_demo_app/Cargo.toml
index b3c749b45ad7..b7c8e24d244c 100644
--- a/crates/egui_demo_app/Cargo.toml
+++ b/crates/egui_demo_app/Cargo.toml
@@ -36,18 +36,18 @@ chrono = { version = "0.4", default-features = false, features = [
   "js-sys",
   "wasmbind",
 ] }
-eframe = { version = "0.24.0", path = "../eframe", default-features = false, features = [
+eframe = { version = "0.24.1", path = "../eframe", default-features = false, features = [
   "web_screen_reader",
 ] }
-egui = { version = "0.24.0", path = "../egui", features = [
+egui = { version = "0.24.1", path = "../egui", features = [
   "callstack",
   "extra_debug_asserts",
   "log",
 ] }
-egui_demo_lib = { version = "0.24.0", path = "../egui_demo_lib", features = [
+egui_demo_lib = { version = "0.24.1", path = "../egui_demo_lib", features = [
   "chrono",
 ] }
-egui_extras = { version = "0.24.0", path = "../egui_extras", features = [
+egui_extras = { version = "0.24.1", path = "../egui_extras", features = [
   "image",
 ] }
 log = { version = "0.4", features = ["std"] }
diff --git a/crates/egui_demo_lib/Cargo.toml b/crates/egui_demo_lib/Cargo.toml
index b65eca8dc0c4..cfe9fd4c7248 100644
--- a/crates/egui_demo_lib/Cargo.toml
+++ b/crates/egui_demo_lib/Cargo.toml
@@ -38,9 +38,9 @@ syntect = ["egui_extras/syntect"]
 
 
 [dependencies]
-egui = { version = "0.24.0", path = "../egui", default-features = false }
-egui_extras = { version = "0.24.0", path = "../egui_extras" }
-egui_plot = { version = "0.24.0", path = "../egui_plot" }
+egui = { version = "0.24.1", path = "../egui", default-features = false }
+egui_extras = { version = "0.24.1", path = "../egui_extras" }
+egui_plot = { version = "0.24.1", path = "../egui_plot" }
 log = { version = "0.4", features = ["std"] }
 unicode_names2 = { version = "0.6.0", default-features = false }          # this old version has fewer dependencies
 
diff --git a/crates/egui_extras/CHANGELOG.md b/crates/egui_extras/CHANGELOG.md
index ca76411a2865..9208b85c8603 100644
--- a/crates/egui_extras/CHANGELOG.md
+++ b/crates/egui_extras/CHANGELOG.md
@@ -2,7 +2,11 @@
 All notable changes to the `egui_extras` integration will be noted in this file.
 
 This file is updated upon each release.
-Changes since the last release can be found by running the `scripts/generate_changelog.py` script.
+Changes since the last release can be found at <https://github.com/emilk/egui/compare/latest...HEAD> or by running the `scripts/generate_changelog.py` script.
+
+
+## 0.24.1 - 2023-11-30
+* Add more years for datepicker [#3599](https://github.com/emilk/egui/pull/3599) (thanks [@vaqxai](https://github.com/vaqxai)!)
 
 
 ## 0.24.0 - 2023-11-23
diff --git a/crates/egui_extras/Cargo.toml b/crates/egui_extras/Cargo.toml
index 26f1901341da..92c2a44af6ea 100644
--- a/crates/egui_extras/Cargo.toml
+++ b/crates/egui_extras/Cargo.toml
@@ -60,7 +60,7 @@ syntect = ["dep:syntect"]
 
 
 [dependencies]
-egui = { version = "0.24.0", path = "../egui", default-features = false, features = [
+egui = { version = "0.24.1", path = "../egui", default-features = false, features = [
   "serde",
 ] }
 enum-map = { version = "2", features = ["serde"] }
diff --git a/crates/egui_glow/CHANGELOG.md b/crates/egui_glow/CHANGELOG.md
index a34b5f1c9e01..30a66d358db7 100644
--- a/crates/egui_glow/CHANGELOG.md
+++ b/crates/egui_glow/CHANGELOG.md
@@ -2,7 +2,11 @@
 All notable changes to the `egui_glow` integration will be noted in this file.
 
 This file is updated upon each release.
-Changes since the last release can be found by running the `scripts/generate_changelog.py` script.
+Changes since the last release can be found at <https://github.com/emilk/egui/compare/latest...HEAD> or by running the `scripts/generate_changelog.py` script.
+
+
+## 0.24.1 - 2023-11-30
+* Improve a docstring
 
 
 ## 0.24.0 - 2023-11-23
diff --git a/crates/egui_glow/Cargo.toml b/crates/egui_glow/Cargo.toml
index 28b4590df2f7..3d169aa3b515 100644
--- a/crates/egui_glow/Cargo.toml
+++ b/crates/egui_glow/Cargo.toml
@@ -44,7 +44,7 @@ winit = ["egui-winit"]
 
 
 [dependencies]
-egui = { version = "0.24.0", path = "../egui", default-features = false, features = [
+egui = { version = "0.24.1", path = "../egui", default-features = false, features = [
   "bytemuck",
 ] }
 
@@ -59,7 +59,7 @@ document-features = { version = "0.2", optional = true }
 
 # Native:
 [target.'cfg(not(target_arch = "wasm32"))'.dependencies]
-egui-winit = { version = "0.24.0", path = "../egui-winit", optional = true, default-features = false }
+egui-winit = { version = "0.24.1", path = "../egui-winit", optional = true, default-features = false }
 puffin = { workspace = true, optional = true }
 
 # Web:
diff --git a/crates/egui_plot/CHANGELOG.md b/crates/egui_plot/CHANGELOG.md
index 4b2f9bd62cf5..c476a55ac6f5 100644
--- a/crates/egui_plot/CHANGELOG.md
+++ b/crates/egui_plot/CHANGELOG.md
@@ -2,7 +2,7 @@
 All notable changes to the `egui_plot` integration will be noted in this file.
 
 This file is updated upon each release.
-Changes since the last release can be found by running the `scripts/generate_changelog.py` script.
+Changes since the last release can be found at <https://github.com/emilk/egui/compare/latest...HEAD> or by running the `scripts/generate_changelog.py` script.
 
 
 ## 0.24.0 - 2023-11-23
diff --git a/crates/egui_plot/Cargo.toml b/crates/egui_plot/Cargo.toml
index ee199c84aa37..f364e4f32420 100644
--- a/crates/egui_plot/Cargo.toml
+++ b/crates/egui_plot/Cargo.toml
@@ -28,7 +28,7 @@ serde = ["dep:serde", "egui/serde"]
 
 
 [dependencies]
-egui = { version = "0.24.0", path = "../egui", default-features = false }
+egui = { version = "0.24.1", path = "../egui", default-features = false }
 
 
 #! ### Optional dependencies
diff --git a/crates/epaint/CHANGELOG.md b/crates/epaint/CHANGELOG.md
index d58fb01e1daa..2bd87ef5af8d 100644
--- a/crates/epaint/CHANGELOG.md
+++ b/crates/epaint/CHANGELOG.md
@@ -2,7 +2,11 @@
 All notable changes to the epaint crate will be documented in this file.
 
 This file is updated upon each release.
-Changes since the last release can be found by running the `scripts/generate_changelog.py` script.
+Changes since the last release can be found at <https://github.com/emilk/egui/compare/latest...HEAD> or by running the `scripts/generate_changelog.py` script.
+
+
+## 0.24.1 - 2023-11-30
+* Optimize `FontImage::srgba_pixels` and reduce the initial font atlas texture size from 8MiB -> 1MiB [#3666](https://github.com/emilk/egui/pull/3666)
 
 
 ## 0.24.0 - 2023-11-23
diff --git a/crates/epaint/Cargo.toml b/crates/epaint/Cargo.toml
index 12c11d97c01e..15f66fe5edb1 100644
--- a/crates/epaint/Cargo.toml
+++ b/crates/epaint/Cargo.toml
@@ -70,8 +70,8 @@ serde = ["dep:serde", "ahash/serde", "emath/serde", "ecolor/serde"]
 unity = []
 
 [dependencies]
-emath = { version = "0.24.0", path = "../emath" }
-ecolor = { version = "0.24.0", path = "../ecolor" }
+emath = { version = "0.24.1", path = "../emath" }
+ecolor = { version = "0.24.1", path = "../ecolor" }
 
 ab_glyph = "0.2.11"
 ahash = { version = "0.8.1", default-features = false, features = [
diff --git a/scripts/generate_changelog.py b/scripts/generate_changelog.py
index 47e8637009d6..a95bf6aaac37 100755
--- a/scripts/generate_changelog.py
+++ b/scripts/generate_changelog.py
@@ -190,6 +190,8 @@ def main() -> None:
                 if not any(label in labels for label in ignore_labels):
                     unsorted_prs.append(summary)
 
+    print()
+    print(f"Full diff at https://github.com/emilk/egui/compare/{COMMIT_RANGE}")
     print()
     for crate in crate_names:
         if crate in sections: