Visual Sanity Tests

Visual regression test cases for notation rendering

This page displays notation test cases with their rendered output to help catch visual regressions and document expected rendering behavior. Use the "Copy" button to copy rendered output for updating baseline expectations.

Basic Notation (5)

Simple Notes
basic-notes
Basic swara sequence with octave marker
Input
Sw: S R G M P D N S.
Expected
SRGMPDNS
Rendered
Sw: S R G M P D N S.
Octaves
octaves
Notes across lower, middle, and upper octaves
Input
Sw: .N .D S R G M P D N S. R.
Expected
NDSRGMPDNSR
Rendered
Sw: .N .D S R G M P D N S. R.
Groups
groups
Grouped notes played in same time duration
Input
Sw: S R [G M] P D [N S.]
Expected
SRGMPDNS
Rendered
Sw: S R [G M] P D [N S.]
Durations
durations
Notes with explicit duration modifiers
Input
Sw: S 2 R G 3 M P
Expected
SR,GM,,P
Rendered
Sw: S 2 R G 3 M P
Rests/Spaces
rests
Notes with rests/spaces between them
Input
Sw: S , R , , G , , , M
Expected
S,R,,G,,,M
Rendered
Sw: S , R , , G , , , M

Embellishments (4)

Jaaru (slide)
jaaru
Left embellishment indicating slide from previous note
Input
Sw: ~/ S R G
Expected
SRG
Rendered
Sw: ~/ S R G
Kampitam (oscillation)
kampitam
Top embellishment indicating oscillation
Input
Sw: ~ S ~ R ~ G
Expected
S~R~G~
Rendered
Sw: ~ S ~ R ~ G
Multiple Embellishments
multi-emb
Multiple embellishments on a single note
Input
Sw: ~/ ~ S R
Expected
S~R
Rendered
Sw: ~/ ~ S R
Collision Test
collision
Consecutive notes with embellishments (collision test)
Input
\beatDuration(2) Sw: ~/ S ~/ R ~/ G ~/ M ~/ P ~/ D ~/ N ~/ S. ~/ S. ~/ N ~/ D ~/ P ~/ M ~/ G ~/ R ~/ S Sh: A B C D E F G H I J K L M N O P Q R S T
Expected
SRGMPDNSSNDPMGRSABCDEFGHIJKLMNOPQRST
Rendered
\beatDuration(2) Sw: ~/ S ~/ R ~/ G ~/ M ~/ P ~/ D ~/ N ~/ S. ~/ S. ~/ N ~/ D ~/ P ~/ M ~/ G ~/ R ~/ S Sh: A B C D E F G H I J K L M N O P Q R S T

Layout & Configuration (4)

Two Roles
two-roles
Multi-role notation with swaras and sahitya
Input
Sw: S R G M Sh: sa ri ga ma
Expected
SRGMsarigama
Rendered
Sw: S R G M Sh: sa ri ga ma
Cycle/Beat
cycle-beat
Notation with cycle configuration
Input
\cycle("|4|4|") Sw: S R G M P D N S.
Expected
SRGMPDNS
Rendered
\cycle("|4|4|") Sw: S R G M P D N S.
Nested Groups
nested-groups
Nested groups with depth-based bracket lines above each group container
Input
\beatDuration(4) Sw: S R G M P D N S. A B [ S R [ P D [ W X ] ] ]
Expected
SRGMPDNSABSRPDWX,,,,,
Rendered
\beatDuration(4) Sw: S R G M P D N S. A B [ S R [ P D [ W X ] ] ]
Baseline Alignment
baseline-alignment
Beats with different nesting levels in the same row should have aligned atom baselines
Input
\cycle("|1|") \beatDuration(4) Sw: S R G M [ P D [ N S. ] ] G M P D [ S R ] G M P D N S. [ [ W X ] ]
Expected
SRGMPDNSGMP_DSRGM_PDNS_WX
Rendered
\cycle("|1|") \beatDuration(4) Sw: S R G M [ P D [ N S. ] ] G M P D [ S R ] G M P D N S. [ [ W X ] ]

Markers & Annotations (4)

Label Before
label-before
Pre-marker label appearing before notes in a dedicated column
Input
\@label("V1") S R G M P D N S.
Expected
V1SRGMPDNS
Rendered
\@label("V1") S R G M P D N S.
Label After
label-after
Post-marker label appearing after notes with position=after
Input
S R G M \@label("End", position="after") P D N S.
Expected
SRGMEndPDNS
Rendered
S R G M \@label("End", position="after") P D N S.
Label Multi-Role
label-multi-role
Label marker on one role creates aligned column across all roles
Input
Sw: \@label("V1") S R G M P D N S. Sh: sa ri ga ma pa dha ni sa
Expected
V1SRGMPDNSsarigamapadhanisa
Rendered
Sw: \@label("V1") S R G M P D N S. Sh: sa ri ga ma pa dha ni sa
Multiple Labels
label-multiple
Multiple label markers in sequence
Input
\@label("1.") S R G M P D N S. \@label("2.") S. N D P M G R S
Expected
1.SRGMPDNS2.SNDPMGRS
Rendered
\@label("1.") S R G M P D N S. \@label("2.") S. N D P M G R S