diff --git a/frc971/vision/modify_extrinsics.cc b/frc971/vision/modify_extrinsics.cc
index d021744..355f790 100644
--- a/frc971/vision/modify_extrinsics.cc
+++ b/frc971/vision/modify_extrinsics.cc
@@ -4,6 +4,7 @@
 
 #include "Eigen/Dense"
 #include "Eigen/Geometry"
+#include "absl/flags/flag.h"
 #include "absl/strings/str_format.h"
 
 #include "aos/configuration.h"
@@ -23,28 +24,30 @@
 // By default, writes to /tmp, but will write to calib_files folder if
 // full path is given and calibration_folder is blank
 
-DEFINE_string(orig_calib_file, "",
-              "Intrinsics to use for estimating board pose prior to solving "
-              "for the new intrinsics.");
-DEFINE_string(calibration_folder, "/tmp", "Folder to place calibration files.");
-DEFINE_string(node_name, "",
-              "Node name to use, e.g. orin1, imu; unchanged if blank");
-DEFINE_int32(team_number, -1, "Team number to use; unchanged if -1");
-DEFINE_int32(camera_number, -1, "Camera number to use; unchanged if -1");
+ABSL_FLAG(std::string, orig_calib_file, "",
+          "Intrinsics to use for estimating board pose prior to solving "
+          "for the new intrinsics.");
+ABSL_FLAG(std::string, calibration_folder, "/tmp",
+          "Folder to place calibration files.");
+ABSL_FLAG(std::string, node_name, "",
+          "Node name to use, e.g. orin1, imu; unchanged if blank");
+ABSL_FLAG(int32_t, team_number, -1, "Team number to use; unchanged if -1");
+ABSL_FLAG(int32_t, camera_number, -1, "Camera number to use; unchanged if -1");
 
-DEFINE_bool(set_extrinsics, true, "Set to false to ignore extrinsic data");
-DEFINE_bool(use_inches, true,
-            "Whether to use inches as units (meters if false)");
-DEFINE_bool(use_degrees, true,
-            "Whether to use degrees as units (radians if false)");
-DEFINE_double(camera_x, 0.0, "x location of camera");
-DEFINE_double(camera_y, 0.0, "y location of camera");
-DEFINE_double(camera_z, 0.0, "z location of camera");
+ABSL_FLAG(bool, set_extrinsics, true, "Set to false to ignore extrinsic data");
+ABSL_FLAG(bool, use_inches, true,
+          "Whether to use inches as units (meters if false)");
+ABSL_FLAG(bool, use_degrees, true,
+          "Whether to use degrees as units (radians if false)");
+ABSL_FLAG(double, camera_x, 0.0, "x location of camera");
+ABSL_FLAG(double, camera_y, 0.0, "y location of camera");
+ABSL_FLAG(double, camera_z, 0.0, "z location of camera");
 // Don't currently allow for roll of cameras
-DEFINE_double(camera_yaw, 0.0, "yaw of camera about robot z axis");
-DEFINE_double(camera_pitch, 0.0, "pitch of camera relative to robot y axis");
+ABSL_FLAG(double, camera_yaw, 0.0, "yaw of camera about robot z axis");
+ABSL_FLAG(double, camera_pitch, 0.0,
+          "pitch of camera relative to robot y axis");
 // TODO: This could be done by setting the pixel size and using the intrinsics
-DEFINE_double(focal_length, 0.002, "Focal length in meters");
+ABSL_FLAG(double, focal_length, 0.002, "Focal length in meters");
 
 namespace frc971::vision {
 namespace {
@@ -74,30 +77,34 @@
   // If we're told to set the extrinsics, clear old and add in new
   flatbuffers::Offset<calibration::TransformationMatrix>
       fixed_extrinsics_offset;
-  if (FLAGS_set_extrinsics) {
+  if (absl::GetFlag(FLAGS_set_extrinsics)) {
     cal_copy.mutable_message()->clear_fixed_extrinsics();
     Eigen::Affine3d extrinsic_matrix;
     // Convert to metric
-    double translation_scale = (FLAGS_use_inches ? 0.0254 : 1.0);
-    Eigen::Translation3d translation(FLAGS_camera_x * translation_scale,
-                                     FLAGS_camera_y * translation_scale,
-                                     FLAGS_camera_z * translation_scale);
+    double translation_scale = (absl::GetFlag(FLAGS_use_inches) ? 0.0254 : 1.0);
+    Eigen::Translation3d translation(
+        absl::GetFlag(FLAGS_camera_x) * translation_scale,
+        absl::GetFlag(FLAGS_camera_y) * translation_scale,
+        absl::GetFlag(FLAGS_camera_z) * translation_scale);
 
     // convert to radians
-    double angle_scale = (FLAGS_use_degrees ? M_PI / 180.0 : 1.0);
+    double angle_scale =
+        (absl::GetFlag(FLAGS_use_degrees) ? M_PI / 180.0 : 1.0);
     // The rotation that takes robot coordinates (x forward, z up) to camera
     // coordiantes (z forward, x right)
     Eigen::Quaterniond R_robo_cam =
         Eigen::AngleAxisd(-M_PI / 2.0, Eigen::Vector3d::UnitZ()) *
         Eigen::AngleAxisd(-M_PI / 2.0, Eigen::Vector3d::UnitX());
-    Eigen::AngleAxisd pitchAngle(FLAGS_camera_pitch * angle_scale,
-                                 Eigen::Vector3d::UnitY());
-    Eigen::AngleAxisd yawAngle(FLAGS_camera_yaw * angle_scale,
+    Eigen::AngleAxisd pitchAngle(
+        absl::GetFlag(FLAGS_camera_pitch) * angle_scale,
+        Eigen::Vector3d::UnitY());
+    Eigen::AngleAxisd yawAngle(absl::GetFlag(FLAGS_camera_yaw) * angle_scale,
                                Eigen::Vector3d::UnitZ());
 
     Eigen::Quaterniond rotation = yawAngle * pitchAngle * R_robo_cam;
     Eigen::Vector3d focal_length_offset =
-        (rotation * Eigen::Translation3d(0.0, 0.0, FLAGS_focal_length))
+        (rotation *
+         Eigen::Translation3d(0.0, 0.0, absl::GetFlag(FLAGS_focal_length)))
             .translation();
     translation = translation * Eigen::Translation3d(focal_length_offset);
 
@@ -113,7 +120,7 @@
   calibration::CameraCalibration::Builder camera_calibration_builder(fbb);
   camera_calibration_builder.add_node_name(node_name_offset);
   camera_calibration_builder.add_team_number(team_number);
-  if (FLAGS_set_extrinsics) {
+  if (absl::GetFlag(FLAGS_set_extrinsics)) {
     camera_calibration_builder.add_fixed_extrinsics(fixed_extrinsics_offset);
   }
   camera_calibration_builder.add_camera_number(camera_number);
@@ -136,15 +143,15 @@
               orig_calib_filename);
 
   // Populate the new variables from command-line or from base_calibration
-  std::string node_name =
-      (FLAGS_node_name == "" ? base_calibration.message().node_name()->str()
-                             : FLAGS_node_name);
-  int team_number =
-      (FLAGS_team_number == -1 ? base_calibration.message().team_number()
-                               : FLAGS_team_number);
-  int camera_number =
-      (FLAGS_camera_number == -1 ? base_calibration.message().camera_number()
-                                 : FLAGS_camera_number);
+  std::string node_name = (absl::GetFlag(FLAGS_node_name) == ""
+                               ? base_calibration.message().node_name()->str()
+                               : absl::GetFlag(FLAGS_node_name));
+  int team_number = (absl::GetFlag(FLAGS_team_number) == -1
+                         ? base_calibration.message().team_number()
+                         : absl::GetFlag(FLAGS_team_number));
+  int camera_number = (absl::GetFlag(FLAGS_camera_number) == -1
+                           ? base_calibration.message().camera_number()
+                           : absl::GetFlag(FLAGS_camera_number));
   aos::FlatbufferDetachedBuffer<calibration::CameraCalibration>
       new_calibration = BuildCalibration(&base_calibration.message(), node_name,
                                          camera_number, team_number);
@@ -158,9 +165,9 @@
   std::string camera_id = base_calibration.message().camera_id()->str();
 
   const std::string dirname =
-      (FLAGS_calibration_folder == ""
+      (absl::GetFlag(FLAGS_calibration_folder) == ""
            ? std::filesystem::path(orig_calib_filename).parent_path().string()
-           : FLAGS_calibration_folder);
+           : absl::GetFlag(FLAGS_calibration_folder));
   const std::string new_calib_filename = frc971::vision::CalibrationFilename(
       dirname, node_name.c_str(), team_number, camera_number, camera_id.c_str(),
       time_ss.str());
