Letter Collage API

The Letter Collage system creates stylized text with per-letter customization. Each letter becomes a separate Paper.js item that can be individually styled, animated, or positioned.

Overview

Letter Collage transforms plain text into visually stunning designs by applying different styles to each character. This is perfect for:

  • Word game graphics (Wordle, Scrabble)
  • Ransom note / magazine cutout effects
  • Paper craft and origami aesthetics
  • Gradient text designs
  • Creative typography

Available Styles

Style Description Best For
tile Wordle/Scrabble style with colored backgrounds Word games, educational content
magazine Mixed fonts/colors like magazine cutouts Ransom notes, collage art
paperCut Letters with shadow/depth like cut paper Craft aesthetics, 3D effect
fold Origami-style folded letters Paper crafts, dimensional text
gradient Each letter with gradient fill Modern, vibrant text
image Letters filled with image texture Photo effects, creative masking

Basic Usage

// Access via app.letterCollage
const collage = app.letterCollage.create('HELLO', {
  style: 'tile',
  palette: 'wordle',
  fontSize: 48
});

// Returns { group, letters, collageId }
// - group: Paper.js Group containing all letters
// - letters: Array of individual letter groups
// - collageId: Unique identifier for this collage

API Reference

create(text, options)

Create a letter collage from text.

Parameters:

Parameter Type Default Description
text string required The text to stylize
options.style string 'tile' Style type (see Available Styles)
options.palette string 'wordle' Color palette name
options.fontSize number 48 Base font size in pixels
options.fontFamily string 'Inter, sans-serif' Font family
options.fontWeight string 'bold' Font weight
options.spacing number 1.1 Letter spacing multiplier
options.x number center X position
options.y number center Y position
options.cornerRadius number 4 Corner radius for tile backgrounds
options.showBorder boolean true Show border on tiles
options.shadowEnabled boolean true Enable drop shadows

Returns: { group, letters, collageId }

Style-Specific Options

Tile Style

app.letterCollage.create('WORD', {
  style: 'tile',
  palette: 'wordle',      // Color palette
  cornerRadius: 6,        // Tile corner radius
  showBorder: true,       // Show tile border
  shadowEnabled: true     // Add drop shadow
});

Magazine Style

app.letterCollage.create('RANSOM', {
  style: 'magazine',
  palette: 'magazine',
  magazinePreset: 'classic'  // 'classic', 'bold', 'vintage'
});

Paper Cut Style

app.letterCollage.create('CUT', {
  style: 'paperCut',
  paperCutPreset: 'classic'  // 'classic', 'rough', 'clean'
});

Fold Style

app.letterCollage.create('FOLD', {
  style: 'fold',
  palette: 'origami',
  foldPreset: 'simple'  // 'simple', 'complex'
});

Gradient Style

app.letterCollage.create('GRADIENT', {
  style: 'gradient',
  gradientPalette: 'sunset',
  gradientDirection: 'vertical'  // 'vertical', 'horizontal', 'diagonal', 'radial'
});

Image Style

app.letterCollage.create('IMAGE', {
  style: 'image',
  imageSource: 'https://example.com/texture.jpg'  // URL or data URL
});

Available Palettes

Tile Palettes (for tile, magazine, fold styles)

Category Palettes
Game wordle, scrabble
Vibrant candy, neon, rainbow
Soft pastel, cotton
Natural earth, ocean, forest, sunset
Professional corporate, minimal, slate
Seasonal christmas, halloween, spring
Magazine magazine, newspaper, vintage
Paper Craft paperCraft, origami, craftPaper

Gradient Palettes (for gradient style)

Category Palettes
Warm rainbow, sunset, fire, gold, rose
Cool ocean, oceanDeep, ice, forest, midnight
Vibrant cyberpunk, neonGlow, purplePink, chrome

Utility Methods

getCollage(collageId)

Get a collage by its ID.

const collage = app.letterCollage.getCollage('collage_1');

updateCollage(collageId, newOptions)

Update an existing collage with new options.

app.letterCollage.updateCollage('collage_1', {
  palette: 'neon',
  fontSize: 64
});

removeCollage(collageId)

Remove a collage from the canvas.

app.letterCollage.removeCollage('collage_1');

animateCollage(collageId, animationType, options)

Apply animation to all letters with staggered timing.

app.letterCollage.animateCollage('collage_1', 'pulse', {
  staggerDelay: 0.1,     // Delay between letters
  animationSpeed: 1
});

getAvailableStyles()

Get list of available styles.

const styles = app.letterCollage.getAvailableStyles();
// ['tile', 'magazine', 'paperCut', 'fold', 'gradient', 'image']

getAvailablePalettes()

Get available palettes organized by category.

const palettes = app.letterCollage.getAvailablePalettes();

getAvailableGradients()

Get available gradient palette names.

const gradients = app.letterCollage.getAvailableGradients();
// ['rainbow', 'sunset', 'ocean', 'fire', 'cyberpunk', ...]

clearAll()

Remove all collages.

app.letterCollage.clearAll();

Examples

Wordle-Style Word

const wordle = app.letterCollage.create('HELLO', {
  style: 'tile',
  palette: 'wordle',
  fontSize: 64,
  cornerRadius: 4
});

Magazine Ransom Note

const ransom = app.letterCollage.create('RANSOM NOTE', {
  style: 'magazine',
  palette: 'magazine',
  fontSize: 48
});

Animated Gradient Text

const gradient = app.letterCollage.create('SHINE', {
  style: 'gradient',
  gradientPalette: 'gold',
  gradientDirection: 'diagonal',
  fontSize: 72
});

// Add staggered pulse animation
app.letterCollage.animateCollage(gradient.collageId, 'pulse', {
  staggerDelay: 0.15
});

Paper Craft Effect

const paperCut = app.letterCollage.create('CRAFT', {
  style: 'paperCut',
  fontSize: 56
});

Origami Fold

const origami = app.letterCollage.create('FOLD', {
  style: 'fold',
  palette: 'origami',
  fontSize: 60
});

Working with Individual Letters

Each letter in a collage is a separate Paper.js Group that can be manipulated individually:

const collage = app.letterCollage.create('WORD', { style: 'tile' });

// Access individual letters
collage.letters.forEach((letterGroup, index) => {
  console.log(`Letter ${index}: ${letterGroup.data.char}`);

  // Modify individual letter
  letterGroup.rotate(5);
  letterGroup.scale(1.1);
});

// Select the entire collage group
app.select(collage.group);

Selection and Manipulation

Letter collages are registered with the ItemRegistry and can be selected, moved, and deleted like any other canvas item:

// Create collage
const collage = app.letterCollage.create('TEXT', { style: 'tile' });

// Select the collage group
app.select(collage.group);

// Modify using standard modify API
app.modify({
  x: 500,
  y: 300,
  rotation: 15
});

// Delete
app.removeSelectedItems();

Serialization

Letter collages are automatically serialized with the scene and will be restored when loading saved scenes.