{"id":26229597,"url":"https://github.com/akashi-org/akashi","last_synced_at":"2025-10-16T01:25:30.315Z","repository":{"id":41243113,"uuid":"321847662","full_name":"akashi-org/akashi","owner":"akashi-org","description":"A next-generation video editor","archived":false,"fork":false,"pushed_at":"2023-09-02T03:47:33.000Z","size":8203,"stargazers_count":14,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-18T14:05:59.853Z","etag":null,"topics":["akashi","cpp","hardware-acceleration","python","vfx","video","video-editor"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/akashi-org.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.Apachev2","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-12-16T02:40:11.000Z","updated_at":"2025-04-08T07:13:26.000Z","dependencies_parsed_at":"2023-01-22T10:15:53.933Z","dependency_job_id":null,"html_url":"https://github.com/akashi-org/akashi","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akashi-org%2Fakashi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akashi-org%2Fakashi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akashi-org%2Fakashi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akashi-org%2Fakashi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akashi-org","download_url":"https://codeload.github.com/akashi-org/akashi/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249592828,"owners_count":21296622,"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","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":["akashi","cpp","hardware-acceleration","python","vfx","video","video-editor"],"created_at":"2025-03-12T22:16:54.963Z","updated_at":"2025-10-16T01:25:25.261Z","avatar_url":"https://github.com/akashi-org.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003cimg width=\"150\" src=\"https://user-images.githubusercontent.com/70841910/115134602-16088280-a001-11eb-991e-a091139b6a25.png\" /\u003e\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eAkashi\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eA Next-Generation Video Editor\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/license-GPLv3%2FApache%202-blue\" alt=\"GPLv3/Apachev2\" /\u003e\n\u003c/p\u003e\n\u003cbr\u003e\n\n**Akashi** is a next-generation video editor. \n\nYou can edit your videos only by programs without being bothered with complex GUI.\n\nAkashi is still in the very early stages of development, and **not ready for production** in any sense.\n\n## Example\n\n```python\nfrom akashi_core import ak, gl\n\n@ak.entry()\ndef main():\n\n    ak.text('Sample Text', lambda t: (\n        t.text.fg('#00ff00', 100),\n        t.duration(ak.root),\n    ))\n\n    @gl.entry(ak.frag)\n    def blue_filter(buffer: ak.frag, color: gl.frag_color) -\u003e None:\n        color.b *= 2.0\n\n    ak.video(ak.from_relpath(__file__, './dog.mp4'), lambda t: (\n        t.media.span_dur(10),\n        t.transform.layer_size(ak.width(), -1),\n        t.frag(blue_filter)\n    ))\n```\n\n## Installation\n\nTBD\n\n## Requirements\n\n### System Requirements\n\n* Linux (tested on Debian 11) \n* OpenGL core profile 4.2 or later\n* Python 3.11.x\n\n### Runtime Dependencies\n\n* FFmpeg 4.x or 5.x\n* SDL2, SDL_ttf, SDL_image\n* Qt5\n\n*Note*: Windows support is planned for a future release.\n\n## Getting Started\n\nTBD\n\n## Features\n\n### Code Driven Development\n\nVideo Editing in Akashi is completely code driven.  \nYou no longer need complex GUIs like timeline and inspectors.\n\n### Rich and Fast Visual Effects by GPU Shaders\n\nIn Akashi, every step of the video editing process is dominated in Python.  \nThe Python codes on visual effects are compiled to shaders by the JIT compiler.  \nThis gives Python a super power which shaders have; performance far beyond any other languages and non-comparable expressions.\n\n### Modern Python\n\nType hinting is mandatory in Akashi, and we require you to do so.  \nBasically, all errors are detected before runtime, and you will have a nice Python IntelliSense experience.  \nThis helps you write your codes more secure and easier.\n\n### New-Fashioned User Interface\n\n- Built-in Hot Reload\n- Seamless Editing by ASP\n- 🚧 Smart GUI\n   \n### Basic Video Editing Features\n\n- Hardware Accerated Video Playback / Encoding (VA-API)\n- Audio Playback (PulseAudio)\n- Image Rendering\n- Text Rendering (ttf/otf, outline, shadow, etc.)\n- Basic 2D shapes (Rectangle, Circle, Round Rectangle, Triangle, Line, etc.)\n- Rich Codec Backend (FFmpeg)\n- Video Encoding\n\n## Gallery\n\n### Two Videos With Subtitles\n\nhttps://user-images.githubusercontent.com/70841910/148137328-02665a2e-962a-4d82-9414-66fa94cc196e.mp4\n\n\u003cbr\u003e\n\n```python\n\nfrom akashi_core import ak, gl\n\ndef subtitle(msg: str, dur: float):\n\n    ak.text(msg, lambda t: (\n        t.duration(ak.sec(dur)),\n        t.text.fg(ak.Color.White, 32),\n        t.text.font_path('./myfont.ttf'),\n    ))\n\n\ndef layout(layout_ctx: ak.LayoutLayerContext):\n\n    match layout_ctx.key:\n        case 'subtitle':\n            subt_height = int(ak.height() * 0.1)\n            pos = (ak.center()[0], ak.height() - subt_height // 2)\n            return ak.LayoutInfo(pos=pos)\n        case _:\n            return None\n\n@ak.entry()\ndef main():\n\n    with ak.unit() as u1:\n\n        u1.layout(layout)\n\n        with ak.scene(ak.width(), int(ak.height() * 0.1)) as s1:\n            s1.key('subtitle')\n            s1.bg_color(ak.Color.Black)\n\n            subtitle('Lorem ipsum dolor sit amet', 3)\n            subtitle('At magnam natus ut mollitia reprehenderit', 3)\n\n        with ak.scene() as s2:\n            s2.key('main_video')\n\n            ak.video('./blue_city.mp4', lambda t: t.media.span_dur(3))\n            ak.video('./cherry.mp4', lambda t: t.media.span_dur(3))\n```\n\n### Circle Animation\n\nhttps://user-images.githubusercontent.com/70841910/148137358-bd784005-84e2-48c7-9552-abeb638e73f1.mp4\n\n\u003cbr\u003e\n\n```python\nfrom akashi_core import ak, gl\nimport random\nrandom.seed(102)\n\ndef random_radius() -\u003e float:\n    return random.choice([10, 20, 40, 80, 120])\n\ndef random_pos() -\u003e tuple[int, int]:\n    return (random.randint(0, ak.width()), random.randint(0, ak.height() * 2))\n\ndef random_color() -\u003e str:\n    return ak.hsv(random.randint(0, 360), 50, 100)\n\ndef circle_layer(radius: float, pos: tuple[int, int], color: str):\n\n    @gl.entry(ak.poly)\n    def fly(buffer: ak.poly, pos: gl.poly_pos) -\u003e None:\n        pos.y += buffer.time * 50\n\n    ak.circle(radius, lambda t: (\n        t.transform.pos(*pos),\n        t.shape.color(color),\n        t.poly(fly)\n    ))\n\n@ak.entry()\ndef main():\n\n    ak.root.bg_color(ak.Color.White)\n\n    for i in range(100):\n        circle_layer(random_radius(), random_pos(), random_color())\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakashi-org%2Fakashi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakashi-org%2Fakashi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakashi-org%2Fakashi/lists"}