Ukabilka
Ukabilka, 2026.
With punches · A puñetazos · A cops de puny · A puñadas · À coups de poing · 拳で
Oxidising steel, 40 × 15.5 × 19 cm, with a 12 oz boxing glove inside, mounted on a wooden base.
Ukabilka is a steel piece that translates into form the fourteen rounds, out of the fifteen scheduled, of what many consider the greatest boxing match in history: Ali vs. Frazier III, also known as the “Thrilla in Manila”. The fight took place on 1 October 1975 at the Araneta Coliseum in Quezon City, Philippines, with the WBA, WBC and The Ring world heavyweight titles at stake. Ali won after Joe Frazier’s corner retired him at the end of the fourteenth round.
The piece interprets each round as a space, offering a reading of which boxer took the initiative or connected with a combination of punches. Through its forms, the work allows the viewer to visually follow the tension, rhythm and shifts in dominance that defined the fight.
Its design and construction are based on a mathematical calculation that assigns volumetric values to punches, combinations and occupation of the centre of the ring.
The upper part of each round corresponds to Muhammad Ali, while the lower part corresponds to Joe Frazier.
The piece was created for the charity auction organised by Luva Boxing Club in Pontevedra.
Thank you, Jonás and Rebeca, for giving me the opportunity to be part of this incredible initiative.
The design of this piece is built with a Python script developed specifically for this work, structured in five layers: a data model that describes each action of the fight (its time within the round, its intensity, its type, the boxer it belongs to); the encoding of the bout itself, round by round; a set of geometric translation rules that map each action type and intensity to a precise shape and size; a rendering layer that draws the fourteen rounds as horizontal orange bands, with figures emerging upward for Ali and downward for Frazier; and an entry point that assembles the whole composition.
Code architecture · 3.977 lines of code · 28 functions defined · 4 data classes · 26 control loops · 33 conditional branches
Computation · 146 arithmetic operations · 300 function calls · 913 numeric & string constants · ~650 coordinate calculations at runtime · 114 geometric primitives drawn
Encoded fight · 14 rounds processed · 186 individual actions encoded
Code developed in collaboration with Claude (Anthropic)