Graphic score
inspired by Cornelius Cardew, Treatise1
A graphic score strung along one line: a bisected circle, a triangle, a staff bending upward and one filled note.
Made with Claude Opus 5.5
Colours
- #1C1B1Abackground
- #DAD8CEforeground
- #CF6A4Caccent
Export
FormatThis browser can’t make WebP files.
Shapecropped from 16:9
Crop
SizeThis browser can’t draw a file that large.
Notes
Cornelius Cardew made Treatise between 1963 and 1967: 193 pages of lines, symbols and geometric shapes, with no instructions for the players. Through most of its pages runs a nearly unbroken line that Cardew called “the lifeline of the reader”. This page hangs its shapes on that line.
Sources
- Cornelius Cardew, Treatise, 1967. ↑
- Hannah Edgar, The Infinite Readings of Cornelius Cardew’s Treatise, 2023.
Source code
wallpapers/treatise/design.py, 70 lines
"""A graphic score after Cardew's Treatise in thin line work: shapes hung on one lifeline, one note filled in."""
from walldye import ACCENT, ACCENT_3, UI_ALT, UI_HI, Canvas, P, Vec, design, mix, polar
from walldye.geom import Affine
Y = 640 # the lifeline
NOTE = Vec(1390, Y)
CIRCLE, CR = Vec(690, Y), 118
HAIR, THIN, HEAVY = 1.0, 1.5, 3.5
INK = UI_HI
SOFT = mix(UI_ALT, UI_HI, 0.4)
@design()
def draw(s: Canvas) -> None:
# One builder per paint and weight: hairlines, thin and heavy strokes, solid marks.
hair, thin, heavy, solid = P(), P(), P(), P()
# Staff fragment above the line, tilted 4 degrees, with open noteheads, one solid note and a
# link down to the circle.
x0, x1, top, gap = 250, 520, 500, 10
tilt = Affine.rotate(deg=-4, about=(x0, top))
for k in range(5):
hair.M(tilt((x0, top + k * gap))).L(tilt((x1, top + k * gap)))
for hx, step in ((300, 1), (365, 3), (430, 2)):
thin.circle(tilt((hx, top + step * gap)), 6.5)
thin.M(tilt((x0, top - 3))).L(tilt((x0, top + 4 * gap + 3)))
thin.M(tilt((x1, top + 4 * gap))).L(CIRCLE.x - CR, Y)
solid.circle(tilt((400, top + 4 * gap)), 6.5)
# Large circle bisected by the lifeline, with a smaller disc resting on its rim.
thin.circle(CIRCLE, CR)
heavy.M(CIRCLE.x - CR, Y).L(CIRCLE.x + CR, Y)
rest = polar(CIRCLE, CR + 14, deg=-58)
# Dense band of parallel hairlines, leaning 28 degrees off vertical, hung from a short bar.
bx, n, pitch = 860, 34, 5
for k in range(n):
foot = Vec(bx + k * pitch, Y + 14)
hair.M(foot).L(polar(foot, 190, deg=90 - 28))
solid.rect(bx - 1, Y + 10, (n - 1) * pitch + 2, 4)
# Triangle standing on the line, its right edge doubled in weight.
tx, tw, th = 1120, 120, 150
tri = [Vec(tx, Y), Vec(tx + tw, Y), Vec(tx + tw * 0.62, Y - th)]
thin.poly(tri, closed=True)
heavy.M(tri[1]).L(tri[2])
# Dotted trajectory thrown from the apex onto the note.
trail = P().M(tri[2] + (26, -6)).A(230, 230, 0, 0, 1, NOTE.x, Y - 46)
# A staff grows out of the line after the note and bends up into concentric quarter arcs.
fx, run, R, gap = 1500, 80, 190, 10
for k in range(1, 6):
y, r = Y - k * gap, R - k * gap
hair.M(fx, y).L(fx + run, y).A(r, r, 0, 0, 0, fx + run + r, Y - R)
thin.M(fx, Y - 5 * gap - 4).L(fx, Y)
thin.M(fx + run + R - 5 * gap - 6, Y - R).L(fx + run + R - gap + 6, Y - R)
for r in (5, 13, 24):
hair.circle((1660, Y + 74), r)
s.stroke(P().M(0, Y).L(s.w, Y), INK, 2)
s.stroke(hair, SOFT, HAIR)
s.stroke(thin, INK, THIN)
s.stroke(heavy, INK, HEAVY)
s.fill(solid, INK)
s.fill(P().circle(rest, 14), UI_ALT)
s.stroke(trail, SOFT, 3, cap="round", dash=(0, 11))
s.stroke(P().circle(NOTE, 34), ACCENT_3, 1.5)
s.fill(P().circle(NOTE, 22), ACCENT)"""A graphic score after Cardew's Treatise in thin line work: shapes hung on one lifeline, one note filled in."""
from walldye import ACCENT, ACCENT_3, UI_ALT, UI_HI, Canvas, P, Vec, design, mix, polar
from walldye.geom import Affine
Y = 640 # the lifeline
NOTE = Vec(1390, Y)
CIRCLE, CR = Vec(690, Y), 118
HAIR, THIN, HEAVY = 1.0, 1.5, 3.5
INK = UI_HI
SOFT = mix(UI_ALT, UI_HI, 0.4)
@design()
def draw(s: Canvas) -> None:
# One builder per paint and weight: hairlines, thin and heavy strokes, solid marks.
hair, thin, heavy, solid = P(), P(), P(), P()
# Staff fragment above the line, tilted 4 degrees, with open noteheads, one solid note and a
# link down to the circle.
x0, x1, top, gap = 250, 520, 500, 10
tilt = Affine.rotate(deg=-4, about=(x0, top))
for k in range(5):
hair.M(tilt((x0, top + k * gap))).L(tilt((x1, top + k * gap)))
for hx, step in ((300, 1), (365, 3), (430, 2)):
thin.circle(tilt((hx, top + step * gap)), 6.5)
thin.M(tilt((x0, top - 3))).L(tilt((x0, top + 4 * gap + 3)))
thin.M(tilt((x1, top + 4 * gap))).L(CIRCLE.x - CR, Y)
solid.circle(tilt((400, top + 4 * gap)), 6.5)
# Large circle bisected by the lifeline, with a smaller disc resting on its rim.
thin.circle(CIRCLE, CR)
heavy.M(CIRCLE.x - CR, Y).L(CIRCLE.x + CR, Y)
rest = polar(CIRCLE, CR + 14, deg=-58)
# Dense band of parallel hairlines, leaning 28 degrees off vertical, hung from a short bar.
bx, n, pitch = 860, 34, 5
for k in range(n):
foot = Vec(bx + k * pitch, Y + 14)
hair.M(foot).L(polar(foot, 190, deg=90 - 28))
solid.rect(bx - 1, Y + 10, (n - 1) * pitch + 2, 4)
# Triangle standing on the line, its right edge doubled in weight.
tx, tw, th = 1120, 120, 150
tri = [Vec(tx, Y), Vec(tx + tw, Y), Vec(tx + tw * 0.62, Y - th)]
thin.poly(tri, closed=True)
heavy.M(tri[1]).L(tri[2])
# Dotted trajectory thrown from the apex onto the note.
trail = P().M(tri[2] + (26, -6)).A(230, 230, 0, 0, 1, NOTE.x, Y - 46)
# A staff grows out of the line after the note and bends up into concentric quarter arcs.
fx, run, R, gap = 1500, 80, 190, 10
for k in range(1, 6):
y, r = Y - k * gap, R - k * gap
hair.M(fx, y).L(fx + run, y).A(r, r, 0, 0, 0, fx + run + r, Y - R)
thin.M(fx, Y - 5 * gap - 4).L(fx, Y)
thin.M(fx + run + R - 5 * gap - 6, Y - R).L(fx + run + R - gap + 6, Y - R)
for r in (5, 13, 24):
hair.circle((1660, Y + 74), r)
s.stroke(P().M(0, Y).L(s.w, Y), INK, 2)
s.stroke(hair, SOFT, HAIR)
s.stroke(thin, INK, THIN)
s.stroke(heavy, INK, HEAVY)
s.fill(solid, INK)
s.fill(P().circle(rest, 14), UI_ALT)
s.stroke(trail, SOFT, 3, cap="round", dash=(0, 11))
s.stroke(P().circle(NOTE, 34), ACCENT_3, 1.5)
s.fill(P().circle(NOTE, 22), ACCENT)
Run it yourself
$ git clone https://github.com/nickolaj-jepsen/walldye && cd walldye$ uv run walldye render treatise --theme fireproof -o treatise-fireproof-16x9.svg