diff --git a/utils/tuning/rkisp1.py b/utils/tuning/rkisp1.py
new file mode 100755
index 00000000..a8cb0c39
--- /dev/null
+++ b/utils/tuning/rkisp1.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# Copyright (C) 2022, Paul Elder <paul.elder@ideasonboard.com>
+#
+# rkisp1.py - Tuning script for rkisp1
+
+import sys
+
+import libtuning as lt
+from libtuning.parsers import YamlParser
+from libtuning.generators import YamlOutput
+from libtuning.modules.lsc import LSCRkISP1
+
+tuner = lt.Tuner('RkISP1')
+tuner.add(LSCRkISP1(
+          # This can support other debug options (I can't think of any right
+          # now, but for future-proofing).
+          debug=[lt.Debug.Plot],
+
+          # This is for the actual LSC tuning, and is part of the base ALSC
+          # module. rkisp1's table sector sizes (16x16 programmed as mirrored
+          # 8x8) are separate, and is hardcoded in its specific ALSC tuning
+          # module.
+          sector_shape=(17, 17),
+
+          sector_x_gradient=lt.gradient.Linear(lt.Remainder.DistributeFront),
+          sector_y_gradient=lt.gradient.Linear(lt.Remainder.DistributeFront),
+
+          # This is the function that will be used to average the pixels in
+          # each sector. This can also be a custom function.
+          sector_average_function=lt.average.Mean(),
+
+          # This is the function that will be used to smooth the color ratio
+          # values.  This can also be a custom function.
+          smoothing_function=lt.smoothing.MedianBlur(3),
+          ))
+tuner.set_input_parser(YamlParser())
+tuner.set_output_formatter(YamlOutput())
+tuner.set_output_order([LSCRkISP1])
+
+if __name__ == '__main__':
+    sys.exit(tuner.run(sys.argv))
