Changelog

Version 0.5.0-beta

Measurement & Units

  • Rulers — Top and left ruler bars with unit-aware tick marks, auto-adapts to zoom level
  • Unit grid — Major/minor gridlines aligned to the active unit (mm, cm, in, etc.)
  • Snap to grid — Items snap to grid lines while dragging; hold Shift for major-tick snapping
  • Dimension readout — Live width × height display in the active unit when items are selected
  • Alignment guides — Smart snap guides when positioning items near each other
  • Unit picker — Switch between px, mm, cm, m, in, ft. Canvas presets show dimensions in the active unit (e.g. A4 as “210 × 297 mm”)

New Export Formats

  • glTF/GLB — Export 3D primitives as glTF 2.0 binary files. Import directly into Blender, Three.js, or any glTF viewer
  • BVH — Export rigged skeleton poses as Biovision Hierarchy motion capture files. Import into Blender, Maya, or Cascadeur
  • PNG Sequence — Export animations as numbered PNG frames in a ZIP file. Import into DaVinci Resolve, Blender VSE, or After Effects
  • Lottie — Improved round-trip fidelity. Procedural animations auto-baked to native Lottie keyframes

Languages

  • 7 new languages — Sindhi, Swahili, Hausa, Yoruba, Amharic, isiZulu, Igbo
  • PinePaper now supports 59 languages across Latin, Arabic, Devanagari, Ge’ez, CJK, and more

Animation

  • popOut exit animation — mirrors popIn for symmetrical entrance/exit pairs
  • lightSpeedOutLeft exit animation — mirrors lightSpeedOutRight
  • prefers-reduced-motion — Automatically respects your OS accessibility setting. Suppresses shake, wobble, bounce, and jelly animations when reduced motion is enabled. Override with app.setRespectReducedMotion(false) if needed
  • Letter collage morph — XOXO → MOMO style transitions now show particle dissolution effect instead of plain opacity fade

Storage

  • Images persist across sessions — Uploaded images are now saved to IndexedDB and recovered on page reload. No more losing images when you close the browser

SVG Import

  • Metadata preservation — Imported SVGs retain their original viewBox, id, width, and height attributes. Source markup cached for small SVGs (< 64KB)

Bug Fixes

  • Generator preserve mode now stacks correctly (new generator draws on top of existing content)
  • Simulation re-generate no longer conflicts with the previous simulation
  • Tooltip hover areas scoped to the info icon, not the entire row
  • Magic button no longer repeats the same generator on consecutive clicks

Version 0.4.3-beta

New Features

  • Vertex Deformation Presets (js/core/DeformPresets.js) — 13 parametric deformation presets that manipulate actual path geometry (segment points + bezier handles) per frame. Presets: fold, squeeze, squash, pinch, bulge, twist, ripple, wave, breathe, melt, shear, inflate, wobble. 8 phase drivers: sin, blink, pingpong, once, elastic, heartbeat, stepped, linear. API: applyDeform(), removeDeform(), triggerDeform(). Transform approximation for non-path items (PointText, Raster).

  • Animation Presets Library — Expanded from ~50 to ~100 keyframe preset functions with entrance, exit, and attention seeker effects. New categories: attention seekers (tada, headShake, heartBeat, flash, shakeX/Y, jello), bouncing/zooming/rotating/flipping/back/sliding entrances and exits with directional variants, specials (lightSpeedIn, rollIn/Out).

  • Context-Aware MagicSystem — Magic clicks now inspect canvas item types and apply type-appropriate treatments: GPU filters and cutout styles for images, letter collage and mask reveals for text, particle effects and blend modes for shapes. 6 mood-mapped treatment pools. Multi-text sequence detection auto-connects items with diagram arrows.

  • MCP Deformation Toolspinepaper_apply_deform, pinepaper_remove_deform, pinepaper_trigger_deform for vertex-level geometric animation.


Version 0.4.x

New Features

  • 3D Projection Library — Standalone zero-dependency 3D rendering (~18KB min) with 5 projection types, 5 primitives, GPU acceleration (WebGPU/WebGL2/CPU), and orbital camera

    • PinePaper API: createObject3D(), setProjection3D(), setCamera3D(), createGlossySphere()
    • Standalone usage via barrel export js/3d/index.js
    • Render pipeline: Transform → Cull → Shade → Project → Sort
    • GPU auto-fallback with 150-face threshold
  • Layer Visibility Panel — Manage 4 canvas layers (Text & Shapes, Background, Drawings, Images) with visibility toggle, lock toggle, and item counts

  • Map Draggability — Map groups are draggable with post-drag click suppression to prevent phantom selections

  • Connector Undo/Redo — Diagram connectors persist through undo/redo operations via exportConnectorData()/importConnectorData()

  • Gesture System — Three-finger pan for touch devices, trackpad horizontal scroll panning, separated pinch-zoom from pan gestures

Fixes

  • Blend mode rendering corruption from zero-size items (auto-reset to normal)
  • Console spam from cursor updates during animation
  • Canvas drawImage errors suppressed with automatic recovery

Version 0.4

New Features

  • Character Rigging System - Skeletal animation with bones, FK propagation, and FABRIK IK solver

    • Pose save/load/interpolation with keyframe integration
    • Character rig presets: humanoid, quadruped, spider, simple_arm, snake, chain
    • Visual bone overlay with interactive FK/IK manipulation
    • New relations: bone_attached, ik_target
  • Blending System - Per-item and per-group compositing with 7 presets (ghost, neon, shadow, glow, xray, dreamy, vintage)

    • Blend mode transitions with opacity cross-fade
    • Interactive blend modes (hover/click cycling)
    • New relations: blend_reacts_to, blend_transition
  • Trim Paths - Animatable trimStart/trimEnd/trimOffset for stroke “line draw” effects

  • Cursive Font System - Single-stroke handwriting renderer with 78 glyphs (a-z, A-Z, 0-9, punctuation), Catmull-Rom interpolation, and runtime glyph management

  • Mermaid Import/Export - Bidirectional Mermaid syntax interop with zero-dependency parser

    • Flowchart import/export with shape and edge style mapping
    • State diagram support with stereotypes and nested states
    • Chained edges, subgraphs, and label parsing
  • New Procedural Relations - driven_by (property linking), wiggle (procedural noise), time_expression (math expressions with sin, cos, clamp, lerp, etc.)

  • Masking Enhancements - Mask modes (clip/subtract/intersect), mask stacking, vertex animation, applyCustomMask API

  • Precomps / Nested Compositions - Local timeline groups with independent looping and global keyframes

  • Internationalization - Full UI localization for 14 languages including CJK, Arabic, Hindi, and European languages

  • Infinite Canvas - Unbounded canvas mode (app.setCanvasSize('unbounded')) with no fixed boundaries and free dragging

  • Drawing Tools - 6 professional tools: pen, ink brush, marker, spray can, eraser, and fill bucket with custom SVG cursors

    • Fill tool with 3-stage detection: stroke detection, path containment, canvas background fill
  • Export Selection SVG - Right-click context menu option to export only selected items as SVG

  • Camera Animation - Keyframe-based camera zoom and pan via camera_animates relation

Improvements

  • Timeline continues playing when panel is closed (hide no longer pauses)
  • Unbounded canvas mode skips item drag boundary constraints
  • Cursor management centralized with per-tool SVG cursors and CSS fallbacks
  • Drawing mode properly isolates mask/crop interaction handlers

Keyframe Animation Improvements

  • Per-property easing overrides (propertyEasings per keyframe)
  • Custom cubic bezier easing curves ([x1, y1, x2, y2] arrays)
  • Spatial motion paths via spatialHandles for curved position interpolation
  • Path morphing via segments keyframes
  • Gradient animation (interpolate gradient stops, origin, destination)
  • Bone pose keyframes for timeline-driven skeletal animation
  • Relation param keyframes (paramKeyframes for animating relation parameters)
  • New animatable properties: strokeWidth, shadowBlur, shadowOffsetX, shadowOffsetY

API Additions

// Mermaid Import/Export
app.importMermaid(mermaidText, { autoLayout: true, clearExisting: false });
app.exportMermaid({ direction: 'LR', format: 'stateDiagram' });

// Rigging
app.riggingSystem.createSkeleton(name, position);
app.riggingSystem.addBone(skeletonId, options);
app.riggingSystem.attachItem(skeletonId, boneId, itemId, options);
app.riggingSystem.createIKChain(skeletonId, options);
app.riggingSystem.savePose(skeletonId, name);
app.riggingSystem.interpolatePoses(poseA, poseB, t);

// Blending
app.blendingSystem.applyPreset(itemId, 'neon');
app.blendingSystem.transitionBlendMode(itemId, 'multiply', options);

// Precomps
app.createPrecomp([item1, item2], { duration: 2, loop: true });

// Cursive Text
app.createCursiveText('Hello', { animate: true, duration: 3 });

// Masking
app.maskingSystem.applyCustomMask(item, 'star', keyframes, options);
app.maskingSystem.addMask(masked, 'star', { maskMode: 'subtract' });

// View controls
app.zoomIn();
app.zoomOut();
app.resetZoom();
app.panBy(dx, dy);
app.panTo(x, y);
app.getViewCenter();
app.getZoomLevel();
app.fitContentInView();
app.enablePanMode();
app.disablePanMode();
app.togglePanMode();
app.isPanModeActive();

// Drawing tools
app.setDrawColor(color);
app.getDrawColor();
app.setDrawWidth(width);
app.getDrawWidth();
app.clearDrawings();

// Export
app.exportSelectionSVG({ download: true, filename: 'selection.svg' });
app.exportSVGWithCSS();
app.exportWithFormat(format, options);

// Canvas
app.setCanvasSize('unbounded');
app.clearCanvas();

// Selection & items
app.getSelectedItems();
app.getAllItems();
app.bringToFront();
app.sendToBack();
app.moveUp();
app.moveDown();
app.nudgeSelection(dx, dy);

Version 0.3

New Features

  • Agent Mode - Streamlined workflow for AI agents accessing PinePaper

    • window.PinePaperAgent global API
    • URL parameter activation (?agent=1)
    • Smart export format recommendations
    • Platform-specific export presets (16 platforms)
    • Batch workflow support with reset()
    • Browser capability detection
  • Performance Optimizations

    • keyframeItems Set for O(1) keyframe lookup
    • animatedItems Set for efficient animation iteration
    • Cached canvas center for pattern rotation
    • Viewport culling for off-screen items
    • Adaptive frame skipping for low-FPS recovery
    • Frame metrics API (app.getFrameMetrics())
  • Interactive Components Foundation

    • Trigger system for click/hover/drag events
    • Built-in actions (navigate, show/hide, animate, setState)
    • Quiz presets (multiple choice, drag-and-drop)
    • LMS integration events (SCORM/xAPI ready)
  • Collaboration System Foundation

    • Real-time sync architecture
    • Presence API (cursors, selections)
    • RTD adapter interface for custom backends
    • Shared state management

API Additions

// Agent Mode
const agent = window.PinePaperAgent;
await agent.configure({ mode: 'agent' });
await agent.waitForReady();
agent.reset({ canvas: 'instagram-post' });
const rec = agent.getExportRecommendation();
const result = await agent.quickExport({ platform: 'tiktok' });
const caps = agent.getCapabilities();
const presets = agent.getPresets();

// Performance Metrics
const metrics = app.getFrameMetrics();
app.resetFrameMetrics();
app.setFrameSkipConfig({ enabled: true, fpsThreshold: 24 });

Platform Export Presets

Platform Format Dimensions
instagram-post mp4 1080x1080
instagram-story mp4 1080x1920
instagram-reel mp4 1080x1920
tiktok mp4 1080x1920
youtube-thumbnail png 1280x720
youtube-short mp4 1080x1920
twitter gif 800x450
twitter-video mp4 1280x720
linkedin mp4 1200x627
facebook mp4 1200x630
discord gif 400x400
slack gif 400x300
print-a4 pdf 300 DPI
print-letter pdf 300 DPI
web svg animated

Version 0.2

Features

  • Scene Manager - Multi-scene presentations with transitions
  • Decorative Registry - Track non-interactive background elements
  • Image Tools Manager - Multi-image library with cropping and masking
  • Filter System - Scene-wide visual effects
  • Relation System - Behavior-driven animations
  • Worker Pool - Offload heavy computations

Improvements

  • Multi-image upload support
  • Image library with thumbnails
  • Docsify-based documentation
  • Enhanced keyframe animation system
  • Better canvas resize handling

API Additions

// Image Tools
app.imageTools.uploadImage(file)
app.imageTools.placeImage(id, options)
app.imageTools.getLibrary()

// Relations
app.addRelation(fromId, toId, type, params)
app.removeRelation(fromId, toId, type)
app.getRelations(itemId)

// Filters
app.filterSystem.addFilter('grayscale', { intensity: 1 })
app.filterSystem.removeFilter('grayscale')

// Scene Manager
app.sceneManager.createScene(name)
app.sceneManager.loadScene(id)
app.sceneManager.listScenes()

Version 0.1

Features

  • Canvas-based animation editor
  • Text and shape creation
  • Basic animations (pulse, rotate, bounce, fade, wobble, slide)
  • Background generators (sunburst, sunset, grid, waves, circuit)
  • Freehand drawing tool
  • Arrow system with animated bolts
  • Video export (WebM)
  • Animated SVG export
  • Template system
  • Undo/redo history

API

// Core
app.create({ type, ...options })
app.modify(item, options)
app.deleteSelected()  // Remove selected items
app.animate(item, { animationType, animationSpeed })

// Export
app.exportAnimatedSVG()
app.startRecording()
app.stopRecording()

// Generators
app.executeGenerator(name, params)

// Effects
app.applyEffect(item, type, config)