{"id":18512011,"url":"https://github.com/eric-canas/makeup-hub","last_synced_at":"2025-05-14T11:34:30.237Z","repository":{"id":111249569,"uuid":"393724744","full_name":"Eric-Canas/Makeup-Hub","owner":"Eric-Canas","description":"Draw a beautiful makeup on your face and share it with others.","archived":false,"fork":false,"pushed_at":"2023-04-10T20:14:02.000Z","size":29403,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-08T20:13:12.616Z","etag":null,"topics":["computer-vision","face-detection","makeup","tensorflow-js"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Eric-Canas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"Eric-Canas"}},"created_at":"2021-08-07T15:45:27.000Z","updated_at":"2024-04-16T15:32:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"5541115a-9985-417c-ba65-f0ee11892ad0","html_url":"https://github.com/Eric-Canas/Makeup-Hub","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/Eric-Canas%2FMakeup-Hub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eric-Canas%2FMakeup-Hub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eric-Canas%2FMakeup-Hub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eric-Canas%2FMakeup-Hub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Eric-Canas","download_url":"https://codeload.github.com/Eric-Canas/Makeup-Hub/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254131661,"owners_count":22019976,"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":["computer-vision","face-detection","makeup","tensorflow-js"],"created_at":"2024-11-06T15:31:45.103Z","updated_at":"2025-05-14T11:34:30.196Z","avatar_url":"https://github.com/Eric-Canas.png","language":"JavaScript","funding_links":["https://github.com/sponsors/Eric-Canas"],"categories":[],"sub_categories":[],"readme":"# MakeupHub\n\nDraw a beautiful makeup on your face and share it with others.\n\nMakeup-Hub allows you to paint and put some stickers your face, and see how it looks in you or your friends faces from any perspective. In a close future it will also allow you to upload this makeup to a cloud where you could also try how other users makeups looks in your face. Additionally it have an option for \u003ci\u003emoonifying\u003c/i\u003e your face, which is really to see how it looks in a plain perspective that is used internally, but is pretty funny :full_moon_with_face:. Everything runs on frontend, so no images are sent to the server.\n\n### Quick Start\n\nSimply run the \u003ca href=\"./src/public/play.html\" target=\"_blank\"\u003e./src/public/play.html\u003c/a\u003e in server mode.\n\nTurn on your **webcam** click on **Makeup!** and draw a beatiful artwork on your face.  \n\u003cimg alt=\"Make up\" title=\"Make up\" src=\"./documentation/exampleImages/Drawing.gif\" width=400\u003e\n\nThen see how does it fits you, or try to \u003ci\u003emoonify\u003c/i\u003e your face :full_moon_with_face:.  \n\u003cimg alt=\"Make up\" title=\"Make up\" src=\"./documentation/exampleImages/Moonifying.gif\" width=400\u003e\n\nOr try to **Copy-Paste** some shitty images on your cheeks, a face mask or whatever you want (drawing or pasting images over your \u003ci\u003emoonified\u003c/i\u003e face will adjust them better to your skin).  \n\n\u003cimg alt=\"Shitty Stickers\" title=\"Shitty Stickers\" src=\"./documentation/exampleImages/ShittyStickers.gif\" width=400 align=left\u003e\n\u003cimg alt=\"Face Mask\" title=\"Face Mask\" src=\"./documentation/exampleImages/FaceMask.gif\" width=400\u003e\n\n\n## Implementation Details\n\nThis web application is built with \u003ca href=https://www.tensorflow.org/js target=\"_blank\"\u003e\u003cimg alt=\"TensorFlow.js\" title=\"TensorFlow.js\" src=\"https://img.shields.io/static/v1?label=\u0026message=Tensorflow.js\u0026color=FF6000\u0026logo=TensorFlow\u0026logoColor=FFFFFF\" height=18\u003e\u003c/a\u003e, \u003ca href=https://github.com/devforth/painterro target=\"_blank\"\u003e\u003cimg alt=\"Painterro\" title=\"Painterro\" src=\"https://img.shields.io/static/v1?label=\u0026message=Painterro\u0026color=4287F5\u0026logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOTYiIGhlaWdodD0iOTQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MyAxbC0yIDQ5aDE0TDUzIDFINDN6bS00IDUybC0xIDE0IDYgMiA0IDQgNC00IDYtMi0xLTE0SDM5em0tMSAxN2MtOS0xLTE3IDktMjMgMTItNiAyLTEwLTEtOS00IDAtMSAwLTIgNC0zLTMtMi02LTEtOCAxLTUgOCAxMCAxOCAyNCAxNyAxNi0xIDMwLTE2IDE1LTIzaC0zem0yMSAwaC0zYy0xNiA3LTIgMjIgMTQgMjMgMTQgMSAyOS05IDI0LTE2LTItMy01LTMtOC0yIDQgMSA0IDIgNCAzIDEgMy0zIDYtOSA0UzY4IDcwIDU5IDcweiIgZmlsbD0iIzAwMCIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuNSIvPjwvc3ZnPg==\u0026logoColor=FFFFFF\" height=18\u003e\u003c/a\u003e and \u003ca href=https://github.com/Eric-Canas/Homography.js target=\"_blank\"\u003e\u003cimg alt=\"Homography.js\" title=\"Homography.js\" src=\"https://img.shields.io/static/v1?label=\u0026message=Homography.js\u0026color=8A8A88\u0026logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTA4MCIgaGVpZ2h0PSIxMDgwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxmaWx0ZXIgaWQ9ImQiIHg9IjAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iLjQiLz48L2ZpbHRlcj48ZmlsdGVyIGlkPSJjIiB4PSItLjEiIHk9Ii0uMiIgd2lkdGg9IjEuMiIgaGVpZ2h0PSIxLjMiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMy44Ii8+PC9maWx0ZXI+PGZpbHRlciBpZD0iYiIgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIuMiIvPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImEiIHg9IjAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iLjIiLz48L2ZpbHRlcj48L2RlZnM+PHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMi44NTM0IDAgMCAyLjgzOTUgLTkxMCAtODY2KSIgZD0iTTMyMyA1NTRWMzgybDYwLTMxIDYwLTMyIDIwIDEyIDE5IDExLTE5IDEwLTU5IDMwLTQyIDIydjExNWwxMDYgNTggMSAydjM4YTYwNjQgNjA2NCAwIDAxLTEwNy01NyA4NjMgODYzIDAgMDAxIDgybC00MSAyOCAxLTExNnoiIGZpbGw9IiMzMzMiIGZpbHRlcj0idXJsKCNhKSIvPjxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KDIuODUzNCAwIDAgMi44Mzk1IC05MTAgLTg2NikiIGQ9Ik02NzUgNjU3bC0yMC0xNCAxLTQxdi00MWExNTkzIDE1OTMgMCAwMC0xMDcgNTd2LTIwbDEtMjAgNTItMjkgNTQtMjkgMS01OHYtNTZsLTItMmE0MjQzIDQyNDMgMCAwMC0xMTctNjJsMzctMjIgNjAgMzEgNjAgMzJ2MThsMSAyNzAtMjEtMTR6IiBmaWxsPSIjMzMzIiBmaWx0ZXI9InVybCgjYikiLz48cGF0aCBkPSJNNDg1IDkxN2wtNTYtMzAtMS0yNC0xLTU3di0zNGw1NyAzMSA1OSAzMSA1OC0zMCA1Ny0zMCAxIDU2djU2bC01NyAzMS01OCAzMS01OS0zMXoiIGZpbGw9IiNmZDUiLz48cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgyLjg1MzQgMCAwIDIuODM5NSAtOTEwIC04NjYpIiBkPSJNNDk4IDYzMmwtMTktMTAtOS01di00bC0xLTIwdi0xNmw1IDNjMzMgMTggMzUgMTkgMzcgMThsMTItNiAxOS0xMCA4LTR2MzlsLTIwIDExLTIwIDEwLTEyLTZ6IiBmaWxsPSIjZDQ4MDAwIiBmaWx0ZXI9InVybCgjYykiIG9wYWNpdHk9Ii44Ii8+PHRleHQgdHJhbnNmb3JtPSJtYXRyaXgoMi45NzYxIDAgMCAzLjA2MzQgLTgzOSAtMTAzMSkiIHg9IjQwMyIgeT0iNTI3LjQiIGZpbGw9IiMxNzE3MTciIGZpbHRlcj0idXJsKCNkKSIgZm9udC1mYW1pbHk9IkR1YmFpIiBmb250LXNpemU9IjEzMi4xIiBmb250LXdlaWdodD0iNTAwIiBsZXR0ZXItc3BhY2luZz0iMCIgb3BhY2l0eT0iLjkiIHN0cm9rZS13aWR0aD0iLjciIHN0eWxlPSJmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWVhc3QtYXNpYW46bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtsaW5lLWhlaWdodDoxLjI1O21peC1ibGVuZC1tb2RlOm5vcm1hbCI+PHRzcGFuIHg9IjQwMyIgeT0iNTI3LjQiIG9wYWNpdHk9Ii44IiBzdHlsZT0iZm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1lYXN0LWFzaWFuOm5vcm1hbDtmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtbnVtZXJpYzpub3JtYWwiPkpTPC90c3Bhbj48L3RleHQ+PC9zdmc+\u0026logoColor=FFFFFF\" height=18\u003e\u003c/a\u003e, a library that I previously developed for facilitating this kind of applications.  \n\nIt concretely uses the \u003ca href=\"https://github.com/tensorflow/tfjs-models/tree/master/face-landmarks-detection\" target=\"_blank\"\u003e\u003cb\u003eFacemesh\u003c/b\u003e\u003c/a\u003e model for \u003ci\u003eface landmarks detection\u003c/i\u003e. This way, when user wants to draw anything on its face, \u003ci\u003e486\u003c/i\u003e landmarks defining its current position and form are detected, so when saving the makeup it applies a \u003cb\u003ePiecewise Affine Transform\u003c/b\u003e that maps from these detected points to the famous \u003ci\u003emoonified\u003c/i\u003e version :full_moon_with_face:. This \u003ci\u003emoonified\u003c/i\u003e version is used as an static anchor for the user artwork, so when plotting the makeup again over the video stream, it will make the inverse transformation from this \u003ci\u003emoonified\u003c/i\u003e version to the landmarks detection of the current frame. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feric-canas%2Fmakeup-hub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feric-canas%2Fmakeup-hub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feric-canas%2Fmakeup-hub/lists"}