{"id":20312543,"url":"https://github.com/annimon/hotarufx","last_synced_at":"2025-10-16T07:16:10.980Z","repository":{"id":144595121,"uuid":"103023961","full_name":"aNNiMON/HotaruFX","owner":"aNNiMON","description":"Programming language for creating animations","archived":false,"fork":false,"pushed_at":"2025-03-20T21:35:01.000Z","size":924,"stargazers_count":12,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-11T16:59:23.956Z","etag":null,"topics":["animation","java","javafx","programming-language"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aNNiMON.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2017-09-10T11:26:12.000Z","updated_at":"2025-03-20T21:35:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"bd98ba3d-5243-4500-ab38-9dccf046f849","html_url":"https://github.com/aNNiMON/HotaruFX","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/aNNiMON/HotaruFX","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aNNiMON%2FHotaruFX","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aNNiMON%2FHotaruFX/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aNNiMON%2FHotaruFX/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aNNiMON%2FHotaruFX/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aNNiMON","download_url":"https://codeload.github.com/aNNiMON/HotaruFX/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aNNiMON%2FHotaruFX/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279164750,"owners_count":26117779,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-16T02:00:06.019Z","response_time":53,"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":["animation","java","javafx","programming-language"],"created_at":"2024-11-14T18:06:38.124Z","updated_at":"2025-10-16T07:16:10.954Z","avatar_url":"https://github.com/aNNiMON.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"HotaruFX\n========\n\nProgramming language for creating animations\n\n\n![App running on Linux Mint](art/screenshot.png)\n\n\n## Demo\n\n![Logo](art/logo.gif)\n\n```java\ncomposition(320, 57, 25, \"#2F2F2F\")\n\nLOGO = text({\n  x: -2135,\n  y: 0,\n  valign: \"CENTER\",\n  text: 'HotaruFX',\n  fill: '#FDFD42',\n  font: 800,\n  css: '\n    -fx-font-weight: bold;\n    -fx-effect: dropshadow(three-pass-box, rgba(100,183,3,0.8), 68, 0, 0.5, 0.25);\n  '\n})\n\nLOGO@fill\n  .add(2 sec, \"#82fd42\", easeOut)\n  .add(4 sec, \"#FDFD42\", ease)\n\nrender(LOGO)\n```\n\n![Font icons](art/love-github.gif)\n\n```java\ncomposition(1280, 720, 50)\n\nLOVE = text({\n  x: -80\n  y: 0\n  valign: \"CENTER\"\n  text: \"\\uf004\"\n  fill: '#cf1010'\n  font: 200\n  opacity: 0\n})\nLOVE.scaleX = LOVE.scaleY = 0\nLOVE@scaleX\n  .add(100 ms, 1.0, easeIn)\n  .add(400 ms, 1.4, easeOut)\n  .add(800 ms, 1.1, easeOut)\nLOVE@scaleY\n  .add(100 ms, 1.0, easeIn)\n  .add(400 ms, 1.4, easeOut)\n  .add(800 ms, 1.1, easeOut)\nLOVE@opacity\n   .add(350 ms, 1, easeIn)\n   .add(600 ms, 1, hold)\n   .add(800 ms, 0, easeOut)\n\nGITHUB = text({\n  x: -45\n  y: 0\n  valign: \"CENTER\"\n  text: \"\\uf09b\"\n  fill: 'white'\n  font: 150\n})\nGITHUB@fill\n   .add(600 ms, 'white', hold)\n   .add(800 ms, '#cf1010', easeOut)\nGITHUB@opacity\n   .add(1.2 sec, 1, hold)\n   .add(1.5 sec, 0, easeOut)\n\nrender(LOVE GITHUB)\n```\n\n![Text clip](art/hotarufx-clip.gif)\n\n```java\ncomposition(1280, 720, 30)\n\nCLIP = circle({\n  cx: 400,\n  cy: 0,\n  radius: 80\n})\n\nTEXT = text({\n  x: -220,\n  y: 0,\n  text: \"HotaruFX\",\n  fill: \"white\",\n  stroke: \"black\",\n  font: 100,\n  valign: \"CENTER\",\n  underline: true,\n  clip: CLIP,\n  css: '\n    -fx-effect: dropshadow(two-pass-box, rgba(0,0,0,0.8), 5, 0, 0.5, 0.25);\n  '\n})\n\nCLIP@cx\n  .add(1.2 sec, -210, easeOut)\n  .add(3 sec, 0, ease)\nCLIP@radius\n  .add(1.2 sec, 80, discrete)\n  .add(3 sec, 300, ease)\nTEXT@fill\n  .add(3 sec, 'white', hold)\n  .add(4 sec, '#D6EA2A', easeOut)\n\nrender(CLIP, TEXT)\n```\n\nSee other examples in [examples folder](app/src/main/resources/examples) or in `File -\u003e Open Example` menu.\n\n\n## Build\n\n```\n./gradlew shadowJar\n```\n\nBuild requires JDK 17 or higher and Java FX support. Assembled binaries are stored in `app/build/libs` directory.\n\n\n## Run\n\n```\n./gradlew run\n```\n\nApplication requires JRE 17 or higher and Java FX support.\n\n## License\n\nApache 2.0. See [license information](LICENSE).\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fannimon%2Fhotarufx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fannimon%2Fhotarufx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fannimon%2Fhotarufx/lists"}