PHPackages                             odinns/laravel-wayback-flipbook - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. odinns/laravel-wayback-flipbook

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

odinns/laravel-wayback-flipbook
===============================

Build PNG timelines for one archived page through Wayback Machine history.

v1.1.0(1mo ago)00[3 PRs](https://github.com/odinns/laravel-wayback-flipbook/pulls)MITPHPPHP 8.3.\* || 8.4.\*CI passing

Since Apr 30Pushed 2w agoCompare

[ Source](https://github.com/odinns/laravel-wayback-flipbook)[ Packagist](https://packagist.org/packages/odinns/laravel-wayback-flipbook)[ Docs](https://github.com/odinns/laravel-wayback-flipbook)[ RSS](/packages/odinns-laravel-wayback-flipbook/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (2)Dependencies (12)Versions (7)Used By (0)

Laravel Wayback Flipbook
========================

[](#laravel-wayback-flipbook)

Build PNG timelines for one archived page through Wayback Machine history.

This package takes one page URL, finds archived captures for that exact page, renders selected captures through raw Wayback replay, and writes PNG frames plus a JSON manifest.

It does not crawl a site. It does not follow links. It does not mirror sibling pages. If you ask for `https://example.com/page`, that page is the whole job.

Installation
------------

[](#installation)

```
composer require odinns/laravel-wayback-flipbook
npm install
npx playwright install chromium
```

Laravel discovers the service provider automatically.

The package depends on `odinns/laravel-wayback-machine` for CDX access and Wayback replay URL generation.

Usage
-----

[](#usage)

Render one frame per year, oldest to newest:

```
php artisan wayback:flipbook https://example.com/page
```

Plan the run without screenshots:

```
php artisan wayback:flipbook https://example.com/page --dry-run --json
```

Render newest to oldest:

```
php artisan wayback:flipbook https://example.com/page --direction=newest-first
```

Bound a larger run:

```
php artisan wayback:flipbook https://example.com/page --sample=all --from=2020 --to=2024
```

Write somewhere specific:

```
php artisan wayback:flipbook https://example.com/page --output=storage/app/page-history
```

Export an MP4 from an existing manifest and frames:

```
php artisan wayback:flipbook:export storage/app/page-history/manifest.json --fps=2
```

MP4 export is a post-processing step. It reads the manifest, uses the PNG frame order already written there, and does not query Wayback or render screenshots again. It requires `ffmpeg` on your `PATH`.

Default output:

```
storage/app/wayback-flipbook/{safe-page}/{run-timestamp}/

```

Artifacts:

```
manifest.json
frames/0001-20200101000000.png
frames/0002-20210101000000.png

```

Command Options
---------------

[](#command-options)

```
wayback:flipbook {url}
    --from=
    --to=
    --status=200
    --mime=text/html
    --sample=first-per-year
    --direction=oldest-first
    --limit=
    --delay-ms=2000
    --output=
    --viewport=1280x900
    --full-page
    --timeout=60
    --dry-run
    --json
    --force

```

```
wayback:flipbook:export {manifest}
    --output=
    --fps=2
    --force

```

Sampling modes:

- `all`
- `first-per-day`
- `first-per-month`
- `first-per-year`
- `unique-digest`
- `latest-per-url`

`--sample=all` without `--limit`, `--from`, or `--to` is blocked unless you pass `--force`.

Screenshot Defaults
-------------------

[](#screenshot-defaults)

Published config controls the default screenshot viewport, timeout, and Wayback delay:

```
return [
    'delay_ms' => 2000,
    'viewport' => '1280x900',
    'timeout' => 60,
];
```

Command options override config for a single run:

```
php artisan wayback:flipbook https://example.com/page --viewport=1920x1080 --timeout=90 --delay-ms=1000
```

Use `--full-page` when you want the whole page height. The width still comes from `--viewport`.

If you plan to export MP4, prefer viewport screenshots. Full-page captures can produce frames with different heights across archived captures, and ffmpeg expects one stable frame size for video. This package does not scale, crop, or pad frames yet. Use `--full-page` only when you are fine handling that yourself.

Laravel Surface
---------------

[](#laravel-surface)

The package registers two commands:

```
wayback:flipbook
wayback:flipbook:export

```

It publishes one config file:

```
php artisan vendor:publish --tag=wayback-flipbook-config
```

There are no migrations, queues, views, routes, middleware, or facades.

Development
-----------

[](#development)

```
composer validate --strict
composer test:all
npm install
npx playwright install chromium
git diff --check
```

Versioning
----------

[](#versioning)

Versions come from Git tags. Composer should not have a `version` field.

Contributing
------------

[](#contributing)

Keep the package page-targeted. Do not add crawling, host-wide exports, or animation formats as a casual side quest. MP4 export stays explicit and manifest-driven.

Security
--------

[](#security)

Report security issues through GitHub Security Advisories:

```
https://github.com/odinns/laravel-wayback-flipbook/security/advisories/new

```

Changelog
---------

[](#changelog)

See [CHANGELOG.md](CHANGELOG.md).

License
-------

[](#license)

MIT. See [LICENSE](LICENSE).

###  Health Score

41

—

FairBetter than 87% of packages

Maintenance95

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity55

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

3

Last Release

40d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/10bbe1cbea253f250b899d5704fbe59fc91ee40b14c017527409482187f365a1?d=identicon)[odinns](/maintainers/odinns)

---

Top Contributors

[![odinns](https://avatars.githubusercontent.com/u/10807424?v=4)](https://github.com/odinns "odinns (4 commits)")

---

Tags

laravelarchiveflipbookinternet-archivewayback-machine

###  Code Quality

TestsPest

Static AnalysisPHPStan, Rector

### Embed Badge

![Health badge](/badges/odinns-laravel-wayback-flipbook/health.svg)

```
[![Health](https://phpackages.com/badges/odinns-laravel-wayback-flipbook/health.svg)](https://phpackages.com/packages/odinns-laravel-wayback-flipbook)
```

###  Alternatives

[laravel/ai

The official AI SDK for Laravel.

9782.1M153](/packages/laravel-ai)[illuminate/queue

The Illuminate Queue package.

20432.2M1.5k](/packages/illuminate-queue)[spatie/laravel-health

Monitor the health of a Laravel application

88011.3M149](/packages/spatie-laravel-health)[tightenco/jigsaw

Simple static sites with Laravel's Blade.

2.2k449.3k30](/packages/tightenco-jigsaw)[spatie/laravel-export

Create a static site bundle from a Laravel app

670139.5k6](/packages/spatie-laravel-export)[moonshine/moonshine

Laravel administration panel

1.3k239.9k72](/packages/moonshine-moonshine)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
