{"_id":"@cut.media/gif-player","_rev":"5-a97084161a0884eab62cbf018d04dda8","name":"@cut.media/gif-player","dist-tags":{"latest":"1.1.3"},"versions":{"1.0.0":{"name":"@cut.media/gif-player","version":"1.0.0","keywords":["gif","player","animation","canvas","webp"],"author":{"name":"Cut Media Team"},"license":"MIT","_id":"@cut.media/gif-player@1.0.0","maintainers":[{"name":"airyland","email":"iaminwinter@gmail.com"}],"homepage":"https://github.com/cut-media-hq/gif-player#readme","bugs":{"url":"https://github.com/cut-media-hq/gif-player/issues"},"dist":{"shasum":"03de9e2a743a5799c995aea43615c8d76f21a78c","tarball":"https://registry.npmjs.org/@cut.media/gif-player/-/gif-player-1.0.0.tgz","fileCount":6,"integrity":"sha512-wxYkeRF9xh0Kyi/dmL1XCOumlzOy3vlP4bj3QVT8CQImb8wGSMlnMuanBrG/tGgBsAewb2DdNtkWQnd4XguogA==","signatures":[{"sig":"MEUCIQCyaBSu4qxsD6cl6e/6X3OMokIb203/WAzxeXoQNkOM0gIgDMu/MTdu4+tH219Ne6wRL3ZH68j8daykjoCqrE6ZXqc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31106},"main":"dist/index.js","type":"module","_from":"file:cut.media-gif-player-1.0.0.tgz","types":"dist/index.d.ts","module":"dist/index.esm.js","scripts":{"test":"vitest","build":"rollup -c","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"airyland","email":"iaminwinter@gmail.com"},"_resolved":"/private/var/folders/39/kp19x3_j52lctbf0rwdg6m800000gn/T/4558df79aaa1f7ec31b5e6c16a31b304/cut.media-gif-player-1.0.0.tgz","_integrity":"sha512-wxYkeRF9xh0Kyi/dmL1XCOumlzOy3vlP4bj3QVT8CQImb8wGSMlnMuanBrG/tGgBsAewb2DdNtkWQnd4XguogA==","repository":{"url":"git+https://github.com/cut-media-hq/gif-player.git","type":"git"},"_npmVersion":"10.9.2","description":"A high-performance GIF player library for animated GIFs and WebP","directories":{},"_nodeVersion":"23.11.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.1.0","tslib":"^2.8.1","rollup":"^4.29.2","vitest":"^3.2.4","typescript":"^5.7.2","@types/node":"^22.10.2","rollup-plugin-dts":"^6.1.1","@vitest/coverage-v8":"^3.2.4","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^28.0.1","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^15.3.0"},"_npmOperationalInternal":{"tmp":"tmp/gif-player_1.0.0_1758170681448_0.8492375334218871","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@cut.media/gif-player","version":"1.1.0","keywords":["gif","player","animation","canvas","webp"],"author":{"name":"Cut Media Team"},"_id":"@cut.media/gif-player@1.1.0","maintainers":[{"name":"airyland","email":"iaminwinter@gmail.com"}],"homepage":"https://github.com/cut-media-hq/gif-player#readme","bugs":{"url":"https://github.com/cut-media-hq/gif-player/issues"},"dist":{"shasum":"9168fe7eea8f3d552c52040c1c70fe4ca2400149","tarball":"https://registry.npmjs.org/@cut.media/gif-player/-/gif-player-1.1.0.tgz","fileCount":6,"integrity":"sha512-vkbeWujLuIfOLT3whBsyMDYctc5khaUNRKvbxei1uNGUzKwCJc06CkqkVjdx/y8sIqriNQKtRnDbgfBoaT060A==","signatures":[{"sig":"MEUCIQCmtIvuHcQEfPinCyCNBCv0WQxSM8gcid3I1I4nbK5wVwIgLVAm4rxkclUc2/BeNs48505RY0oeKKXgtrhV8jx4STI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31126},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"f7bbbadaa4f4065780564a9cf119784beb73fa41","scripts":{"test":"vitest","build":"rollup -c","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"airyland","email":"iaminwinter@gmail.com"},"repository":{"url":"git+https://github.com/cut-media-hq/gif-player.git","type":"git"},"_npmVersion":"10.9.2","description":"A high-performance GIF player library for animated GIFs and WebP","directories":{},"_nodeVersion":"23.11.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.1.0","tslib":"^2.8.1","rollup":"^4.29.2","vitest":"^3.2.4","typescript":"^5.7.2","@types/node":"^22.10.2","rollup-plugin-dts":"^6.1.1","@vitest/coverage-v8":"^3.2.4","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^28.0.1","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^15.3.0"},"_npmOperationalInternal":{"tmp":"tmp/gif-player_1.1.0_1758171688096_0.7261149623448107","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@cut.media/gif-player","version":"1.1.1","keywords":["gif","player","animation","canvas","webp"],"author":{"name":"Cut Media Team"},"_id":"@cut.media/gif-player@1.1.1","maintainers":[{"name":"airyland","email":"iaminwinter@gmail.com"}],"homepage":"https://github.com/cut-media-hq/gif-player#readme","bugs":{"url":"https://github.com/cut-media-hq/gif-player/issues"},"dist":{"shasum":"e397b1689a44f369d4b2d2ef74419beeca48ea2c","tarball":"https://registry.npmjs.org/@cut.media/gif-player/-/gif-player-1.1.1.tgz","fileCount":6,"integrity":"sha512-R2LNRvSjGg6vKouNXzXV55bJCyiQ60r7HaiYaRX5SxFDaeBXQBleiBsYFjD7wXH8wyIrkRVpE8ZS0fisWRNl1w==","signatures":[{"sig":"MEYCIQDazKO8LUNvXkpPlwTZNohpGm8huaBPJ0TsnHxtNQ8F2gIhAPE5OsdI8uTp2R43ZK9p8WZTPNCmjhMcRf030R0bBCiW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33300},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"f7bbbadaa4f4065780564a9cf119784beb73fa41","scripts":{"test":"vitest","build":"rollup -c","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"airyland","email":"iaminwinter@gmail.com"},"repository":{"url":"git+https://github.com/cut-media-hq/gif-player.git","type":"git"},"_npmVersion":"10.9.2","description":"A high-performance GIF player library for animated GIFs and WebP","directories":{},"_nodeVersion":"23.11.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.1.0","tslib":"^2.8.1","rollup":"^4.29.2","vitest":"^3.2.4","typescript":"^5.7.2","@types/node":"^22.10.2","rollup-plugin-dts":"^6.1.1","@vitest/coverage-v8":"^3.2.4","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^28.0.1","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^15.3.0"},"_npmOperationalInternal":{"tmp":"tmp/gif-player_1.1.1_1758171893907_0.024623390514662225","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@cut.media/gif-player","version":"1.1.2","keywords":["gif","player","animation","canvas","webp"],"author":{"name":"Cut Media Team"},"_id":"@cut.media/gif-player@1.1.2","maintainers":[{"name":"airyland","email":"iaminwinter@gmail.com"}],"homepage":"https://github.com/cut-media-hq/gif-player#readme","bugs":{"url":"https://github.com/cut-media-hq/gif-player/issues"},"dist":{"shasum":"2eb23dca897e5461814dd0a74cf8940c4eb48aa0","tarball":"https://registry.npmjs.org/@cut.media/gif-player/-/gif-player-1.1.2.tgz","fileCount":6,"integrity":"sha512-wA708OEXEJaNgsmVZwnjLgbQjvY6PGSEysIfibCcCTQcpP3bYfUiJ/mh8OE9kT7RdxP4QqEaoLpIJI1AQZIVpw==","signatures":[{"sig":"MEYCIQCdC21FW/8EzJ9F5j0356MNKWNNIQs8IESyoTA0HWIGjwIhAN/RATJe89jrn2jIgb/FV+Z8OXeNjd83tiB+H+iUEfFI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33300},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"f7bbbadaa4f4065780564a9cf119784beb73fa41","scripts":{"test":"vitest","build":"rollup -c","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"airyland","email":"iaminwinter@gmail.com"},"repository":{"url":"git+https://github.com/cut-media-hq/gif-player.git","type":"git"},"_npmVersion":"10.9.2","description":"A high-performance GIF player library for animated GIFs and WebP","directories":{},"_nodeVersion":"23.11.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.1.0","tslib":"^2.8.1","rollup":"^4.29.2","vitest":"^3.2.4","typescript":"^5.7.2","@types/node":"^22.10.2","rollup-plugin-dts":"^6.1.1","@vitest/coverage-v8":"^3.2.4","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^28.0.1","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^15.3.0"},"_npmOperationalInternal":{"tmp":"tmp/gif-player_1.1.2_1758171993117_0.7085696599666436","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@cut.media/gif-player","version":"1.1.3","description":"A high-performance GIF player library for animated GIFs and WebP","type":"module","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","scripts":{"build":"rollup -c","build:watch":"rollup -c -w","test":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm run build && pnpm run test"},"keywords":["gif","player","animation","canvas","webp"],"author":{"name":"Cut Media Team"},"devDependencies":{"@rollup/plugin-commonjs":"^28.0.1","@rollup/plugin-node-resolve":"^15.3.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-typescript":"^12.1.2","@types/node":"^22.10.2","@vitest/coverage-v8":"^3.2.4","jsdom":"^26.1.0","rollup":"^4.29.2","rollup-plugin-dts":"^6.1.1","tslib":"^2.8.1","typescript":"^5.7.2","vitest":"^3.2.4"},"repository":{"type":"git","url":"git+https://github.com/cut-media-hq/gif-player.git"},"bugs":{"url":"https://github.com/cut-media-hq/gif-player/issues"},"homepage":"https://github.com/cut-media-hq/gif-player#readme","_id":"@cut.media/gif-player@1.1.3","gitHead":"f7bbbadaa4f4065780564a9cf119784beb73fa41","_nodeVersion":"23.11.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-3vje409ZVspBA/d4Wt+V+qIiKCzrFL5t7wcNXdgtFk1h7tG3hoFdVkx3dsQf1Jsu+BMY6yAE3SWZHN3T+tBu5g==","shasum":"fb46ba5a776b15a13a9c08fc2c5a5392a0578d04","tarball":"https://registry.npmjs.org/@cut.media/gif-player/-/gif-player-1.1.3.tgz","fileCount":6,"unpackedSize":33231,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCOUwtKneSciSdwrJyRj/JmLynRfcbb4z624rKq1JbUUwIhAOaGD7w0F6XcCRmqUQqCQ2yfPiep5KCc0d41CZVpPdkQ"}]},"_npmUser":{"name":"airyland","email":"iaminwinter@gmail.com"},"directories":{},"maintainers":[{"name":"airyland","email":"iaminwinter@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gif-player_1.1.3_1758172623661_0.8235046460661855"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-18T04:44:41.349Z","modified":"2025-09-18T05:17:04.045Z","1.0.0":"2025-09-18T04:44:41.633Z","1.1.0":"2025-09-18T05:01:28.307Z","1.1.1":"2025-09-18T05:04:54.089Z","1.1.2":"2025-09-18T05:06:33.282Z","1.1.3":"2025-09-18T05:17:03.839Z"},"bugs":{"url":"https://github.com/cut-media-hq/gif-player/issues"},"author":{"name":"Cut Media Team"},"homepage":"https://github.com/cut-media-hq/gif-player#readme","keywords":["gif","player","animation","canvas","webp"],"repository":{"type":"git","url":"git+https://github.com/cut-media-hq/gif-player.git"},"description":"A high-performance GIF player library for animated GIFs and WebP","maintainers":[{"name":"airyland","email":"iaminwinter@gmail.com"}],"readme":"# @cut.media/gif-player\n\nA high-performance GIF player library for animated GIFs and WebP with full control over animation timing.\n\nPart of the [Cut.media](https://cut.media) online video editor project.\n\n## Features\n\n- 🎬 GIF and animated WebP support\n- 🎮 Full playback control (play, pause, seek)\n- 🖼️ Canvas-based rendering for performance\n- 📦 Small bundle size with tree-shaking support\n- 🔧 TypeScript support\n- 🖼️ Frame extraction and metadata parsing\n- ⏩ Playback speed control\n- ⏪ Reverse playback\n\n## Installation\n\n```bash\nnpm install @cut.media/gif-player\n# or\npnpm add @cut.media/gif-player\n```\n\n## Usage\n\n### Basic Animation\n\n```javascript\nimport gifPlayer from '@cut.media/gif-player'\n\n// Load and play GIF in a canvas\nconst gif = gifPlayer('path/to/animation.gif')\nconst animator = await gif.get()\nanimator.animateInCanvas(canvas)\nanimator.start()\n\n// Control playback\nanimator.stop()\nanimator.reset()\nanimator.setSpeed(2) // 2x speed\nanimator.setReverse(true) // Play backwards\n```\n\n### Parse GIF Metadata\n\n```javascript\nimport { parseGif, calculateFPS } from '@cut.media/gif-player'\n\n// Get GIF metadata\nconst result = await parseGif('path/to/animation.gif')\nconsole.log(result.metadata)\n// {\n//   width: 500,\n//   height: 300,\n//   frameCount: 30,\n//   duration: 2000,\n//   frames: [...]\n// }\n\n// Calculate actual FPS\nconst fps = calculateFPS(result.metadata.frames)\nconsole.log(`FPS: ${fps}`)\n\n// Extract specific frame\nconst frame = await result.extractFrame(10)\n// Returns ImageData for frame 10\n\n// Extract all frames\nconst frames = await result.extractAllFrames()\n// Returns array of ImageData\n```\n\n## API Reference\n\n### Main Player Function\n\n```typescript\nimport gifPlayer from '@cut.media/gif-player'\n\n// Returns a Gif instance for controlling animation\nconst gif = gifPlayer(url: string): Gif\n```\n\n### Gif Methods\n\n```typescript\n// Get animator instance\ngif.get(): Promise<Animator>\n\n// Animate in a canvas element\ngif.animate(selector: string | HTMLCanvasElement): Promise<Animator>\n\n// Custom frame rendering\ngif.frames(\n  selector: string | HTMLCanvasElement,\n  onDrawFrame: (ctx, frame) => void,\n  setDimensions?: boolean,\n  autoStart?: boolean\n): Promise<Animator>\n```\n\n### Animator Methods\n\n```typescript\n// Playback control\nanimator.start(): void\nanimator.stop(): void\nanimator.reset(): void\nanimator.running(): boolean\n\n// Speed and direction\nanimator.setSpeed(speed: number): void  // 0.1 to 10\nanimator.setReverse(reverse: boolean): void\n\n// Canvas rendering\nanimator.animateInCanvas(\n  canvas: HTMLCanvasElement,\n  setDimensions?: boolean,\n  autoStart?: boolean\n): void\n\n// Event handling\nanimator.onFrame = (frame: Frame, index: number) => void\n```\n\n### Parser Functions\n\n```typescript\nimport { parseGif, calculateFPS, getFrameAtTime } from '@cut.media/gif-player'\n\n// Parse GIF and get metadata\nparseGif(url: string): Promise<{\n  metadata: GifMetadata\n  extractFrame: (index: number) => Promise<ImageData>\n  extractAllFrames: () => Promise<ImageData[]>\n}>\n\n// Calculate FPS from frames\ncalculateFPS(frames: FrameMetadata[]): number\n\n// Get frame at specific time\ngetFrameAtTime(frames: FrameMetadata[], time: number): number\n```\n\n### Types\n\n```typescript\ninterface GifMetadata {\n  width: number\n  height: number\n  frameCount: number\n  duration: number\n  frames: FrameMetadata[]\n}\n\ninterface FrameMetadata {\n  delay: number\n  disposal: number\n  transparency: boolean\n  transparent_index?: number\n  data_offset: number\n  data_length: number\n}\n```\n\n## Who's Using This\n\n- [GifPlayer.app](https://gifplayer.app) - Online GIF player and editor\n- [Cut.media](https://cut.media) - Online video editor\n\n## Building\n\n```bash\n# Install dependencies\npnpm install\n\n# Build library\npnpm build\n\n# Run tests\npnpm test\n\n# Run tests with coverage\npnpm test:coverage\n```","readmeFilename":"README.md"}