diff --git a/src/pt/muitohentai/AndroidManifest.xml b/src/pt/muitohentai/AndroidManifest.xml
new file mode 100644
index 000000000..568741e54
--- /dev/null
+++ b/src/pt/muitohentai/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/src/pt/muitohentai/build.gradle b/src/pt/muitohentai/build.gradle
new file mode 100644
index 000000000..9bb5f98ce
--- /dev/null
+++ b/src/pt/muitohentai/build.gradle
@@ -0,0 +1,13 @@
+apply plugin: 'com.android.application'
+apply plugin: 'kotlin-android'
+
+ext {
+ extName = 'Muito Hentai'
+ pkgNameSuffix = 'pt.muitohentai'
+ extClass = '.MuitoHentai'
+ extVersionCode = 1
+ libVersion = '12'
+ containsNsfw = true
+}
+
+apply from: "$rootDir/common.gradle"
\ No newline at end of file
diff --git a/src/pt/muitohentai/res/mipmap-hdpi/ic_launcher.png b/src/pt/muitohentai/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..8b939e21a
Binary files /dev/null and b/src/pt/muitohentai/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/src/pt/muitohentai/res/mipmap-mdpi/ic_launcher.png b/src/pt/muitohentai/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..371312343
Binary files /dev/null and b/src/pt/muitohentai/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/src/pt/muitohentai/res/mipmap-xhdpi/ic_launcher.png b/src/pt/muitohentai/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..8a8803323
Binary files /dev/null and b/src/pt/muitohentai/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/src/pt/muitohentai/res/mipmap-xxhdpi/ic_launcher.png b/src/pt/muitohentai/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..bbd5b3bc4
Binary files /dev/null and b/src/pt/muitohentai/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/src/pt/muitohentai/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/muitohentai/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..68fc316be
Binary files /dev/null and b/src/pt/muitohentai/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/src/pt/muitohentai/src/eu/kanade/tachiyomi/animeextension/pt/muitohentai/MuitoHentai.kt b/src/pt/muitohentai/src/eu/kanade/tachiyomi/animeextension/pt/muitohentai/MuitoHentai.kt
new file mode 100644
index 000000000..462442d7d
--- /dev/null
+++ b/src/pt/muitohentai/src/eu/kanade/tachiyomi/animeextension/pt/muitohentai/MuitoHentai.kt
@@ -0,0 +1,143 @@
+package eu.kanade.tachiyomi.animeextension.pt.muitohentai
+
+import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
+import eu.kanade.tachiyomi.animesource.model.AnimesPage
+import eu.kanade.tachiyomi.animesource.model.SAnime
+import eu.kanade.tachiyomi.animesource.model.SEpisode
+import eu.kanade.tachiyomi.animesource.model.Video
+import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
+import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.util.asJsoup
+import okhttp3.Request
+import okhttp3.Response
+import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
+import java.text.SimpleDateFormat
+
+class MuitoHentai : ParsedAnimeHttpSource() {
+ override val name = "Muito Hentai"
+ override val baseUrl = "https://www.muitohentai.com"
+ override val lang = "pt-BR"
+ override val supportsLatest = true
+
+ // ============================== Popular ===============================
+ override fun popularAnimeSelector(): String = "ul.ul_sidebar > li"
+ override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/ranking-hentais/?paginacao=$page")
+
+ override fun popularAnimeFromElement(element: Element): SAnime {
+ return SAnime.create().apply {
+ thumbnail_url = element.selectFirst("div.zeroleft > a > img")!!.attr("src")
+ val a = element.selectFirst("div.lefthentais > div > b:gt(0) > a.series")!!
+ url = a.attr("href")
+ title = a.text()
+ }
+ }
+ override fun popularAnimeNextPageSelector() = "div.paginacao > a:contains(»)"
+ override fun popularAnimeParse(response: Response): AnimesPage {
+ val document = response.asJsoup()
+ val animes = document.select(popularAnimeSelector()).map(::popularAnimeFromElement)
+ return AnimesPage(animes, document.selectFirst(popularAnimeNextPageSelector()) != null)
+ }
+
+ // ============================== Episodes ==============================
+ override fun episodeListSelector(): String = "article.item"
+ override fun episodeListParse(response: Response): List {
+ val doc = response.asJsoup()
+ return doc
+ .select(episodeListSelector())
+ .map(::episodeFromElement)
+ .reversed()
+ }
+ override fun episodeFromElement(element: Element): SEpisode {
+ return SEpisode.create().apply {
+ val data = element.selectFirst("div.data")!!
+ url = element.selectFirst("div.poster > div.season_m > a")!!.attr("href")
+ name = data.selectFirst("h3")!!.text().trim()
+ date_upload = parseDate(data.selectFirst("span")!!.text())
+ }
+ }
+
+ // ============================ Video Links =============================
+ override fun videoListSelector() = "div.playex > div#option-0 > iframe"
+ override fun videoListParse(response: Response): List