diff --git a/.env b/.env
new file mode 100644
index 0000000..f2cafa5
--- /dev/null
+++ b/.env
@@ -0,0 +1,2 @@
+export YDOTOOL_SOCKET=/tmp/.ydotool_socket
+[ -f venv/bin/activate ] && . venv/bin/activate
diff --git a/patapon.py b/patapon.py
new file mode 100755
index 0000000..498ff30
--- /dev/null
+++ b/patapon.py
@@ -0,0 +1,41 @@
+#! /usr/bin/env python3
+import argparse
+
+def ydotool(key):
+    pass
+
+def playsong(song):
+    pass
+
+def main():
+    # A list of all possible songs, expressed as their cardinal directions
+    # We'll map these to keystrokes later
+    songs = [
+            # March of Mobility
+            "L-L-L-R-",
+            # Aria of Attack
+            "R-R-L-R-",
+            # Lament of Defense
+            "U-U-L-R-",
+            # Hold-Tight Hoe-Down/Concerto of Charge
+            "R-R-U-U-",
+            # Melody with a Bounce/Jingle of Jump
+            "D-D-U-U-",
+            # Ballad of 1999/Pizzicato of Party
+            "L-R-D-U-",
+            # Song of Miracles (Djinn)
+            "D-DD-DD-",
+            # Leisurely Lullaby
+            # Not sure why you'd want to cast this on repeat, but you can I guess
+            "L-R-L-R-",
+            # Step Back Strut
+            "U-L-U-L-"
+    ]
+    parser = argparse.ArgumentParser(
+        description="Play a sequence of Patapon commands on repeat forever. Makes no attempt to sync to the game -- that's your job"
+        )
+    parser.add_argument('song',default="R-R-L-R-",nargs="+",choices=songs,help="The song to play. Defaults to Aria of Attack. When expressing a song, use eighth notes, dashes, and cardinal directions to designate the drums. For example, party would be \"L-R-D-U-\", and djinn would be \"D-DD-DD-\"")
+    parser.add_argument('--bpm',type=int,default=120,help="The BPM of Patapon. Change if you're running the game at a higher speed")
+    args = parser.parse_args()
+
+main()