{"id":16411058,"url":"https://github.com/phoe/skippy-renderer","last_synced_at":"2026-02-09T07:31:32.399Z","repository":{"id":111724621,"uuid":"105520000","full_name":"phoe/skippy-renderer","owner":"phoe","description":"GIF renderer for SKIPPY","archived":false,"fork":false,"pushed_at":"2022-10-18T17:13:12.000Z","size":5,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-20T00:30:39.945Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Common Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phoe.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}},"created_at":"2017-10-02T09:54:40.000Z","updated_at":"2023-09-03T13:21:24.000Z","dependencies_parsed_at":null,"dependency_job_id":"2ed47e72-1bad-4442-8012-cda0079bfa8c","html_url":"https://github.com/phoe/skippy-renderer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/phoe/skippy-renderer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoe%2Fskippy-renderer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoe%2Fskippy-renderer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoe%2Fskippy-renderer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoe%2Fskippy-renderer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phoe","download_url":"https://codeload.github.com/phoe/skippy-renderer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoe%2Fskippy-renderer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29258740,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-09T04:11:57.159Z","status":"ssl_error","status_checked_at":"2026-02-09T04:11:56.117Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"2024-10-11T06:44:27.573Z","updated_at":"2026-02-09T07:31:30.370Z","avatar_url":"https://github.com/phoe.png","language":"Common Lisp","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SKIPPY/RENDERER\n\nThis is a GIF renderer for SKIPPY.\n\n## Reason\n\nThe issue of rendering a GIF file is that every single GIF frame can - for\ncompression purposes - only update a single part of the resulting image. For\ninstance, the first frame can be 100x100px, but the second frame can be 4x4\nand only update a part that is 20px from the top and 84px from the left. The\nthird frame can again be 40x40 and update a yet different part of the image,\nthe fourth frame can *reverse* the effects of the third frame, etc., etc..\nThis is why, even if you have the GIF frames alone, it is non-trivial to get\na series of 100x100 images ARGB that you can then convert e.g. into a video\nfile.\n\nSKIPPY-RENDERER is a library existing to solve this very problem. No matter\nwhat the original frames of the image look like, the RENDER function gives you\na \"decompressed\" series of 100x100px ARGB frames that you can then e.g. encode\ninto a different file format.\n\nMy personal use case for this library: converting GIF animations into another\nfile format that required raw ARGB data for each frame.\n\n## Interface\n\nThe only exported function is `RENDER` which accepts a SKIPPY data stream and a\n`BYTE-ORDER` keyword argument that states the endianness of bytes in the\nresulting vector (ARGB or BGRA).\nIt returns three values - a list of vectors containing ARGB data in row-major\norder, a list of integer values for frame delays in milliseconds, and a list\ncontaining three values: image width, image height and a boolean signifying if\nthe GIF should loop.\n\n```lisp\nCL-USER\u003e (skippy:load-data-stream \"~/Downloads/cat_picture.gif\")\n#\u003cSKIPPY::DATA-STREAM geometry 100x100, 5 images {100D53C843}\u003e\nCL-USER\u003e (skippy-renderer:render *)\n(#(0 0 0 0 0 ...)\n ...)\n(3 3 3 3 3)\n(100 100 T)\n```\n\n## License\n\nMIT, or whatever the original SKIPPY is licensed under.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphoe%2Fskippy-renderer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphoe%2Fskippy-renderer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphoe%2Fskippy-renderer/lists"}