docs: def _replay_index(replay_dir):
    """Output information for a directory of replays."""
    run_config = run_configs.get()
    replay_dir = run_config.abs_replay_path(replay_dir)
    print("Checking: ", replay_dir)
  
    with run_config.start(want_rgb=False) as controller:
      print("-" * 60)
      print(",".join((
          "filename",
          "build",
          "map_name",
          "game_duration_loops",
          "players",
          "P1-outcome",
          "P1-race",
          "P1-apm",
          "P2-race",
          "P2-apm",
      )))
  
      try:
        bad_replays = []
        for file_path in run_config.replay_paths(replay_dir):
          file_name = os.path.basename(file_path)
          try:
            info = controller.replay_info(run_config.replay_data(file_path))
          except remote_controller.RequestError as e:
            bad_replays.append("%s: %s" % (file_name, e))
            continue
          if info.HasField("error"):
            print("failed:", file_name, info.error, info.error_details)
            bad_replays.append(file_name)
          else:
            out = [
                file_name,
                info.base_build,
                info.map_name,
                info.game_duration_loops,
                len(info.player_info),
                sc_pb.Result.Name(info.player_info[0].player_result.result),
                sc_common.Race.Name(info.player_info[0].player_info.race_actual),
                info.player_info[0].player_apm,
            ]
            if len(info.player_info) >= 2:
              out += [
                  sc_common.Race.Name(
                      info.player_info[1].player_info.race_actual),
                  info.player_info[1].player_apm,
              ]
            print(u",".join(str(s) for s in out))
      except KeyboardInterrupt:
        pass
      finally:
        if bad_replays:
          print("\n")
          print("Replays with errors:")
          print("\n".join(bad_replays))