Coder Social home page Coder Social logo

chililabs / chiliphotopicker Goto Github PK

View Code? Open in Web Editor NEW
405.0 10.0 45.0 4.54 MB

Photo picker library for android. Let's you pick photos directly from files, or navigate to camera or gallery.

License: Apache License 2.0

Kotlin 100.00%
android image-picker library

chiliphotopicker's Introduction

ChiliPhotoPicker

Made with ❤️ by Chili Labs.

Library made without DataBinding, RxJava and image loading libraries, to give you opportunity to use it without additional dependencies.

  • Picker styled as bottom sheet dialog
  • Could be used for single or multiple photos pick
  • Allows to choose how images are loaded into ImageView
  • Takes responsibility for all needed permissions
  • Takes responsibility for fetching gallery/camera result
  • Have two built-in themes - Light and Dark
  • Easy custamizable
No permission Single choice Multiple choice

Setup

Gradle:

Add Jitpack to your root build.gradle file:

allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

Add dependency to application build.gradle file, where x.y.z is the latest release version:

implementation "com.github.ChiliLabs:ChiliPhotoPicker:x.y.z"

Usage

Initialize ChiliPhotoPicker in your Application's class onCreate

  • loader - your preferred ImageLoader implementation (ready examples for Glide and Picasso are here)
  • authority - your file provider authority. Is needed if you set allowCamera to true, so picker could store temporary photo from camera
ChiliPhotoPicker.init(
        loader = GlideImageLoader(),
        authority = "lv.chi.sample.fileprovider"
    )

Create new instance of PhotoPickerFragment

  • multiple - true for multiple image pick, false for single
  • allowCamera - true to show Camera button, false to hide
  • maxSelection - limit images count to pick
  • theme - built-in or custom theme (by default ChiliPhotoPicker.Light is used)
  • Show as dialog
PhotoPickerFragment.newInstance(
        multiple = true, 
        allowCamera = true,
        maxSelection = 5,
        theme = R.style.ChiliPhotoPicker_Dark
).show(supportFragmentManager, YOUR_TAG)

Notes: Picker will throw exception if:

  • loader was not initialized
  • authority was null while accessing camera

ImageLoader

We don't want to depend on many image loading libraries, so we have simple ImageLoader interface, which you can implement using your preferred library (Glide, Picasso, Coil, etc.) We have two working examples of ImageLoader implementations - using Glide and Picasso. You can just copy one of them or write your own implementation

Callback

Picked photos URIs are returned via callbacks onImagesPicked function, so you just need to implement PhotoPickerFragment.Callback interface in your activity or fragment

Themes

To customize picker you can use one of built-in themes or inherit it rewriting attributes you want (see example)

Attributes:

  • pickerBackgroundColor - background color
  • pickerPrimaryColor - primary picker color (no permission/empty texts, cancel icon)
  • pickerSecondaryColor - secondary picker color (snackbar)
  • pickerControlColor - color of buttons, icons, checkboxes, ripple
  • pickerGalleryIcon - drawable for Gallery icon (to remove it use @null as attribute value)
  • pickerCameraIcon - drawable for Camera icon (to remove it use @null as attribute value)
  • pickerCornerRadius - background's corners radius
  • pickerDividerColor - color of line below Gallery/Camera buttons

Localization

It's difficult to translate library to each language, so default strings are on English, but you can easily override them. Example for common strings and plurals are here. All strings used in library can be found here

License

Copyright 2019 Chili Labs

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

chiliphotopicker's People

Contributors

aleksandrsorlovs avatar apetjko avatar chili-ios avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chiliphotopicker's Issues

Allow Action not Working

Hello, everythink is working and other API version OK. But I have higgest api phone. It isn't working. I used other emulator api 27. Everythinks OK

My Phone Information

S23 ULTRA
Android Version : 13
compileSdk 33
minSdk 26
targetSdk 33 

BUG: No preview of photos

Hello,

I integrated your library into one of my apps but Its showing some weird behavior. First I open the PhotoPickerFragment - everything works. I choose 1-2 pictures. Second the user opens the PhotoPickerFragment again, but image previews are not visible. If the user navigates to gallery and back, previews are back.

I attached a link to a video for better understanding.

https://www.dropbox.com/s/0aquo1lqvs4ybci/photopicker-empty.mp4?dl=0

minSdkVersion 21

Error: uses-sdk:minSdkVersion 19 cannot be smaller than version 21 declared in library

Max photo count: Plurals string

Hello

it is necessary to introduce plural handling for the max photo count feature.

current string res id: picker_max_selection_reached

Its working when you only support english (and eg german)
but its not working for languages with more complex plural rules like polish (many, few, ...).

Authority Issue while accessing camera

I am facing issue while accessing camera

Couldn't find meta-data for provider with authority ${applicationId}.fileprovider

   <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_provider_paths" />
    </provider>

file_provider_paths:

In App Class

ChiliPhotoPicker.INSTANCE.init(new GlideImageLoader(), BuildConfig.APPLICATION_ID+".fileprovider");

Photo from camera: crash Android 11

Hello

I have Android 11 installed on my Pixel 2.
Every time I try to select picture by camera the library crashes with the following stacktrace:

2020-09-30 11:08:05.444 7462-7462/com.landwirt E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.landwirt, PID: 7462
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.landwirt/lv.chi.photopicker.utils.CameraActivity}: java.lang.IllegalStateException: intent.resolveActivity(packageManager) must not be null
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.IllegalStateException: intent.resolveActivity(packageManager) must not be null
at lv.chi.photopicker.utils.CameraActivity.requestImageCapture(CameraActivity.kt:85)
at lv.chi.photopicker.utils.CameraActivity.onCreate(CameraActivity.kt:30)
at android.app.Activity.performCreate(Activity.java:8000)
at android.app.Activity.performCreate(Activity.java:7984)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)

Feature: maxSelectionCount

Hi

thanks for this amazing library. I have a feature request.

Add setting maxSelectionCount:Int to set the maximum count of photos that can be selected.

My use case is that user can select 1 to 4 images. Currently I have to take the first 4 photos and discard the other ones. It would be nice, when the is not allowed to select more than X photos

2 issues crashing the app on some devices

Issue 1

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.zrtech.pixart/lv.chi.photopicker.utils.CameraActivity}: java.lang.IllegalStateException: intent.resolveActivity(packageManager) must not be null
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3611)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3775)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2246)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:233)
at android.app.ActivityThread.main(ActivityThread.java:8010)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)

Caused by java.lang.IllegalStateException: intent.resolveActivity(packageManager) must not be null
at lv.chi.photopicker.utils.CameraActivity.requestImageCapture(CameraActivity.java:28)
at lv.chi.photopicker.utils.CameraActivity.onCreate(CameraActivity.java:8)
at android.app.Activity.performCreate(Activity.java:8006)
at android.app.Activity.performCreate(Activity.java:7990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3584)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3775)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2246)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:233)
at android.app.ActivityThread.main(ActivityThread.java:8010)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)


Issue 2

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.zrtech.pixart/com.zrtech.pixart.MainActivity}: java.lang.IllegalStateException: ImageLoader is null. You probably forget to call ChiliPhotoPicker.init()
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3611)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3775)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2246)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:233)
at android.app.ActivityThread.main(ActivityThread.java:8010)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)

Caused by java.lang.IllegalStateException: ImageLoader is null. You probably forget to call ChiliPhotoPicker.init()
at lv.chi.photopicker.PickerConfiguration.getImageLoader(PickerConfiguration.java:16)
at lv.chi.photopicker.PhotoPickerFragment.onCreate(PhotoPickerFragment.java:16)
at androidx.fragment.app.Fragment.performCreate(Fragment.java:1)
at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:1)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:8)
at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:1)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3)
at androidx.fragment.app.FragmentManager.dispatchCreate(FragmentManager.java:2)
at androidx.fragment.app.FragmentController.dispatchCreate(FragmentController.java:1)
at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:1)
at lv.chi.photopicker.PickerConfiguration.setUp(PickerConfiguration.java)
at android.app.Activity.performCreate(Activity.java:8006)
at android.app.Activity.performCreate(Activity.java:7990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3584)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3775)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2246)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:233)
at android.app.ActivityThread.main(ActivityThread.java:8010)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)

The second issue crashing the app say You probably forget to call ChiliPhotoPicker.init()
but i am calling it inside onCreate on my main activity.

Any help would be appreciated.

And thanks for this awesome library.

Crash when selecting Camera

When I open the photo picker fragment and click Camera, I immediately get the following exception:

pl.baftek.discoverrudy E/AndroidRuntime: FATAL EXCEPTION: main
    Process: pl.baftek.discoverrudy, PID: 10220
    java.lang.RuntimeException: Unable to start activity ComponentInfo{pl.baftek.discoverrudy/lv.chi.photopicker.utils.CameraActivity}: java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/pl.baftek.discoverrudy/cache/camera/tmp6252440890878372045.jpg
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/pl.baftek.discoverrudy/cache/camera/tmp6252440890878372045.jpg
        at androidx.core.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:744)
        at androidx.core.content.FileProvider.getUriForFile(FileProvider.java:418)
        at lv.chi.photopicker.utils.FileProvidersKt.providerUri(FileProviders.kt:9)
        at lv.chi.photopicker.utils.CameraActivity.provideImageUri(CameraActivity.kt:77)
        at lv.chi.photopicker.utils.CameraActivity.onCreate(CameraActivity.kt:29)
        at android.app.Activity.performCreate(Activity.java:7802)
        at android.app.Activity.performCreate(Activity.java:7791)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 

What should I do?

I'm on Android 10 and have the following in my AndroidManifest.xml:

<provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="pl.baftek.discoverrudy.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

This is file_paths.xml:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path
        name="Comment images"
        path="Android/data/pl.baftek.discoverrudy/files/Pictures" />
    <external-path
        name="Chili image cache"
        path="/data/data/pl.baftek.discoverrudy/cache/camera" />
</paths>

Attempt to invoke virtual method 'void android.view.View.setTranslationY(float)' on a null object reference

Got this on a production device vivo 1811, SDK - 8.1.0. Any ideas?

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setTranslationY(float)' on a null object reference
       at lv.chi.photopicker.PhotoPickerFragment$pickerBottomSheetCallback$1.onSlide(PhotoPickerFragment.java:280)
       at com.google.android.material.bottomsheet.BottomSheetBehavior.dispatchOnSlide(BottomSheetBehavior.java:1503)
       at com.google.android.material.bottomsheet.BottomSheetBehavior$4.onViewPositionChanged(BottomSheetBehavior.java:1370)
       at androidx.customview.widget.ViewDragHelper.continueSettling(ViewDragHelper.java:779)
       at com.google.android.material.bottomsheet.BottomSheetBehavior$SettleRunnable.run(BottomSheetBehavior.java:1542)

onImagesPicked callback is not called in fragment

I have written the code like below

fun showPhotoPickerFragment() {
        PhotoPickerFragment.newInstance(
            multiple = false,
            allowCamera = true,
            theme = R.style.ChiliPhotoPicker_Light
        ).show(requireActivity().supportFragmentManager, "UploadProfileFragment")
    }
override fun onImagesPicked(photos: ArrayList<Uri>) {
    val initialPath = photos.get(0).path
    if (initialPath?.contains("emulated")!!) {
        imagePath = initialPath
    } else {
        imagePath = "/data/data/${requireActivity().packageName}/cache" + initialPath
    }
    println("onImagesPicked $imagePath")
    val file = File(imagePath)
    Picasso.with(requireContext()).load(file).into(binding.ivProfilePic)
}

In the Application class, I am initializing like this
ChiliPhotoPicker.init(loader = PicassoImageLoader(), authority = "$packageName.fileprovider")

When I run the code, the Picker appears but when I select a image the onImagePicked callback is never called.

BUG: Just crashes

I simply put implementation "com.github.ChiliLabs:ChiliPhotoPicker:0.2.0" in my app/build.gradle and app started crashing with this exception:

java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.sec.android.app.camera/.Camera clip={text/uri-list U:content://pl.baftek.discoverrudy.fileprovider/Comment%20images/commentphoto_20191120_192059_6067355174982695808.jpg} (has extras) } from ProcessRecord{d346b7fd0 20377:pl.baftek.discoverrudy/u0a281} (pid=20377, uid=10281) with revoked permission android.permission.CAMERA

Caused by: android.os.RemoteException: Remote stack trace: at com.android.server.am.ActivityStackSupervisor.checkStartAnyActivityPermission(ActivityStackSupervisor.java:2118) at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:892) at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:662) at com.android.server.am.ActivityStarter.startActivityMayWait(ActivityStarter.java:1511) at com.android.server.am.ActivityStarter.execute(ActivityStarter.java:603)

Code that causes this to happen:

private fun dispatchTakePictureIntent(imageView: View) {
        val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)

        // Ensure that there's a camera activity to handle the intent
        if (takePictureIntent.resolveActivity(packageManager) != null) {
            // Create the File where the photo should go
            photoFile = try {
                createImageFile()
            } catch (e: IOException) {
                // Error occurred while creating the File
                e.printStackTrace()
                null
            }

            // Continue only if the File was successfully created
            if (photoFile != null) {
                val photoUri: Uri = FileProvider.getUriForFile(
                    this,
                    "pl.baftek.discoverrudy.fileprovider",
                    photoFile!!
                )
                lastImageView = imageView.id

                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri)
                startActivityForResult(takePictureIntent, 1)
            }
        }
    }

I've tested it and I'm certaing that implementation of this library is the only reason why my app crashes. When I write implementation ..., app crashes while executing the aforementioned block of code. I totally don't have any idea why this thing happens. It's a pity, because I'm currenly looking for a lib like this.

Doesn't ask for permissions in Java implementation

I worked around this library and implemented it in Java but it doesn't ask for permissions when clicking on the "Allow" button without any error message or crash.
Is this because it has be done in java or there is something I am missing in the implementation?

Error from implementation

Hi,

I get the following error when integrating ChiliPicker

ERROR: Failed to resolve: com.github.ChiliLabs: ChiliPhotoPicker: x.y.z
Show in Project Structure dialog
Affected Modules: app

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.