Remove image_config.background_color
diff --git a/internal/cgen/base/image-public.h b/internal/cgen/base/image-public.h
index 1005800..0821628 100644
--- a/internal/cgen/base/image-public.h
+++ b/internal/cgen/base/image-public.h
@@ -538,7 +538,6 @@
   struct {
     uint64_t first_frame_io_position;
     bool first_frame_is_opaque;
-    wuffs_base__color_u32_argb_premul background_color;
   } private_impl;
 
 #ifdef __cplusplus
@@ -547,13 +546,11 @@
                   uint32_t width,
                   uint32_t height,
                   uint64_t first_frame_io_position,
-                  bool first_frame_is_opaque,
-                  wuffs_base__color_u32_argb_premul background_color);
+                  bool first_frame_is_opaque);
   inline void invalidate();
   inline bool is_valid() const;
   inline uint64_t first_frame_io_position() const;
   inline bool first_frame_is_opaque() const;
-  inline wuffs_base__color_u32_argb_premul background_color() const;
 #endif  // __cplusplus
 
 } wuffs_base__image_config;
@@ -569,15 +566,13 @@
 
 // TODO: Should this function return bool? An error type?
 static inline void  //
-wuffs_base__image_config__set(
-    wuffs_base__image_config* c,
-    wuffs_base__pixel_format pixfmt,
-    wuffs_base__pixel_subsampling pixsub,
-    uint32_t width,
-    uint32_t height,
-    uint64_t first_frame_io_position,
-    bool first_frame_is_opaque,
-    wuffs_base__color_u32_argb_premul background_color) {
+wuffs_base__image_config__set(wuffs_base__image_config* c,
+                              wuffs_base__pixel_format pixfmt,
+                              wuffs_base__pixel_subsampling pixsub,
+                              uint32_t width,
+                              uint32_t height,
+                              uint64_t first_frame_io_position,
+                              bool first_frame_is_opaque) {
   if (!c) {
     return;
   }
@@ -588,7 +583,6 @@
     c->pixcfg.private_impl.height = height;
     c->private_impl.first_frame_io_position = first_frame_io_position;
     c->private_impl.first_frame_is_opaque = first_frame_is_opaque;
-    c->private_impl.background_color = background_color;
     return;
   }
 
@@ -598,7 +592,6 @@
   c->pixcfg.private_impl.height = 0;
   c->private_impl.first_frame_io_position = 0;
   c->private_impl.first_frame_is_opaque = 0;
-  c->private_impl.background_color = 0;
 }
 
 static inline void  //
@@ -610,7 +603,6 @@
     c->pixcfg.private_impl.height = 0;
     c->private_impl.first_frame_io_position = 0;
     c->private_impl.first_frame_is_opaque = 0;
-    c->private_impl.background_color = 0;
   }
 }
 
@@ -631,25 +623,17 @@
   return c ? c->private_impl.first_frame_is_opaque : false;
 }
 
-static inline wuffs_base__color_u32_argb_premul  //
-wuffs_base__image_config__background_color(const wuffs_base__image_config* c) {
-  return c ? c->private_impl.background_color : 0;
-}
-
 #ifdef __cplusplus
 
 inline void  //
-wuffs_base__image_config::set(
-    wuffs_base__pixel_format pixfmt,
-    wuffs_base__pixel_subsampling pixsub,
-    uint32_t width,
-    uint32_t height,
-    uint64_t first_frame_io_position,
-    bool first_frame_is_opaque,
-    wuffs_base__color_u32_argb_premul background_color) {
+wuffs_base__image_config::set(wuffs_base__pixel_format pixfmt,
+                              wuffs_base__pixel_subsampling pixsub,
+                              uint32_t width,
+                              uint32_t height,
+                              uint64_t first_frame_io_position,
+                              bool first_frame_is_opaque) {
   wuffs_base__image_config__set(this, pixfmt, pixsub, width, height,
-                                first_frame_io_position, first_frame_is_opaque,
-                                background_color);
+                                first_frame_io_position, first_frame_is_opaque);
 }
 
 inline void  //
@@ -672,11 +656,6 @@
   return wuffs_base__image_config__first_frame_is_opaque(this);
 }
 
-inline wuffs_base__color_u32_argb_premul  //
-wuffs_base__image_config::background_color() const {
-  return wuffs_base__image_config__background_color(this);
-}
-
 #endif  // __cplusplus
 
 // --------
diff --git a/internal/cgen/data.go b/internal/cgen/data.go
index 49a417e..17ea82a 100644
--- a/internal/cgen/data.go
+++ b/internal/cgen/data.go
@@ -126,11 +126,11 @@
 	"((bits_per_pixel % 8) != 0)) {\n    // TODO: support fraction-of-byte pixels, e.g. 1 bit per pixel?\n    return 0;\n  }\n  uint64_t bytes_per_pixel = bits_per_pixel / 8;\n\n  uint64_t n =\n      ((uint64_t)c->private_impl.width) * ((uint64_t)c->private_impl.height);\n  if (n > (UINT64_MAX / bytes_per_pixel)) {\n    return 0;\n  }\n  n *= bytes_per_pixel;\n\n  if (wuffs_base__pixel_format__is_indexed(c->private_impl.pixfmt)) {\n    if (n > (UINT64_MAX - 1024)) {\n      return 0;\n    }\n    n += 1024;\n  }\n\n  return n;\n}\n\n#ifdef __cplusplus\n\ninline void  //\nwuffs_base__pixel_config::set(wuffs_base__pixel_format pixfmt,\n                              wuffs_base__pixel_subsampling pixsub,\n                              uint32_t width,\n                              uint32_t height) {\n  wuffs_base__pixel_config__set(this, pixfmt, pixsub, width, height);\n}\n\ninline void  //\nwuffs_base__pixel_config::invalidate() {\n  wuffs_base__pixel_config__invalidate(this);\n}\n\ninline bool  //\nwuffs_base__pixel_config::is_valid() const {\n  return wuff" +
 	"s_base__pixel_config__is_valid(this);\n}\n\ninline wuffs_base__pixel_format  //\nwuffs_base__pixel_config::pixel_format() const {\n  return wuffs_base__pixel_config__pixel_format(this);\n}\n\ninline wuffs_base__pixel_subsampling  //\nwuffs_base__pixel_config::pixel_subsampling() const {\n  return wuffs_base__pixel_config__pixel_subsampling(this);\n}\n\ninline wuffs_base__rect_ie_u32  //\nwuffs_base__pixel_config::bounds() const {\n  return wuffs_base__pixel_config__bounds(this);\n}\n\ninline uint32_t  //\nwuffs_base__pixel_config::width() const {\n  return wuffs_base__pixel_config__width(this);\n}\n\ninline uint32_t  //\nwuffs_base__pixel_config::height() const {\n  return wuffs_base__pixel_config__height(this);\n}\n\ninline uint64_t  //\nwuffs_base__pixel_config::pixbuf_len() const {\n  return wuffs_base__pixel_config__pixbuf_len(this);\n}\n\n#endif  // __cplusplus\n\n" +
 	"" +
-	"// --------\n\ntypedef struct {\n  wuffs_base__pixel_config pixcfg;\n\n  // Do not access the private_impl's fields directly. There is no API/ABI\n  // compatibility or safety guarantee if you do so.\n  struct {\n    uint64_t first_frame_io_position;\n    bool first_frame_is_opaque;\n    wuffs_base__color_u32_argb_premul background_color;\n  } private_impl;\n\n#ifdef __cplusplus\n  inline void set(wuffs_base__pixel_format pixfmt,\n                  wuffs_base__pixel_subsampling pixsub,\n                  uint32_t width,\n                  uint32_t height,\n                  uint64_t first_frame_io_position,\n                  bool first_frame_is_opaque,\n                  wuffs_base__color_u32_argb_premul background_color);\n  inline void invalidate();\n  inline bool is_valid() const;\n  inline uint64_t first_frame_io_position() const;\n  inline bool first_frame_is_opaque() const;\n  inline wuffs_base__color_u32_argb_premul background_color() const;\n#endif  // __cplusplus\n\n} wuffs_base__image_config;\n\nstatic inline wuffs_base__image_" +
-	"config  //\nwuffs_base__null_image_config() {\n  wuffs_base__image_config ret;\n  ret.pixcfg = wuffs_base__null_pixel_config();\n  ret.private_impl.first_frame_io_position = 0;\n  ret.private_impl.first_frame_is_opaque = false;\n  return ret;\n}\n\n// TODO: Should this function return bool? An error type?\nstatic inline void  //\nwuffs_base__image_config__set(\n    wuffs_base__image_config* c,\n    wuffs_base__pixel_format pixfmt,\n    wuffs_base__pixel_subsampling pixsub,\n    uint32_t width,\n    uint32_t height,\n    uint64_t first_frame_io_position,\n    bool first_frame_is_opaque,\n    wuffs_base__color_u32_argb_premul background_color) {\n  if (!c) {\n    return;\n  }\n  if (wuffs_base__pixel_format__is_valid(pixfmt)) {\n    c->pixcfg.private_impl.pixfmt = pixfmt;\n    c->pixcfg.private_impl.pixsub = pixsub;\n    c->pixcfg.private_impl.width = width;\n    c->pixcfg.private_impl.height = height;\n    c->private_impl.first_frame_io_position = first_frame_io_position;\n    c->private_impl.first_frame_is_opaque = first_frame_is_opaque;" +
-	"\n    c->private_impl.background_color = background_color;\n    return;\n  }\n\n  c->pixcfg.private_impl.pixfmt = 0;\n  c->pixcfg.private_impl.pixsub = 0;\n  c->pixcfg.private_impl.width = 0;\n  c->pixcfg.private_impl.height = 0;\n  c->private_impl.first_frame_io_position = 0;\n  c->private_impl.first_frame_is_opaque = 0;\n  c->private_impl.background_color = 0;\n}\n\nstatic inline void  //\nwuffs_base__image_config__invalidate(wuffs_base__image_config* c) {\n  if (c) {\n    c->pixcfg.private_impl.pixfmt = 0;\n    c->pixcfg.private_impl.pixsub = 0;\n    c->pixcfg.private_impl.width = 0;\n    c->pixcfg.private_impl.height = 0;\n    c->private_impl.first_frame_io_position = 0;\n    c->private_impl.first_frame_is_opaque = 0;\n    c->private_impl.background_color = 0;\n  }\n}\n\nstatic inline bool  //\nwuffs_base__image_config__is_valid(const wuffs_base__image_config* c) {\n  return c && wuffs_base__pixel_config__is_valid(&(c->pixcfg));\n}\n\nstatic inline uint64_t  //\nwuffs_base__image_config__first_frame_io_position(\n    const wuffs_base__ima" +
-	"ge_config* c) {\n  return c ? c->private_impl.first_frame_io_position : 0;\n}\n\nstatic inline bool  //\nwuffs_base__image_config__first_frame_is_opaque(\n    const wuffs_base__image_config* c) {\n  return c ? c->private_impl.first_frame_is_opaque : false;\n}\n\nstatic inline wuffs_base__color_u32_argb_premul  //\nwuffs_base__image_config__background_color(const wuffs_base__image_config* c) {\n  return c ? c->private_impl.background_color : 0;\n}\n\n#ifdef __cplusplus\n\ninline void  //\nwuffs_base__image_config::set(\n    wuffs_base__pixel_format pixfmt,\n    wuffs_base__pixel_subsampling pixsub,\n    uint32_t width,\n    uint32_t height,\n    uint64_t first_frame_io_position,\n    bool first_frame_is_opaque,\n    wuffs_base__color_u32_argb_premul background_color) {\n  wuffs_base__image_config__set(this, pixfmt, pixsub, width, height,\n                                first_frame_io_position, first_frame_is_opaque,\n                                background_color);\n}\n\ninline void  //\nwuffs_base__image_config::invalidate() {\n  wuffs_ba" +
-	"se__image_config__invalidate(this);\n}\n\ninline bool  //\nwuffs_base__image_config::is_valid() const {\n  return wuffs_base__image_config__is_valid(this);\n}\n\ninline uint64_t  //\nwuffs_base__image_config::first_frame_io_position() const {\n  return wuffs_base__image_config__first_frame_io_position(this);\n}\n\ninline bool  //\nwuffs_base__image_config::first_frame_is_opaque() const {\n  return wuffs_base__image_config__first_frame_is_opaque(this);\n}\n\ninline wuffs_base__color_u32_argb_premul  //\nwuffs_base__image_config::background_color() const {\n  return wuffs_base__image_config__background_color(this);\n}\n\n#endif  // __cplusplus\n\n" +
+	"// --------\n\ntypedef struct {\n  wuffs_base__pixel_config pixcfg;\n\n  // Do not access the private_impl's fields directly. There is no API/ABI\n  // compatibility or safety guarantee if you do so.\n  struct {\n    uint64_t first_frame_io_position;\n    bool first_frame_is_opaque;\n  } private_impl;\n\n#ifdef __cplusplus\n  inline void set(wuffs_base__pixel_format pixfmt,\n                  wuffs_base__pixel_subsampling pixsub,\n                  uint32_t width,\n                  uint32_t height,\n                  uint64_t first_frame_io_position,\n                  bool first_frame_is_opaque);\n  inline void invalidate();\n  inline bool is_valid() const;\n  inline uint64_t first_frame_io_position() const;\n  inline bool first_frame_is_opaque() const;\n#endif  // __cplusplus\n\n} wuffs_base__image_config;\n\nstatic inline wuffs_base__image_config  //\nwuffs_base__null_image_config() {\n  wuffs_base__image_config ret;\n  ret.pixcfg = wuffs_base__null_pixel_config();\n  ret.private_impl.first_frame_io_position = 0;\n  ret.private_impl.fir" +
+	"st_frame_is_opaque = false;\n  return ret;\n}\n\n// TODO: Should this function return bool? An error type?\nstatic inline void  //\nwuffs_base__image_config__set(wuffs_base__image_config* c,\n                              wuffs_base__pixel_format pixfmt,\n                              wuffs_base__pixel_subsampling pixsub,\n                              uint32_t width,\n                              uint32_t height,\n                              uint64_t first_frame_io_position,\n                              bool first_frame_is_opaque) {\n  if (!c) {\n    return;\n  }\n  if (wuffs_base__pixel_format__is_valid(pixfmt)) {\n    c->pixcfg.private_impl.pixfmt = pixfmt;\n    c->pixcfg.private_impl.pixsub = pixsub;\n    c->pixcfg.private_impl.width = width;\n    c->pixcfg.private_impl.height = height;\n    c->private_impl.first_frame_io_position = first_frame_io_position;\n    c->private_impl.first_frame_is_opaque = first_frame_is_opaque;\n    return;\n  }\n\n  c->pixcfg.private_impl.pixfmt = 0;\n  c->pixcfg.private_impl.pixsub = 0;\n  c->pix" +
+	"cfg.private_impl.width = 0;\n  c->pixcfg.private_impl.height = 0;\n  c->private_impl.first_frame_io_position = 0;\n  c->private_impl.first_frame_is_opaque = 0;\n}\n\nstatic inline void  //\nwuffs_base__image_config__invalidate(wuffs_base__image_config* c) {\n  if (c) {\n    c->pixcfg.private_impl.pixfmt = 0;\n    c->pixcfg.private_impl.pixsub = 0;\n    c->pixcfg.private_impl.width = 0;\n    c->pixcfg.private_impl.height = 0;\n    c->private_impl.first_frame_io_position = 0;\n    c->private_impl.first_frame_is_opaque = 0;\n  }\n}\n\nstatic inline bool  //\nwuffs_base__image_config__is_valid(const wuffs_base__image_config* c) {\n  return c && wuffs_base__pixel_config__is_valid(&(c->pixcfg));\n}\n\nstatic inline uint64_t  //\nwuffs_base__image_config__first_frame_io_position(\n    const wuffs_base__image_config* c) {\n  return c ? c->private_impl.first_frame_io_position : 0;\n}\n\nstatic inline bool  //\nwuffs_base__image_config__first_frame_is_opaque(\n    const wuffs_base__image_config* c) {\n  return c ? c->private_impl.first_frame_is_opaqu" +
+	"e : false;\n}\n\n#ifdef __cplusplus\n\ninline void  //\nwuffs_base__image_config::set(wuffs_base__pixel_format pixfmt,\n                              wuffs_base__pixel_subsampling pixsub,\n                              uint32_t width,\n                              uint32_t height,\n                              uint64_t first_frame_io_position,\n                              bool first_frame_is_opaque) {\n  wuffs_base__image_config__set(this, pixfmt, pixsub, width, height,\n                                first_frame_io_position, first_frame_is_opaque);\n}\n\ninline void  //\nwuffs_base__image_config::invalidate() {\n  wuffs_base__image_config__invalidate(this);\n}\n\ninline bool  //\nwuffs_base__image_config::is_valid() const {\n  return wuffs_base__image_config__is_valid(this);\n}\n\ninline uint64_t  //\nwuffs_base__image_config::first_frame_io_position() const {\n  return wuffs_base__image_config__first_frame_io_position(this);\n}\n\ninline bool  //\nwuffs_base__image_config::first_frame_is_opaque() const {\n  return wuffs_base__image_co" +
+	"nfig__first_frame_is_opaque(this);\n}\n\n#endif  // __cplusplus\n\n" +
 	"" +
 	"// --------\n\n// wuffs_base__animation_blend encodes, for an animated image, how to blend the\n// transparent pixels of this frame with the existing canvas. In Porter-Duff\n// compositing operator terminology:\n//  - 0 means the frame may be transparent, and should be blended \"src over\n//    dst\", also known as just \"over\".\n//  - 1 means the frame may be transparent, and should be blended \"src\".\n//  - 2 means the frame is completely opaque, so that \"src over dst\" and \"src\"\n//    are equivalent.\n//\n// These semantics are conservative. It is valid for a completely opaque frame\n// to have a blend value other than 2.\ntypedef uint8_t wuffs_base__animation_blend;\n\n#define WUFFS_BASE__ANIMATION_BLEND__SRC_OVER_DST \\\n  ((wuffs_base__animation_blend)0)\n#define WUFFS_BASE__ANIMATION_BLEND__SRC ((wuffs_base__animation_blend)1)\n#define WUFFS_BASE__ANIMATION_BLEND__OPAQUE ((wuffs_base__animation_blend)2)\n\n" +
 	"" +
diff --git a/lang/builtin/builtin.go b/lang/builtin/builtin.go
index 8d088f4..757b472 100644
--- a/lang/builtin/builtin.go
+++ b/lang/builtin/builtin.go
@@ -312,7 +312,7 @@
 	// ---- image_config
 
 	"image_config.set!(pixfmt u32, pixsub u32, width u32, height u32, " +
-		"first_frame_io_position u64, first_frame_is_opaque bool, background_color u32)",
+		"first_frame_io_position u64, first_frame_is_opaque bool)",
 
 	// ---- pixel_buffer
 
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index 5b94928..84cea8d 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -2068,7 +2068,6 @@
   struct {
     uint64_t first_frame_io_position;
     bool first_frame_is_opaque;
-    wuffs_base__color_u32_argb_premul background_color;
   } private_impl;
 
 #ifdef __cplusplus
@@ -2077,13 +2076,11 @@
                   uint32_t width,
                   uint32_t height,
                   uint64_t first_frame_io_position,
-                  bool first_frame_is_opaque,
-                  wuffs_base__color_u32_argb_premul background_color);
+                  bool first_frame_is_opaque);
   inline void invalidate();
   inline bool is_valid() const;
   inline uint64_t first_frame_io_position() const;
   inline bool first_frame_is_opaque() const;
-  inline wuffs_base__color_u32_argb_premul background_color() const;
 #endif  // __cplusplus
 
 } wuffs_base__image_config;
@@ -2099,15 +2096,13 @@
 
 // TODO: Should this function return bool? An error type?
 static inline void  //
-wuffs_base__image_config__set(
-    wuffs_base__image_config* c,
-    wuffs_base__pixel_format pixfmt,
-    wuffs_base__pixel_subsampling pixsub,
-    uint32_t width,
-    uint32_t height,
-    uint64_t first_frame_io_position,
-    bool first_frame_is_opaque,
-    wuffs_base__color_u32_argb_premul background_color) {
+wuffs_base__image_config__set(wuffs_base__image_config* c,
+                              wuffs_base__pixel_format pixfmt,
+                              wuffs_base__pixel_subsampling pixsub,
+                              uint32_t width,
+                              uint32_t height,
+                              uint64_t first_frame_io_position,
+                              bool first_frame_is_opaque) {
   if (!c) {
     return;
   }
@@ -2118,7 +2113,6 @@
     c->pixcfg.private_impl.height = height;
     c->private_impl.first_frame_io_position = first_frame_io_position;
     c->private_impl.first_frame_is_opaque = first_frame_is_opaque;
-    c->private_impl.background_color = background_color;
     return;
   }
 
@@ -2128,7 +2122,6 @@
   c->pixcfg.private_impl.height = 0;
   c->private_impl.first_frame_io_position = 0;
   c->private_impl.first_frame_is_opaque = 0;
-  c->private_impl.background_color = 0;
 }
 
 static inline void  //
@@ -2140,7 +2133,6 @@
     c->pixcfg.private_impl.height = 0;
     c->private_impl.first_frame_io_position = 0;
     c->private_impl.first_frame_is_opaque = 0;
-    c->private_impl.background_color = 0;
   }
 }
 
@@ -2161,25 +2153,17 @@
   return c ? c->private_impl.first_frame_is_opaque : false;
 }
 
-static inline wuffs_base__color_u32_argb_premul  //
-wuffs_base__image_config__background_color(const wuffs_base__image_config* c) {
-  return c ? c->private_impl.background_color : 0;
-}
-
 #ifdef __cplusplus
 
 inline void  //
-wuffs_base__image_config::set(
-    wuffs_base__pixel_format pixfmt,
-    wuffs_base__pixel_subsampling pixsub,
-    uint32_t width,
-    uint32_t height,
-    uint64_t first_frame_io_position,
-    bool first_frame_is_opaque,
-    wuffs_base__color_u32_argb_premul background_color) {
+wuffs_base__image_config::set(wuffs_base__pixel_format pixfmt,
+                              wuffs_base__pixel_subsampling pixsub,
+                              uint32_t width,
+                              uint32_t height,
+                              uint64_t first_frame_io_position,
+                              bool first_frame_is_opaque) {
   wuffs_base__image_config__set(this, pixfmt, pixsub, width, height,
-                                first_frame_io_position, first_frame_is_opaque,
-                                background_color);
+                                first_frame_io_position, first_frame_is_opaque);
 }
 
 inline void  //
@@ -2202,11 +2186,6 @@
   return wuffs_base__image_config__first_frame_is_opaque(this);
 }
 
-inline wuffs_base__color_u32_argb_premul  //
-wuffs_base__image_config::background_color() const {
-  return wuffs_base__image_config__background_color(this);
-}
-
 #endif  // __cplusplus
 
 // --------
@@ -8869,8 +8848,7 @@
       wuffs_base__image_config__set(
           a_dst, 1191444488, 0, self->private_impl.f_width,
           self->private_impl.f_height,
-          self->private_impl.f_frame_config_io_position, v_ffio,
-          self->private_impl.f_background_color_u32_argb_premul);
+          self->private_impl.f_frame_config_io_position, v_ffio);
     }
     self->private_impl.f_call_sequence = 3;
 
diff --git a/std/gif/decode_gif.wuffs b/std/gif/decode_gif.wuffs
index 74f6615..cfa6fd9 100644
--- a/std/gif/decode_gif.wuffs
+++ b/std/gif/decode_gif.wuffs
@@ -312,8 +312,7 @@
 			width:this.width,
 			height:this.height,
 			first_frame_io_position:this.frame_config_io_position,
-			first_frame_is_opaque:ffio,
-			background_color:this.background_color_u32_argb_premul)
+			first_frame_is_opaque:ffio)
 	}
 
 	this.call_sequence = 3