diff --git src/wp-admin/includes/image.php src/wp-admin/includes/image.php
index b0cffc504f..d3d65fead1 100644
--- src/wp-admin/includes/image.php
+++ src/wp-admin/includes/image.php
@@ -672,9 +672,20 @@ function _wp_filter_image_sizes_additional_mime_type_support( $sizes, $attachmen
 		'medium'         => true,
 		'medium_large'   => true,
 		'large'          => true,
-		'post-thumbnail' => true,
 	);
 
+	// Include any sizes that were added with `add_image_size`.
+	$additional_image_sizes = array_map(
+		'__return_true',
+		array_filter(
+			wp_get_additional_image_sizes(),
+			function( $size ) {
+				return isset( $size['additional_mimes'] ) && $size['additional_mimes'];
+			}
+		)
+	);
+	$enabled_sizes          = array_merge( $enabled_sizes, $additional_image_sizes );
+
 	/**
 	 * Filter the sizes that support secondary mime type output. Developers can use this
 	 * to control the output of additional mime type sub-sized images.
diff --git src/wp-content/themes/twentyeleven/functions.php src/wp-content/themes/twentyeleven/functions.php
index 12593aaddf..ee95afd96b 100644
--- src/wp-content/themes/twentyeleven/functions.php
+++ src/wp-content/themes/twentyeleven/functions.php
@@ -227,9 +227,9 @@ if ( ! function_exists( 'twentyeleven_setup' ) ) :
 		 * Add Twenty Eleven's custom image sizes.
 		 * Used for large feature (header) images.
 		 */
-		add_image_size( 'large-feature', $custom_header_support['width'], $custom_header_support['height'], true );
+		add_image_size( 'large-feature', $custom_header_support['width'], $custom_header_support['height'], true, true );
 		// Used for featured posts if a large-feature doesn't exist.
-		add_image_size( 'small-feature', 500, 300 );
+		add_image_size( 'small-feature', 500, 300, false, true );
 
 		// Default custom headers packaged with the theme. %s is a placeholder for the theme template directory URI.
 		register_default_headers(
diff --git src/wp-content/themes/twentyfourteen/functions.php src/wp-content/themes/twentyfourteen/functions.php
index 0695bcce6d..0896f84410 100644
--- src/wp-content/themes/twentyfourteen/functions.php
+++ src/wp-content/themes/twentyfourteen/functions.php
@@ -122,7 +122,7 @@ if ( ! function_exists( 'twentyfourteen_setup' ) ) :
 		// Enable support for Post Thumbnails, and declare two sizes.
 		add_theme_support( 'post-thumbnails' );
 		set_post_thumbnail_size( 672, 372, true );
-		add_image_size( 'twentyfourteen-full-width', 1038, 576, true );
+		add_image_size( 'twentyfourteen-full-width', 1038, 576, true, true );
 
 		// This theme uses wp_nav_menu() in two locations.
 		register_nav_menus(
diff --git src/wp-content/themes/twentyseventeen/functions.php src/wp-content/themes/twentyseventeen/functions.php
index 3d933989c2..d8b95b8568 100644
--- src/wp-content/themes/twentyseventeen/functions.php
+++ src/wp-content/themes/twentyseventeen/functions.php
@@ -56,9 +56,9 @@ function twentyseventeen_setup() {
 	 */
 	add_theme_support( 'post-thumbnails' );
 
-	add_image_size( 'twentyseventeen-featured-image', 2000, 1200, true );
+	add_image_size( 'twentyseventeen-featured-image', 2000, 1200, true, true );
 
-	add_image_size( 'twentyseventeen-thumbnail-avatar', 100, 100, true );
+	add_image_size( 'twentyseventeen-thumbnail-avatar', 100, 100, true, true );
 
 	// Set the default content width.
 	$GLOBALS['content_width'] = 525;
diff --git src/wp-content/themes/twentytwenty/functions.php src/wp-content/themes/twentytwenty/functions.php
index c8944e03c1..21a561fdaf 100644
--- src/wp-content/themes/twentytwenty/functions.php
+++ src/wp-content/themes/twentytwenty/functions.php
@@ -63,7 +63,7 @@ function twentytwenty_theme_support() {
 	set_post_thumbnail_size( 1200, 9999 );
 
 	// Add custom image size used in Cover Template.
-	add_image_size( 'twentytwenty-fullscreen', 1980, 9999 );
+	add_image_size( 'twentytwenty-fullscreen', 1980, 9999, false, true );
 
 	// Custom logo.
 	$logo_width  = 120;
diff --git src/wp-includes/media.php src/wp-includes/media.php
index 456cd7c988..45c1a6e311 100644
--- src/wp-includes/media.php
+++ src/wp-includes/media.php
@@ -275,26 +275,36 @@ function image_downsize( $id, $size = 'medium' ) {
  * Register a new image size.
  *
  * @since 2.9.0
+ * @since 6.1.0 Add the $output_mimes parameter.
  *
  * @global array $_wp_additional_image_sizes Associative array of additional image sizes.
  *
- * @param string     $name   Image size identifier.
- * @param int        $width  Optional. Image width in pixels. Default 0.
- * @param int        $height Optional. Image height in pixels. Default 0.
- * @param bool|array $crop   Optional. Image cropping behavior. If false, the image will be scaled (default),
- *                           If true, image will be cropped to the specified dimensions using center positions.
- *                           If an array, the image will be cropped using the array to specify the crop location.
- *                           Array values must be in the format: array( x_crop_position, y_crop_position ) where:
- *                               - x_crop_position accepts: 'left', 'center', or 'right'.
- *                               - y_crop_position accepts: 'top', 'center', or 'bottom'.
+ * @param string     $name             Image size identifier.
+ * @param int        $width            Optional. Image width in pixels. Default 0.
+ * @param int        $height           Optional. Image height in pixels. Default 0.
+ * @param bool|array $crop             Optional. Image cropping behavior. If false, the image will be scaled (default),
+ *                                     If true, image will be cropped to the specified dimensions using center positions.
+ *                                     If an array, the image will be cropped using the array to specify the crop location.
+ *                                     Array values must be in the format: array( x_crop_position, y_crop_position ) where:
+ *                                         - x_crop_position accepts: 'left', 'center', or 'right'.
+ *                                         - y_crop_position accepts: 'top', 'center', or 'bottom'.
+ * @param bool       $additional_mimes Optional. Whether to output secondary mimes for this image size. Default is null
+ *                                     but may change to true in future versions. Sizes should be registered with false
+ *                                     only if they are not intended for use in a front-end context.
  */
-function add_image_size( $name, $width = 0, $height = 0, $crop = false ) {
+function add_image_size( $name, $width = 0, $height = 0, $crop = false, $additional_mimes = null ) {
 	global $_wp_additional_image_sizes;
 
+	// Trigger a warning if the size was registered without providing an `additional_mimes` parameter.
+	if ( null === $additional_mimes ) {
+		_doing_it_wrong( __FUNCTION__, __( 'You should provide a value for the `additional_mimes` parameter.' ), '6.1.0' );
+	}
+
 	$_wp_additional_image_sizes[ $name ] = array(
-		'width'  => absint( $width ),
-		'height' => absint( $height ),
-		'crop'   => $crop,
+		'width'            => absint( $width ),
+		'height'           => absint( $height ),
+		'crop'             => $crop,
+		'additional_mimes' => $additional_mimes,
 	);
 }
 
@@ -345,7 +355,7 @@ function remove_image_size( $name ) {
  *                           An array can specify positioning of the crop area. Default false.
  */
 function set_post_thumbnail_size( $width = 0, $height = 0, $crop = false ) {
-	add_image_size( 'post-thumbnail', $width, $height, $crop );
+	add_image_size( 'post-thumbnail', $width, $height, $crop, true );
 }
 
 /**
@@ -5316,9 +5326,9 @@ function wp_media_personal_data_exporter( $email_address, $page = 1 ) {
  */
 function _wp_add_additional_image_sizes() {
 	// 2x medium_large size.
-	add_image_size( '1536x1536', 1536, 1536 );
+	add_image_size( '1536x1536', 1536, 1536, false, true );
 	// 2x large size.
-	add_image_size( '2048x2048', 2048, 2048 );
+	add_image_size( '2048x2048', 2048, 2048, false, true );
 }
 
 /**
diff --git tests/phpunit/tests/image/functions.php tests/phpunit/tests/image/functions.php
index cb5a7971c9..dd0ad5e609 100644
--- tests/phpunit/tests/image/functions.php
+++ tests/phpunit/tests/image/functions.php
@@ -857,7 +857,7 @@ class Tests_Image_Functions extends WP_UnitTestCase {
 
 		$this->assertNotEmpty( $attachment_id );
 
-		add_image_size( 'test-size', 100, 100 );
+		add_image_size( 'test-size', 100, 100, false, false );
 		add_filter( 'fallback_intermediate_image_sizes', array( $this, 'filter_fallback_intermediate_image_sizes' ), 10, 2 );
 
 		$metadata = wp_generate_attachment_metadata( $attachment_id, $test_file );
diff --git tests/phpunit/tests/image/intermediateSize.php tests/phpunit/tests/image/intermediateSize.php
index 830359427a..517bc8c5b2 100644
--- tests/phpunit/tests/image/intermediateSize.php
+++ tests/phpunit/tests/image/intermediateSize.php
@@ -93,7 +93,7 @@ class Tests_Image_Intermediate_Size extends WP_UnitTestCase {
 	 * @requires function imagejpeg
 	 */
 	public function test_get_intermediate_sizes_by_name() {
-		add_image_size( 'test-size', 330, 220, true );
+		add_image_size( 'test-size', 330, 220, true, false );
 
 		$file = DIR_TESTDATA . '/images/waffles.jpg';
 		$id   = $this->_make_attachment( $file, 0 );
@@ -115,9 +115,9 @@ class Tests_Image_Intermediate_Size extends WP_UnitTestCase {
 	 */
 	public function test_get_intermediate_sizes_by_array_exact() {
 		// Only one dimention match shouldn't return false positive (see: #17626).
-		add_image_size( 'test-size', 330, 220, true );
-		add_image_size( 'false-height', 330, 400, true );
-		add_image_size( 'false-width', 600, 220, true );
+		add_image_size( 'test-size', 330, 220, true, false );
+		add_image_size( 'false-height', 330, 400, true, false );
+		add_image_size( 'false-width', 600, 220, true, false );
 
 		$file = DIR_TESTDATA . '/images/waffles.jpg';
 		$id   = $this->_make_attachment( $file, 0 );
@@ -138,9 +138,9 @@ class Tests_Image_Intermediate_Size extends WP_UnitTestCase {
 	public function test_get_intermediate_sizes_by_array_nearest() {
 		// If an exact size is not found, it should be returned.
 		// If not, find nearest size that is larger (see: #17626).
-		add_image_size( 'test-size', 450, 300, true );
-		add_image_size( 'false-height', 330, 100, true );
-		add_image_size( 'false-width', 150, 220, true );
+		add_image_size( 'test-size', 450, 300, true, false );
+		add_image_size( 'false-height', 330, 100, true, false );
+		add_image_size( 'false-width', 150, 220, true, false );
 
 		$file = DIR_TESTDATA . '/images/waffles.jpg';
 		$id   = $this->_make_attachment( $file, 0 );
@@ -161,8 +161,8 @@ class Tests_Image_Intermediate_Size extends WP_UnitTestCase {
 	public function test_get_intermediate_sizes_by_array_nearest_false() {
 		// If an exact size is not found, it should be returned.
 		// If not, find nearest size that is larger, otherwise return false (see: #17626).
-		add_image_size( 'false-height', 330, 100, true );
-		add_image_size( 'false-width', 150, 220, true );
+		add_image_size( 'false-height', 330, 100, true, false );
+		add_image_size( 'false-width', 150, 220, true, false );
 
 		$file = DIR_TESTDATA . '/images/waffles.jpg';
 		$id   = $this->_make_attachment( $file, 0 );
@@ -185,8 +185,8 @@ class Tests_Image_Intermediate_Size extends WP_UnitTestCase {
 		$width = 300;
 
 		// Only one dimention match shouldn't return false positive (see: #17626).
-		add_image_size( 'test-size', $width, 0, false );
-		add_image_size( 'false-height', $width, 100, true );
+		add_image_size( 'test-size', $width, 0, false, false );
+		add_image_size( 'false-height', $width, 100, true, false );
 
 		$file = DIR_TESTDATA . '/images/waffles.jpg';
 		$id   = $this->_make_attachment( $file, 0 );
@@ -214,8 +214,8 @@ class Tests_Image_Intermediate_Size extends WP_UnitTestCase {
 		$height = 202;
 
 		// Only one dimention match shouldn't return false positive (see: #17626).
-		add_image_size( 'test-size', 0, $height, false );
-		add_image_size( 'false-height', 300, $height, true );
+		add_image_size( 'test-size', 0, $height, false, false );
+		add_image_size( 'false-height', 300, $height, true, false );
 
 		$file = DIR_TESTDATA . '/images/waffles.jpg';
 		$id   = $this->_make_attachment( $file, 0 );
@@ -242,7 +242,7 @@ class Tests_Image_Intermediate_Size extends WP_UnitTestCase {
 		// Original is 600x400. 300x201 is close enough to match.
 		$width  = 300;
 		$height = 201;
-		add_image_size( 'off-by-one', $width, $height, true );
+		add_image_size( 'off-by-one', $width, $height, true, false );
 
 		$file = DIR_TESTDATA . '/images/waffles.jpg';
 		$id   = $this->_make_attachment( $file, 0 );
@@ -264,7 +264,7 @@ class Tests_Image_Intermediate_Size extends WP_UnitTestCase {
 	 */
 	public function test_get_intermediate_size_with_small_size_array() {
 		// Add a hard cropped size that matches the aspect ratio we're going to test.
-		add_image_size( 'test-size', 200, 100, true );
+		add_image_size( 'test-size', 200, 100, true, false );
 
 		$file = DIR_TESTDATA . '/images/waffles.jpg';
 		$id   = $this->_make_attachment( $file, 0 );
diff --git tests/phpunit/tests/media.php tests/phpunit/tests/media.php
index daf585d548..ee246b1d2f 100644
--- tests/phpunit/tests/media.php
+++ tests/phpunit/tests/media.php
@@ -1142,7 +1142,7 @@ VIDEO;
 		remove_image_size( 'test-size' );
 
 		$this->assertArrayNotHasKey( 'test-size', $_wp_additional_image_sizes );
-		add_image_size( 'test-size', 200, 600 );
+		add_image_size( 'test-size', 200, 600, false, false );
 
 		$sizes = wp_get_additional_image_sizes();
 
@@ -1154,11 +1154,50 @@ VIDEO;
 		$this->assertSame( 600, $sizes['test-size']['height'] );
 	}
 
+	/**
+	 * @ticket 56288
+	 */
+	public function test_add_image_size_additional_mimes() {
+		add_image_size( 'test-size-with-additional-mimes', 200, 600, false, true );
+		add_image_size( 'test-size-without-additional-mimes', 200, 600, false, false );
+
+		$sizes = wp_get_additional_image_sizes();
+
+		remove_image_size( 'test-size-with-additional-mimes' );
+		remove_image_size( 'test-size-without-additional-mimes' );
+
+		$this->assertArrayHasKey( 'test-size-with-additional-mimes', $sizes );
+		$this->assertArrayHasKey( 'test-size-without-additional-mimes', $sizes );
+		$this->assertTrue( $sizes['test-size-with-additional-mimes']['additional_mimes'] );
+		$this->assertFalse( $sizes['test-size-without-additional-mimes']['additional_mimes'] );
+	}
+
+	/**
+	 * @ticket 56288
+	 */
+	public function test__wp_filter_image_sizes_additional_mime_type_support_with_add_image_size() {
+		$default_sizes = wp_get_registered_image_subsizes();
+
+		add_image_size( 'test-size-with-additional-mimes', 200, 600, false, true );
+		add_image_size( 'test-size-without-additional-mimes', 200, 600, false, false );
+
+		$all_sizes      = wp_get_registered_image_subsizes();
+		$filtered_sizes = _wp_filter_image_sizes_additional_mime_type_support( $all_sizes, $this->large_id );
+
+		remove_image_size( 'test-size-with-additional-mimes' );
+		remove_image_size( 'test-size-without-additional-mimes' );
+
+		$expected_size_names   = array_keys( $default_sizes );
+		$expected_size_names[] = 'test-size-with-additional-mimes';
+
+		$this->assertSame( $expected_size_names, array_keys( $filtered_sizes ) );
+	}
+
 	/**
 	 * @ticket 26768
 	 */
 	public function test_remove_image_size() {
-		add_image_size( 'test-size', 200, 600 );
+		add_image_size( 'test-size', 200, 600, false, false );
 		$this->assertTrue( has_image_size( 'test-size' ) );
 		remove_image_size( 'test-size' );
 		$this->assertFalse( has_image_size( 'test-size' ) );
@@ -1168,7 +1207,7 @@ VIDEO;
 	 * @ticket 26951
 	 */
 	public function test_has_image_size() {
-		add_image_size( 'test-size', 200, 600 );
+		add_image_size( 'test-size', 200, 600, false, false );
 		$this->assertTrue( has_image_size( 'test-size' ) );
 
 		// Clean up.
diff --git tests/phpunit/tests/rest-api/rest-attachments-controller.php tests/phpunit/tests/rest-api/rest-attachments-controller.php
index c8a6e180a3..28cdde22a4 100644
--- tests/phpunit/tests/rest-api/rest-attachments-controller.php
+++ tests/phpunit/tests/rest-api/rest-attachments-controller.php
@@ -710,7 +710,7 @@ class WP_Test_REST_Attachments_Controller extends WP_Test_REST_Post_Type_Control
 			$this->test_file
 		);
 
-		add_image_size( 'rest-api-test', 119, 119, true );
+		add_image_size( 'rest-api-test', 119, 119, true, false );
 		wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $this->test_file ) );
 
 		$request            = new WP_REST_Request( 'GET', '/wp/v2/media/' . $attachment_id );
@@ -741,7 +741,7 @@ class WP_Test_REST_Attachments_Controller extends WP_Test_REST_Post_Type_Control
 			$this->test_file
 		);
 
-		add_image_size( 'rest-api-test', 119, 119, true );
+		add_image_size( 'rest-api-test', 119, 119, true, false );
 		wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $this->test_file ) );
 
 		add_filter( 'wp_get_attachment_image_src', '__return_false' );
