Like most of you, when I'm rebuilding a sampled kick in Serum 2, I end up drawing the pitch contour into an LFO by eye and ear, nudging points until it sits right against the sample. It works, but it's slow and never quite exact. I'm thinking of scripting it instead. Feed in the kick WAV, extract the pitch contour, reduce it to a handful of LFO breakpoints, and write them straight into a Serum 2 preset along with the LFO time, mod depth and root note. The preset side is more feasible than I expected. Serum 2's .SerumPreset is a Zstd-compressed CBOR document inside an "XferJson" wrapper, and it's been reverse-engineered: - serum-preset-packager by Kenneth Wussmann unpacks presets to JSON and repacks them: https://github.com/KennethWussmann/serum-preset-packager - PySerum is a Python DSL built on top of it for generating presets, including mod routings: https://github.com/ThatMajd/PySerum - serum2-preset-loader converts presets into state blobs for DawDreamer, so you can render them to audio without opening Serum. That's handy for automatically comparing the result against the original sample: https://pypi.org/project/serum2-preset-loader/ The plan would be template-based. Build the kick patch once with the routing, unpack it to JSON, and have the script write the analysed LFO points, mod depth, LFO rate and tuning into it. The format is unofficial, so a Serum update could break it. Before I put time into it, would anyone here actually use this? One more thought: Owen, I believe you know the Serum 2 developers personally? If people here think the idea has legs, would you be up for running it past them? Even a quick view on whether something like "extract pitch envelope from sample" could ever be native, or whether they'd be open to the preset or LFO shape format being documented, would save a lot of reverse-engineering guesswork.