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 Tools —
pinepaper_apply_deform,pinepaper_remove_deform,pinepaper_trigger_deformfor 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
- PinePaper API:
-
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
drawImageerrors 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/trimOffsetfor 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 withsin,cos,clamp,lerp, etc.) -
Masking Enhancements - Mask modes (clip/subtract/intersect), mask stacking, vertex animation,
applyCustomMaskAPI -
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_animatesrelation
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 (
propertyEasingsper keyframe) - Custom cubic bezier easing curves (
[x1, y1, x2, y2]arrays) - Spatial motion paths via
spatialHandlesfor curved position interpolation - Path morphing via
segmentskeyframes - Gradient animation (interpolate gradient stops, origin, destination)
- Bone pose keyframes for timeline-driven skeletal animation
- Relation param keyframes (
paramKeyframesfor 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.PinePaperAgentglobal 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
keyframeItemsSet for O(1) keyframe lookupanimatedItemsSet 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 |
| gif | 800x450 | |
| twitter-video | mp4 | 1280x720 |
| mp4 | 1200x627 | |
| mp4 | 1200x630 | |
| discord | gif | 400x400 |
| slack | gif | 400x300 |
| print-a4 | 300 DPI | |
| print-letter | 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)