summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-16 22:38:57 +0100
committerskal <pascal.massimino@gmail.com>2026-02-16 22:38:57 +0100
commit55a3408fa083b10fec5b39bd733f5148a7a63bb8 (patch)
tree2f7049d199e55830c1d1b595e1b0c085aa9da08d
parentc791e709bb4fc20a5d8937023ac1bf4f808b8f1b (diff)
fix: add sequence index to generated class names
Prevents compilation errors when multiple sequences share the same name. Compiler now appends _{index}_Sequence for unique class names. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
-rwxr-xr-xtools/seq_compiler.py15
-rw-r--r--workspaces/main/timeline.seq8
-rw-r--r--workspaces/test/timeline.seq4
3 files changed, 16 insertions, 11 deletions
diff --git a/tools/seq_compiler.py b/tools/seq_compiler.py
index 361aa63..f3a7f16 100755
--- a/tools/seq_compiler.py
+++ b/tools/seq_compiler.py
@@ -363,13 +363,13 @@ def detect_ping_pong(seq: SequenceDecl, sorted_effects: List[EffectDecl]) -> Dic
return aliases
def generate_cpp(seq: SequenceDecl, sorted_effects: List[EffectDecl],
- aliases: Dict[str, str], flatten: bool = False) -> str:
+ aliases: Dict[str, str], seq_index: int, flatten: bool = False) -> str:
"""Generate C++ Sequence subclass."""
class_name = seq.name.replace(' ', '_').replace('-', '_')
if not class_name[0].isalpha():
class_name = 'Seq_' + class_name
- class_name += 'Sequence'
+ class_name += f'_{seq_index}_Sequence'
# Generate includes
includes = set()
@@ -465,7 +465,7 @@ def main():
'''
- for seq in sequences:
+ for seq_idx, seq in enumerate(sequences):
# Validate DAG
validate_dag(seq)
@@ -479,7 +479,7 @@ def main():
aliases = detect_ping_pong(seq, sorted_effects)
# Generate C++
- cpp = generate_cpp(seq, sorted_effects, aliases, args.flatten)
+ cpp = generate_cpp(seq, sorted_effects, aliases, seq_idx, args.flatten)
all_cpp += cpp + '\n'
# Generate sequence registry and accessors
@@ -504,8 +504,11 @@ void InitializeSequences(const GpuContext& ctx, int width, int height) {
'''
# Instantiate each sequence
- for seq in sequences:
- class_name = f"{seq.name}Sequence"
+ for seq_idx, seq in enumerate(sequences):
+ seq_name = seq.name.replace(' ', '_').replace('-', '_')
+ if not seq_name[0].isalpha():
+ seq_name = 'Seq_' + seq_name
+ class_name = f"{seq_name}_{seq_idx}_Sequence"
all_cpp += f' g_sequences.push_back({{{seq.start_time}f, {seq.priority}, std::make_unique<{class_name}>(ctx, width, height)}});\n'
all_cpp += '''
diff --git a/workspaces/main/timeline.seq b/workspaces/main/timeline.seq
index 0f40485..77f013d 100644
--- a/workspaces/main/timeline.seq
+++ b/workspaces/main/timeline.seq
@@ -2,14 +2,12 @@
# BPM 90
SEQUENCE 0.00 0 "intro"
- # FlashCube (placeholder) -> Vignette -> sink
- EFFECT + Placeholder source -> temp1 0.00 4.00
- EFFECT + Placeholder temp1 -> sink 0.00 4.00
+ EFFECT + RotatingCube source -> temp1 0.00 4.00
+ EFFECT + GaussianBlur temp1 -> sink 0.00 4.00
SEQUENCE 4.00 0 "rotating_cube"
- # RotatingCube -> Blur -> sink
EFFECT + RotatingCube source -> temp1 0.00 4.00
- EFFECT + GaussianBlur temp1 -> sink 1.00 4.00
+ EFFECT + Placeholder temp1 -> sink 1.00 4.00
SEQUENCE 8.00 0 "flash_cube"
# FlashCube (placeholder) -> Flash (placeholder) -> sink
diff --git a/workspaces/test/timeline.seq b/workspaces/test/timeline.seq
index d4b0004..6932d89 100644
--- a/workspaces/test/timeline.seq
+++ b/workspaces/test/timeline.seq
@@ -3,5 +3,9 @@
# BPM 120 (set in test_demo.track)
SEQUENCE 0.0 0 "MainLoop"
+EFFECT + RotatingCube source -> temp1 0.00 4.00
+EFFECT + GaussianBlur temp1 -> sink 0.00 4.00
+
+SEQUENCE 4.0 0 "MainLoop"
EFFECT + Flash source -> flash_out 0.0 16.0
EFFECT + PeakMeter flash_out -> sink 0.0 16.0