Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: Bug report
about: Report a problem with Twist Your Guts
about: Report a problem with Crypta
title: "[Bug] "
labels: bug
assignees: ''
Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: Feature request
about: Suggest an idea or enhancement for Twist Your Guts
about: Suggest an idea or enhancement for Crypta
title: "[Feature] "
labels: enhancement
assignees: ''
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ jobs:
shell: bash
run: |
set -euo pipefail
ARTEFACT_ROOT="build/TwistYourGuts_artefacts"
ARTEFACT_ROOT="build/Crypta_artefacts"
# JUCE's artefact path may or may not include a Release/ segment
# depending on whether the generator is single- or multi-config.
VST3_PATH=$(find "$ARTEFACT_ROOT" -type d -iname "*.vst3" | head -n 1)
Expand Down Expand Up @@ -143,11 +143,11 @@ jobs:
mkdir -p ~/Library/Audio/Plug-Ins/Components
cp -R "${{ steps.artefacts.outputs.component_path }}" ~/Library/Audio/Plug-Ins/Components/
killall -9 AudioComponentRegistrar || true
auval -strict -v aufx Tygt Yvsv
auval -strict -v aufx Cryp Yvsv

- name: Upload plugin artefacts
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: twist-your-guts-${{ matrix.os }}
path: build/TwistYourGuts_artefacts/**
name: crypta-${{ matrix.os }}
path: build/Crypta_artefacts/**
if-no-files-found: error
540 changes: 121 additions & 419 deletions .github/workflows/release.yml

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Changed

- Renamed plugin from Twist Your Guts to Crypta (new plugin code `Cryp`, new bundle id `com.yvesvogl.crypta`). Old identity: plugin code `Tygt`, bundle id `com.yvesvogl.twistyourguts` — DAWs treat this as a new plugin; v0.1.0-era sessions will need to be re-pointed at the new plugin identity. Part of the suite's move to Basilica Audio naming (the crypt: the basilica's low-end foundation).
- `.github/workflows/release.yml` reconciled with the suite-wide release template: org-level Apple signing secrets (`APPLE_CERT_P12`, `APPLE_CERT_PASSWORD`, `APPLE_API_KEY_P8`, `APPLE_API_KEY_ID`, `APPLE_API_ISSUER_ID`) instead of the prior per-repo secret set, `find`-based artefact discovery, tag-only (`v*`) trigger with no `workflow_dispatch` dry-run path.
- Removed `docs/releasing.md` and `docs/adr/0006-macos-signing-notarization.md`, which documented the prior per-repo signing pipeline; the org-level signing setup is now documented centrally at `.scaffold/SIGNING-SETUP.md`, matching sibling suite repos (none of which carry a per-repo releasing runbook or signing ADR).

## [0.1.0] - 2026-07-14

### Added
Expand Down
12 changes: 8 additions & 4 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
# Twist Your Guts — parallel bass processor (bass)
# Crypta — parallel bass processor (bass)

Per-repo working memory for Claude Code sessions on this plugin. Part of the **Metal up your ass** symphonic-metal plugin suite (`github.com/metal-up-your-ass`).

Formerly named **Twist Your Guts**; renamed to Crypta 2026-07-14 as part of the suite's move toward Basilica Audio naming (the crypt: the basilica's low-end foundation). New identity: `com.yvesvogl.crypta`, plugin code `Cryp` (old: `com.yvesvogl.twistyourguts`, `Tygt` — DAWs treat this as a new plugin).

## What this is
Twist Your Guts is a Parallax-style **parallel bass processor** for metal: it LR4-splits the bass into low/high bands, parallel-compresses the lows, runs the highs through selectable distortion voicings, then sums back through a 4-band EQ and an IR cabinet loader. AU / VST3 / Standalone.
Crypta is a Parallax-style **parallel bass processor** for metal: it LR4-splits the bass into low/high bands, parallel-compresses the lows, runs the highs through selectable distortion voicings, then sums back through a 4-band EQ and an IR cabinet loader. AU / VST3 / Standalone.

## Status (pre-1.0, v0.1.0)
M0 bootstrap and M1 "DSP completion & test coverage" are both done: the full v1.0 signal path is wired and tested (gate, LR4 crossover, parallel low-band compressor, three oversampled high-band voicings, post-sum 4-band EQ, IR loader, latency compensation). Not yet done: preset manager/versioned state (M2), custom GUI/metering/accessibility (M3), signing/notarization/v1.0.0 release (M4). Voicing character (drive-gain ranges, mid-filter hump/scoop settings) is engineering-tuned, not yet ear-tuned against reference material. IR loader has no bundled factory IRs and no GUI file browser yet (DSP engine is fully live; file-loading is a `loadImpulseResponse()` seam a future GUI/preset system will call). See GitHub **milestones/issues** for open work, `README.md` for the feature scope and signal-flow diagram, and `docs/manual.md` for the full parameter reference.
Expand All @@ -19,13 +21,13 @@ M0 bootstrap and M1 "DSP completion & test coverage" are both done: the full v1.
```sh
export CPM_SOURCE_CACHE="$HOME/.cache/CPM"
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug
cmake --build build --target Tests TwistYourGuts_Standalone --parallel 4
cmake --build build --target Tests Crypta_Standalone --parallel 4
ctest --test-dir build --output-on-failure
```
Release/universal + pluginval + auval run in CI.

## Conventions & guardrails
- JUCE 8.0.14 via CPM · C++20 · AGPLv3 · Pamplejuce `SharedCode` · manufacturer `Yvsv`, plugin code `Tygt`, `com.yvesvogl.twistyourguts`.
- JUCE 8.0.14 via CPM · C++20 · AGPLv3 · Pamplejuce `SharedCode` · manufacturer `Yvsv`, plugin code `Cryp`, `com.yvesvogl.crypta`.
- Real-time safety (no alloc/lock/IO/log on the audio thread; allocate in `prepareToPlay`; `reset()` clears state; `ScopedNoDenormals`; smoothed params).
- DryWetMixer gotcha: prime `setWetMixProportion` before `reset()` (see the suite's overture for the pattern).
- `main` protected — feature branch + PR, green CI required, Conventional Commits. New DSP needs tests (flat-sum/null, NaN/Inf, state round-trip).
Expand All @@ -35,3 +37,5 @@ GitHub milestones (M1 DSP & tests · M2 presets/state · M3 GUI & a11y · M4 rel

## Suite context
This is the bass member of the suite; its LR4 crossover is the reference pattern reused by `triptych`. Sibling plugins: overture, tenebrae, nave, silentium, requiem, seraph, aureate, firmament, triptych, apotheosis.

Internal C++ namespace is `cryp` (was `tyg`); processor/editor classes are `CryptaAudioProcessor`/`CryptaAudioProcessorEditor` (were `TwistYourGutsAudioProcessor`/`...Editor`).
30 changes: 15 additions & 15 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0" CACHE STRING "Minimum macOS deployment ta
# here at the top level avoids it being enabled implicitly deeper inside
# JUCE's CMake helpers, which has been observed to break Ninja's generate
# step (missing CMAKE_C_COMPILE_OBJECT rule variable).
project(TwistYourGuts VERSION 0.1.0 LANGUAGES C CXX)
project(Crypta VERSION 0.1.0 LANGUAGES C CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
Expand All @@ -27,7 +27,7 @@ include(cmake/CPM.cmake)
# CPMAddPackage automatically respects the CPM_SOURCE_CACHE environment
# variable if it is set, reusing a shared package cache across builds/checkouts.
if(DEFINED ENV{CPM_SOURCE_CACHE})
message(STATUS "TwistYourGuts: using CPM_SOURCE_CACHE at $ENV{CPM_SOURCE_CACHE}")
message(STATUS "Crypta: using CPM_SOURCE_CACHE at $ENV{CPM_SOURCE_CACHE}")
endif()

CPMAddPackage(
Expand All @@ -41,13 +41,13 @@ CPMAddPackage(
# Plugin target
# ==============================================================================

juce_add_plugin(TwistYourGuts
juce_add_plugin(Crypta
COMPANY_NAME "Yves Vogl"
BUNDLE_ID com.yvesvogl.twistyourguts
BUNDLE_ID com.yvesvogl.crypta
PLUGIN_MANUFACTURER_CODE Yvsv
PLUGIN_CODE Tygt
PLUGIN_CODE Cryp
FORMATS AU VST3 Standalone
PRODUCT_NAME "Twist Your Guts"
PRODUCT_NAME "Crypta"
COPY_PLUGIN_AFTER_BUILD TRUE
IS_SYNTH FALSE
NEEDS_MIDI_INPUT FALSE
Expand All @@ -66,11 +66,11 @@ add_library(SharedCode INTERFACE)

target_compile_features(SharedCode INTERFACE cxx_std_20)

file(GLOB_RECURSE TwistYourGutsSources CONFIGURE_DEPENDS
file(GLOB_RECURSE CryptaSources CONFIGURE_DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/*.h")

target_sources(SharedCode INTERFACE ${TwistYourGutsSources})
target_sources(SharedCode INTERFACE ${CryptaSources})

target_include_directories(SharedCode INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/src")

Expand All @@ -90,7 +90,7 @@ target_link_libraries(SharedCode INTERFACE
juce::juce_recommended_warning_flags
)

target_link_libraries(TwistYourGuts PRIVATE SharedCode)
target_link_libraries(Crypta PRIVATE SharedCode)

# ==============================================================================
# Tests
Expand All @@ -105,11 +105,11 @@ CPMAddPackage(
GIT_TAG v3.15.2
)

file(GLOB_RECURSE TwistYourGutsTestSources CONFIGURE_DEPENDS
file(GLOB_RECURSE CryptaTestSources CONFIGURE_DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/tests/*.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/tests/*.h")

add_executable(Tests ${TwistYourGutsTestSources})
add_executable(Tests ${CryptaTestSources})

target_compile_features(Tests PRIVATE cxx_std_20)

Expand All @@ -118,7 +118,7 @@ target_link_libraries(Tests PRIVATE SharedCode Catch2::Catch2)
# Copy over the plugin target's compile definitions (JucePlugin_* macros etc.)
# so plugin code compiles identically when built as part of the Tests binary.
target_compile_definitions(Tests PRIVATE
$<TARGET_PROPERTY:TwistYourGuts,COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:Crypta,COMPILE_DEFINITIONS>
JUCE_MODAL_LOOPS_PERMITTED=1
)

Expand All @@ -127,9 +127,9 @@ set_target_properties(Tests PROPERTIES XCODE_GENERATE_SCHEME ON)
include(${Catch2_SOURCE_DIR}/extras/Catch.cmake)

if(CMAKE_GENERATOR STREQUAL "Xcode")
set(TwistYourGutsDiscoveryMode PRE_TEST)
set(CryptaDiscoveryMode PRE_TEST)
else()
set(TwistYourGutsDiscoveryMode POST_BUILD)
set(CryptaDiscoveryMode POST_BUILD)
endif()

catch_discover_tests(Tests DISCOVERY_MODE ${TwistYourGutsDiscoveryMode})
catch_discover_tests(Tests DISCOVERY_MODE ${CryptaDiscoveryMode})
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Contributing to Twist Your Guts
# Contributing to Crypta

Thanks for your interest in contributing. This document covers the workflow, testing requirements, and code style expected for changes to this project.

Expand Down Expand Up @@ -34,7 +34,7 @@ test(compressor): add null test for unity-gain bypass

## DSP test requirements

Twist Your Guts is real-time audio software — DSP correctness bugs are expensive to catch late, so tests are not optional for DSP code.
Crypta is real-time audio software — DSP correctness bugs are expensive to catch late, so tests are not optional for DSP code.

**New DSP code without tests does not merge.** At minimum, new or changed DSP components need:

Expand Down
22 changes: 12 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
<p align="center"><img src="docs/assets/icon.png" alt="Twist Your Guts icon" width="160"/></p>
<p align="center"><img src="docs/assets/icon.png" alt="Crypta icon" width="160"/></p>

# Twist Your Guts
# Crypta

*Split your bass. Compress the lows. Twist the guts out of the highs.*

[![CI](https://github.com/yves-vogl/twist-your-guts/actions/workflows/ci.yml/badge.svg)](https://github.com/yves-vogl/twist-your-guts/actions/workflows/ci.yml)
> Formerly **Twist Your Guts**, renamed to Crypta as part of the suite's move to Basilica Audio naming (the crypt: the basilica's low-end foundation). If you have a v0.1.0-era session referencing the old plugin identity (`com.yvesvogl.twistyourguts`, plugin code `Tygt`), see the [Unreleased] entry in [`CHANGELOG.md`](CHANGELOG.md) — the new bundle ID and plugin code (`com.yvesvogl.crypta`, `Cryp`) mean DAWs treat this as a new plugin, so existing sessions will need to be re-pointed at the new plugin.

[![CI](https://github.com/metal-up-your-ass/Crypta/actions/workflows/ci.yml/badge.svg)](https://github.com/metal-up-your-ass/Crypta/actions/workflows/ci.yml)
[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)

> **Work in progress.** Twist Your Guts is pre-1.0 and under active development (v0.1.0). Binaries for macOS and Windows are available from the [Releases](../../releases) page (currently unsigned — see the release notes); building from source works too. Expect breaking changes until v1.0.0 ships (see [Roadmap](#roadmap)).
> **Work in progress.** Crypta is pre-1.0 and under active development (v0.1.0). Binaries for macOS and Windows are available from the [Releases](../../releases) page (macOS builds are signed & notarized); building from source works too. Expect breaking changes until v1.0.0 ships (see [Roadmap](#roadmap)).

## What it is

Twist Your Guts is a Parallax-style bass plugin built on JUCE 8. It splits your bass signal into low and high bands with a linear-phase-adjacent Linkwitz-Riley crossover, compresses the low band in parallel, and runs the high band through a choice of three distortion voicings before summing everything back together through a 4-band EQ and an impulse-response (cab sim) loader. See [`docs/manual.md`](docs/manual.md) for the full parameter reference and usage tips.
Crypta is a Parallax-style bass plugin built on JUCE 8. It splits your bass signal into low and high bands with a linear-phase-adjacent Linkwitz-Riley crossover, compresses the low band in parallel, and runs the high band through a choice of three distortion voicings before summing everything back together through a 4-band EQ and an impulse-response (cab sim) loader. See [`docs/manual.md`](docs/manual.md) for the full parameter reference and usage tips.

## Features

Expand Down Expand Up @@ -115,19 +117,19 @@ ctest --test-dir build --output-on-failure

## License

Twist Your Guts is licensed under the [GNU Affero General Public License v3.0](LICENSE) (AGPLv3).
Crypta is licensed under the [GNU Affero General Public License v3.0](LICENSE) (AGPLv3).

This project uses [JUCE](https://juce.com) 8, whose open-source tier is licensed under AGPLv3 (as of JUCE 8; JUCE 7 and earlier used GPLv3), which is why this project is AGPLv3 rather than GPLv3. See [`docs/adr/0002-agplv3-licensing.md`](docs/adr/0002-agplv3-licensing.md) for the full reasoning.

VST is a registered trademark of Steinberg Media Technologies GmbH.

Twist Your Guts is an independent open-source project. It is not affiliated with, endorsed by, or sponsored by Neural DSP or the makers of any Parallax-branded product; any naming similarity refers only to the general "parallel bass processing" concept, not to any specific commercial product.
Crypta is an independent open-source project. It is not affiliated with, endorsed by, or sponsored by Neural DSP or the makers of any Parallax-branded product; any naming similarity refers only to the general "parallel bass processing" concept, not to any specific commercial product.

## Releases & installation

Tagged releases (`v*`) are built and published automatically by [`.github/workflows/release.yml`](.github/workflows/release.yml):

- **macOS** — AU (`.component`) and VST3 (`.vst3`), Universal Binary (arm64 + x86_64), signed with a Developer ID Application certificate, notarized, and stapled. Installs and opens without a Gatekeeper warning.
- **Windows** — VST3, **unsigned**. On first run, Windows SmartScreen may show a "Windows protected your PC" warning; choose **More info → Run anyway** to proceed. A signed Windows build is a documented future improvement, not yet available.
- **macOS** — AU (`.component`), VST3 (`.vst3`), and Standalone, Universal Binary (arm64 + x86_64), signed with a Developer ID Application certificate (org-level secrets, shared across the Basilica Audio suite), notarized, and stapled. Installs and opens without a Gatekeeper warning.
- **Windows** — VST3 and Standalone, **unsigned**. On first run, Windows SmartScreen may show a "Windows protected your PC" warning; choose **More info → Run anyway** to proceed. A signed Windows build is a documented future improvement, not yet available.

See [`docs/releasing.md`](docs/releasing.md) for the full release runbook and [ADR 0006](docs/adr/0006-macos-signing-notarization.md) for the signing/notarization design rationale. This pipeline is dormant until the first `v*` tag is pushed with the required signing secrets configured — no releases have been published yet (see the work-in-progress notice above).
See [`v0.1.0`](https://github.com/metal-up-your-ass/Crypta/releases/tag/v0.1.0) for the most recent published release (under the plugin's prior identity as Twist Your Guts); the next tagged release under the Crypta identity is planned as `v0.2.0`.
2 changes: 1 addition & 1 deletion docs/adr/0001-use-juce8-framework.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

## Context and Problem Statement

Twist Your Guts needs a cross-platform audio plugin framework that can target AU and VST3 on macOS and VST3 on Windows, ship a Standalone build, and support a modern C++ toolchain. Which framework should the project build on?
Crypta needs a cross-platform audio plugin framework that can target AU and VST3 on macOS and VST3 on Windows, ship a Standalone build, and support a modern C++ toolchain. Which framework should the project build on?

## Decision Drivers

Expand Down
2 changes: 1 addition & 1 deletion docs/adr/0002-agplv3-licensing.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

## Context and Problem Statement

The intent for Twist Your Guts is to be copyleft open source software — modifications and derivatives should stay open, in the spirit of the GPL family. JUCE 8 was chosen as the plugin framework (ADR 0001), and JUCE's own licensing constrains what license this project can practically use in its open-source configuration. What license should the project ship under?
The intent for Crypta is to be copyleft open source software — modifications and derivatives should stay open, in the spirit of the GPL family. JUCE 8 was chosen as the plugin framework (ADR 0001), and JUCE's own licensing constrains what license this project can practically use in its open-source configuration. What license should the project ship under?

## Decision Drivers

Expand Down
Loading