{"id":50589490,"url":"https://github.com/spirali/fairyflow","last_synced_at":"2026-06-05T09:02:09.816Z","repository":{"id":356262514,"uuid":"1188196676","full_name":"spirali/fairyflow","owner":"spirali","description":"Python-driven tool for creating animated slides and general-purpose animations","archived":false,"fork":false,"pushed_at":"2026-05-17T12:30:18.000Z","size":5347,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-17T14:28:17.771Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/spirali.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-21T18:41:53.000Z","updated_at":"2026-05-17T12:17:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/spirali/fairyflow","commit_stats":null,"previous_names":["spirali/fairyflow"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/spirali/fairyflow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spirali%2Ffairyflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spirali%2Ffairyflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spirali%2Ffairyflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spirali%2Ffairyflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spirali","download_url":"https://codeload.github.com/spirali/fairyflow/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spirali%2Ffairyflow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33937661,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-05T02:00:06.157Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-05T09:02:08.992Z","updated_at":"2026-06-05T09:02:09.810Z","avatar_url":"https://github.com/spirali.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FairyFlow — animated slides \u0026 animations in Python\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/ff_logo.png\" alt=\"FairyFlow logo\" width=\"350\"/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://spirali.github.io/fairyflow/\"\u003eDocumentation\u003c/a\u003e ·\n  \u003ca href=\"https://spirali.github.io/fairyflow/getstarted/\"\u003eGet started\u003c/a\u003e ·\n  \u003ca href=\"https://spirali.github.io/fairyflow/examples/\"\u003eExamples\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n**FairyFlow** is a Python-driven tool for creating animated slides and general-purpose animations. You write plain Python, and FairyFlow evaluates it live in an interactive environment that keeps your code, scene tree, and rendered result in sync.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/screenshot1.png\" alt=\"FairyFlow interactive environment\"/\u003e\n\u003c/p\u003e\n\n## Key features\n\n- **Python-first authoring** — animations are plain `.py` scripts; no DSL to learn\n- **Live interactive environment** — edit code, press Ctrl+Enter, see the result instantly\n- **Easy scene exploration** — code editor connects code, the scene tree, and elements in rendered image\n- **Vector scene graph** — scenes are stored as vector graphics and rasterized at the last moment, so any output resolution is lossless\n- **Presentation cues** — `cue()` pauses the player for click-to-advance presentations\n- **Multiple export formats** — standalone `.ffpkg` player package, MP4 video, and multi-page PDF\n- **Performant backend** — Backend is implemented in Rust\n\n## Documentation\n\n**\u003chttps://spirali.github.io/fairyflow/\u003e**\n\n\n## Quick start\n\n```bash\npip install fairyflow\n\nfairyflow init my_project\nfairyflow open my_project\n```\n\n`fairyflow open` starts a local web server and prints the URL to the interactive studio. Open `scenes/scene1.ffpy` in the editor, write some code, and press Ctrl+Enter to evaluate:\n\n```python\nwith Scene():\n    stext(\"Hello world!\").fade_out()\n```\n\n## Project layout\n\n```\nmy_project/\n├── fairyflow.toml       ← project settings (fps, prologue path)\n├── prologue.py          ← shared imports and defaults for all scenes\n├── scenes/\n│   └── scene1.ffpy      ← animation code\n└── sequences/\n    └── sequence1.ffsq   ← ordered playlist of scenes for export\n```\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspirali%2Ffairyflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspirali%2Ffairyflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspirali%2Ffairyflow/lists"}