{ "info": { "author": "Pierre V. Villeneuve", "author_email": "pierre.villeneuve@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: Jupyter", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Multimedia :: Video" ], "description": "# Jupyter Video Widget\n\nThe goal of this project is to develop a custom Jupyter [widget](https://github.com/ipython/ipywidgets) making it easy to play videos (local and remote) via HTML5 video player embededed in a Jupyter Notebook. This widget project was initialized using the very handy Cookiecutter [template](https://github.com/jupyter-widgets/widget-cookiecutter).\n\n\n# Example\n\n![example](example.png)\n\n\n# Install\n\n## Prerequisites\n\nIf not already enabled, you'll need to enable the ipywidgets notebook extension that installs with Jupyter. You can use the command `jupyter nbextension list` to see which (if any) notebook extensions are currently enabled. Enable it with following:\n\n```bash\njupyter nbextension enable --py --sys-prefix widgetsnbextension\n```\n\n\n## Standard Installation\n\nUse pip to install:\n\n```bash\npip install Jupyter-Video-Widget\n\njupyter nbextension enable --py --sys-prefix jpy_video\n```\n\n\n## Developer Installation\n\n```bash\ngit clone git@github.com:Who8MyLunch/Jupyter_Video_Widget.git\n\ncd Jupyter_Video_Widget\n\npip install -e .\njupyter nbextension install --py --symlink --sys-prefix jpy_video\njupyter nbextension enable --py --sys-prefix jpy_video\n```\n\n\n# Making Changes to JavaScript Code\n\nJupyter widget development uses [npm]([npm](https://docs.npmjs.com/getting-started/what-is-npm) (Node Package Manager) for handling all the scary JavaScript details. The source code for this project lives in the folder `js` and the npm package is defined by the file `js/package.json`. The actual JavaScript source code for the video widget is contained entirely in the file `js/src/jupyter-video.js`. This is the only JavaScript file you should need edit when working on front-end parts of this project.\n\nAfter making changes to this JavaScript code it must be prepared and packaged into the `static` folder on the Python side of the project. Do this by typing the following command from within the `js` folder:\n\n```bash\nnpm install\n```\n\nSee the links below for more helpful information:\n- https://docs.npmjs.com/cli/install\n- http://stackoverflow.com/questions/19578796/what-is-the-save-option-for-npm-install\n\n\n# File Layout\n\nNote: I found this write-up at npmjs.com very helpful in understanding the recommended folder layout: https://docs.npmjs.com/files/folders.\n\n - Jupyter_Video_Widget/\n - jpy_video/ All Python code lives here\n - static/ Prepared and packaged JS code ends up here\n - version.py\n - video.py Widget Python code\n - server.py Includes http file server with support for byte range requests\n - compound.py\n - monotext_widget.py\n - js/ All original JavaScript code lives here\n - dist/\n - node_modules/\n - src/\n - jupyter-video.js Widget javaScript code\n - embed.js Only edit to update exported module name (e.g. video.js)\n - index.js Only edit to update exported module name (e.g. video.js)\n - extension.js\n - README.md\n - package.json Double check author name, email address, github org., etc.\n - webpack.config.js Contains path to static JS folder on the Python side\n - setup.py\n - setup.cfg\n - MANIFEST.in Contains relative path to static folder under jpy_video\n - requirements.txt\n\n\n## Reference Information\n\n- Jupyter widgets documentation:\n - [Jupyter widgets github](https://github.com/ipython/ipywidgets)\n - [Building a custom widget](https://ipywidgets.readthedocs.io/en/latest/examples/Widget%20Custom.html)\n - [Low-level widget tutorial](https://ipywidgets.readthedocs.io/en/latest/examples/Widget%20Low%20Level.html)\n\n- Helpful HTML5 articles:\n - [Good stuff about implementing custom video HTML5 player](https://developer.mozilla.org/en-US/Apps/Fundamentals/Audio_and_video_delivery/cross_browser_video_player)\n - [Video player styling](https://developer.mozilla.org/en-US/Apps/Fundamentals/Audio_and_video_delivery/Video_player_styling_basics)\n - [Media buffering and seeking, nice example displaying time ranges where video is loaded](https://developer.mozilla.org/en-US/Apps/Fundamentals/Audio_and_video_delivery/buffering_seeking_time_ranges)\n - [HTML5 media events](https://www.w3.org/2010/05/video/mediaevents.html)\n\n- More information about HTML5 and video/audio media:\n - https://www.html5rocks.com/en/tutorials/video/basics/\n - https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement\n - https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement\n - https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Video_and_audio_content\n - https://developer.mozilla.org/en-US/Apps/Fundamentals/Audio_and_video_delivery\n - https://developer.mozilla.org/en-US/Apps/Fundamentals/Audio_and_video_manipulation\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Who8MyLunch/Jupyter_Video_Widget", "keywords": "ipython,jupyter,widgets,video,html5,player", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "Jupyter-Video-Widget", "package_url": "https://pypi.org/project/Jupyter-Video-Widget/", "platform": "Jupyter", "project_url": "https://pypi.org/project/Jupyter-Video-Widget/", "project_urls": { "Homepage": "https://github.com/Who8MyLunch/Jupyter_Video_Widget" }, "release_url": "https://pypi.org/project/Jupyter-Video-Widget/0.3.1/", "requires_dist": [ "ipython", "jupyter", "notebook", "ipywidgets (>=7.0.0)", "shortuuid", "ordered-namespace" ], "requires_python": "", "summary": "A Jupyter HTML5 Video Player Widget", "version": "0.3.1" }, "last_serial": 3704197, "releases": { "0.1.0.dev0": [ { "comment_text": "", "digests": { "md5": "e1c0e8b8096fdb0b2b6f5735e5101c2d", "sha256": "6920b537754ed9c7780813eb27b1fa407fef186b9dd5bf2076e7c290e535bafd" }, "downloads": -1, "filename": "Jupyter_Video_Widget-0.1.0.dev0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e1c0e8b8096fdb0b2b6f5735e5101c2d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 98393, "upload_time": "2017-07-31T15:43:00", "url": "https://files.pythonhosted.org/packages/a4/35/3368c9d4875b76c3e5ede927288eb7c2fe33909fc100e22e3f68c8d1aacf/Jupyter_Video_Widget-0.1.0.dev0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3689654515d768091b786c317c8d8fc5", "sha256": "b083de5e0f388bf3b61f1a399cd5001fd459c935735191896cda74dd19363b83" }, "downloads": -1, "filename": "Jupyter_Video_Widget-0.1.0.dev0.tar.gz", "has_sig": false, "md5_digest": "3689654515d768091b786c317c8d8fc5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52289, "upload_time": "2017-07-31T15:43:02", "url": "https://files.pythonhosted.org/packages/e8/e2/3d27c890515f361c4118eef1aefefb5e47ddfe5b5a6da40d7a93c51cb02e/Jupyter_Video_Widget-0.1.0.dev0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "d8b8a48e79e89b86c22e38d95e42f4a1", "sha256": "f29f33c8b5f54221d88166bd259a899ee576006121d1bbb75525f2e183297151" }, "downloads": -1, "filename": "Jupyter_Video_Widget-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d8b8a48e79e89b86c22e38d95e42f4a1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 99077, "upload_time": "2017-09-04T22:05:06", "url": "https://files.pythonhosted.org/packages/87/2d/ebec353d613ca4676cfb077866225a2d4fb233188c9e38c4c7f4caced971/Jupyter_Video_Widget-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3f46d5257c939a59a6d30984a9b96330", "sha256": "8ae154ae59defba5258cf040a08ba5214d901a74d7b4d450ecb21ad6843d3ec5" }, "downloads": -1, "filename": "Jupyter_Video_Widget-0.2.0.tar.gz", "has_sig": false, "md5_digest": "3f46d5257c939a59a6d30984a9b96330", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52967, "upload_time": "2017-09-04T22:05:08", "url": "https://files.pythonhosted.org/packages/ee/41/1b020e12780e57a719d78c0bc2bd39ee2da29cf9a5faedb02d4961e05876/Jupyter_Video_Widget-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "4b591d7aa564be477357198f5fb9d808", "sha256": "69673e032e4ba437fbe03656a9d7c8a6457cac10492c5d18600f9dff9ab2dfb2" }, "downloads": -1, "filename": "Jupyter_Video_Widget-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4b591d7aa564be477357198f5fb9d808", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 99184, "upload_time": "2017-10-07T17:48:48", "url": "https://files.pythonhosted.org/packages/16/42/425108d6ef3f5bc5087dde710561b5c1ac01560fab7c6ac95d2ed6b5b109/Jupyter_Video_Widget-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0878d0607df899c00fe7d53616908a15", "sha256": "8526bd504d1629720e2c604fd1d8cf155207ab40314d08b1595455c987deee96" }, "downloads": -1, "filename": "Jupyter_Video_Widget-0.3.0.tar.gz", "has_sig": false, "md5_digest": "0878d0607df899c00fe7d53616908a15", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53078, "upload_time": "2017-10-07T17:48:50", "url": "https://files.pythonhosted.org/packages/30/bd/e3d3c74cc2b2303ad2c6b65959d7f2431b593e0bdaee4787a8477b5aea44/Jupyter_Video_Widget-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "a3bd872855a34577fbbbc74042046647", "sha256": "05051ed1506371963bca0514781f6b3c7089b3d6c32fccce3804b9c1666f1832" }, "downloads": -1, "filename": "Jupyter_Video_Widget-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a3bd872855a34577fbbbc74042046647", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 99213, "upload_time": "2018-03-25T19:20:47", "url": "https://files.pythonhosted.org/packages/93/de/db09c837def2a58e3ae9f4693136743437fa93abc533fcd68372191bab42/Jupyter_Video_Widget-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "17fe356be5ef6af9c9018f8663e5e919", "sha256": "3341e04634576880e08ef878c9b9451f5cddeb765ad6473ee684085d80c32345" }, "downloads": -1, "filename": "Jupyter_Video_Widget-0.3.1.tar.gz", "has_sig": false, "md5_digest": "17fe356be5ef6af9c9018f8663e5e919", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53098, "upload_time": "2018-03-25T19:20:48", "url": "https://files.pythonhosted.org/packages/8c/4f/d7d99a72dd754e5cb63a18cd714959bef91c7b08d61bb49f9a90504fc6d3/Jupyter_Video_Widget-0.3.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a3bd872855a34577fbbbc74042046647", "sha256": "05051ed1506371963bca0514781f6b3c7089b3d6c32fccce3804b9c1666f1832" }, "downloads": -1, "filename": "Jupyter_Video_Widget-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a3bd872855a34577fbbbc74042046647", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 99213, "upload_time": "2018-03-25T19:20:47", "url": "https://files.pythonhosted.org/packages/93/de/db09c837def2a58e3ae9f4693136743437fa93abc533fcd68372191bab42/Jupyter_Video_Widget-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "17fe356be5ef6af9c9018f8663e5e919", "sha256": "3341e04634576880e08ef878c9b9451f5cddeb765ad6473ee684085d80c32345" }, "downloads": -1, "filename": "Jupyter_Video_Widget-0.3.1.tar.gz", "has_sig": false, "md5_digest": "17fe356be5ef6af9c9018f8663e5e919", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53098, "upload_time": "2018-03-25T19:20:48", "url": "https://files.pythonhosted.org/packages/8c/4f/d7d99a72dd754e5cb63a18cd714959bef91c7b08d61bb49f9a90504fc6d3/Jupyter_Video_Widget-0.3.1.tar.gz" } ] }