diff --git a/scripts/summarize.py b/scripts/summarize.py
index 2e9e84754d3dd4b2cd892073536ca4971b3d7600..deec097ff4a3724278f09c5007dc74e666597770 100755
--- a/scripts/summarize.py
+++ b/scripts/summarize.py
@@ -55,7 +55,9 @@ def export_dot(summary):
     for pkg, dep in edges:
         s +=  f'  "{pkg}" -> "{dep}";\n'
 
-    for pkg in summary['pkgs']:
+    # Deduplicate
+    pkgs = {pkg['drvPath']: pkg for pkg in summary['pkgs']}
+    for pkg in pkgs.values():
         color = 'lightblue'
         if pkg['failed']:
             color = 'indianred'
@@ -67,9 +69,9 @@ def export_dot(summary):
     return s
 
 def show_failures(summary, log_excerpt=100):
-    failed = [pkg
+    failed = {pkg['drvPath']: pkg
               for pkg in summary['pkgs']
-              if pkg['failed']]
+              if pkg['failed']}
     if len(failed) == 0:
         print('='*80)
         print('No issues encountered.')
@@ -78,33 +80,40 @@ def show_failures(summary, log_excerpt=100):
         print('='*80)
         print('These packages failed to build:')
         print()
-        for pkg in failed:
+        for pkg in failed.values():
             print(f"* {pkg['name']} ({pkg['drvPath']})")
-            print()
-            proc = subprocess.run(['nix', 'log', '--quiet', pkg['drvPath']],
-                                 stdout=subprocess.PIPE,
-                                 stderr=subprocess.DEVNULL,
-                                 encoding='UTF-8')
-            if proc.returncode != 0:
-                print(f'    Error: Failed to fetch log')
-                continue
-
-            print(f'  ---- Last {log_excerpt} lines of log follow ----')
-            lines = proc.stdout.split('\n')
-            if len(lines) > log_excerpt:
-                print('    â‹®')
-
-            print('\n    '.join(lines[-log_excerpt:]))
-            print('  ---- End of log ----------------------------')
-            print()
-            print()
+            if log_excerpt is not None:
+                print()
+                proc = subprocess.run(['nix', 'log', '--quiet', pkg['drvPath']],
+                                     stdout=subprocess.PIPE,
+                                     stderr=subprocess.DEVNULL,
+                                     encoding='UTF-8')
+                if proc.returncode != 0:
+                    print(f'    Error: Failed to fetch log')
+                    continue
+
+                print(f'  ---- Last {log_excerpt} lines of log follow ----')
+                lines = proc.stdout.split('\n')
+                if len(lines) > log_excerpt:
+                    print('    â‹®')
+
+                print('\n    '.join(lines[-log_excerpt:]))
+                print('  ---- End of log ----------------------------')
+                print()
+                print()
 
         print('='*80)
 
 if __name__ == "__main__":
     assert os.environ['GHC_TARBALL'] != None
+    import argparse
+    parser = argparse.ArgumentParser()
+    parser.add_argument('--no-logs', action='store_true', help="Don't export logs (useful when logs are unavailable as nix remote builds were used)")
+    args = parser.parse_args()
+
     summary = read_summary()
-    export_logs(summary)
+    if not args.no_logs:
+        export_logs(summary)
     json.dump(summary, Path('summary.json').open('w'))
-    show_failures(summary)
+    show_failures(summary, log_excerpt=None if args.no_logs else 100)
     Path('summary.dot').write_text(export_dot(summary))