When device is MPS, use CPU for GFPGAN instead
diff --git a/modules/devices.py b/modules/devices.py
index ff82f2f64bb..5d9c7a0767c 100644
--- a/modules/devices.py
+++ b/modules/devices.py
@@ -33,7 +33,7 @@ def enable_tf32():
 errors.run(enable_tf32, "Enabling TF32")
 
 device = get_optimal_device()
-device_codeformer = cpu if has_mps else device
+device_gfpgan = device_codeformer = cpu if device.type == 'mps' else device
 dtype = torch.float16
 
 def randn(seed, shape):
diff --git a/modules/gfpgan_model.py b/modules/gfpgan_model.py
index dd3fbcab186..f1a564b732f 100644
--- a/modules/gfpgan_model.py
+++ b/modules/gfpgan_model.py
@@ -21,7 +21,7 @@ def gfpgann():
     global loaded_gfpgan_model
     global model_path
     if loaded_gfpgan_model is not None:
-        loaded_gfpgan_model.gfpgan.to(shared.device)
+        loaded_gfpgan_model.gfpgan.to(devices.device_gfpgan)
         return loaded_gfpgan_model
 
     if gfpgan_constructor is None:
@@ -36,8 +36,8 @@ def gfpgann():
     else:
         print("Unable to load gfpgan model!")
         return None
-    model = gfpgan_constructor(model_path=model_file, upscale=1, arch='clean', channel_multiplier=2, bg_upsampler=None)
-    model.gfpgan.to(shared.device)
+    model = gfpgan_constructor(model_path=model_file, upscale=1, arch='clean', channel_multiplier=2, bg_upsampler=None, device=devices.device_gfpgan)
+    model.gfpgan.to(devices.device_gfpgan)
     loaded_gfpgan_model = model
 
     return model

Attempting to use MPS for GFPGAN results in an unchanged image, so fall back to CPU instead so that GFPGAN works correctly. See issue #1367.