diff --git a/birdy/client/converters.py b/birdy/client/converters.py
index 8e6b3fc..f3e9471 100644
--- a/birdy/client/converters.py
+++ b/birdy/client/converters.py
@@ -17,7 +17,7 @@ else:
 class BaseConverter(object):
     mimetype = None
     extensions = []
-    priority = 1
+    priority = None
     nested = False
 
     def __init__(self, output=None, path=None, verify=True):
@@ -41,11 +41,20 @@ class BaseConverter(object):
 
     @property
     def file(self):
+        """Return output Path object. Download from server if """
         if self._file is None:
             self.output.writeToDisk(path=self.path, verify=self.verify)
             self._file = Path(self.output.filePath)
         return self._file
 
+    @property
+    def data(self):
+        """Return the data from the remote output in memory."""
+        if self._file is not None:
+            return self.file.read_bytes()
+        else:
+            return self.output.retrieveData()
+
     def check_dependencies(self):
         pass
 
@@ -62,13 +71,26 @@ class BaseConverter(object):
             raise type(e)(message.format(self.__class__.__name__, name))
 
     def convert(self):
-        return self.file.read_text(encoding='utf8')
+        """To be subclassed"""
+        raise NotImplementedError
+
+
+class GenericConverter(BaseConverter):
+    priority = 0
+
+    def convert(self):
+        """Return raw bytes memory representation."""
+        return self.data
 
 
 class TextConverter(BaseConverter):
     mimetype = "text/plain"
-    extensions = ['txt', 'csv']
+    extensions = ['txt', 'csv', 'md', 'rst']
+    priority = 1
 
+    def convert(self):
+        """Return text content."""
+        return self.file.read_text(encoding='utf8')
 
 # class HTMLConverter(BaseConverter):
 #     """Create HTML cell in notebook."""
@@ -89,6 +111,7 @@ class TextConverter(BaseConverter):
 class JSONConverter(BaseConverter):
     mimetype = "application/json"
     extensions = ['json', ]
+    priority = 1
 
     def convert(self):
         """
@@ -103,6 +126,7 @@ class JSONConverter(BaseConverter):
 class GeoJSONConverter(BaseConverter):
     mimetype = "application/vnd.geo+json"
     extensions = ['geojson', ]
+    priority = 1
 
     def check_dependencies(self):
         self._check_import("geojson")
@@ -117,6 +141,7 @@ class MetalinkConverter(BaseConverter):
     mimetype = "application/metalink+xml; version=3.0"
     extensions = ['metalink', ]
     nested = True
+    priority = 1
 
     def check_dependencies(self):
         self._check_import("metalink.download")
@@ -135,6 +160,7 @@ class Meta4Converter(MetalinkConverter):
 class Netcdf4Converter(BaseConverter):
     mimetype = "application/x-netcdf"
     extensions = ['nc', ]
+    priority = 1
 
     def check_dependencies(self):
         self._check_import("netCDF4")
@@ -180,6 +206,7 @@ class XarrayConverter(BaseConverter):
 
 class ShpFionaConverter(BaseConverter):
     mimetype = "application/x-zipped-shp"
+    priority = 1
 
     def check_dependencies(self):
         self._check_import("fiona")
@@ -193,6 +220,7 @@ class ShpFionaConverter(BaseConverter):
 
 class ShpOgrConverter(BaseConverter):
     mimetype = "application/x-zipped-shp"
+    priority = 1
 
     def check_dependencies(self):
         self._check_import("ogr", package="osgeo")
@@ -207,6 +235,7 @@ class ShpOgrConverter(BaseConverter):
 class ImageConverter(BaseConverter):
     mimetype = 'image/png'
     extensions = ['png', ]
+    priority = 1
 
     def check_dependencies(self):
         return nb.is_notebook()
@@ -220,6 +249,7 @@ class ZipConverter(BaseConverter):
     mimetype = 'application/zip'
     extensions = ['zip', ]
     nested = True
+    priority = 1
 
     def convert(self):
         import zipfile
@@ -231,7 +261,7 @@ class ZipConverter(BaseConverter):
 def _find_converter(mimetype=None, extension=None, converters=()):
     """Return a list of compatible converters ordered by priority.
     """
-    select = []
+    select = [GenericConverter]
     for obj in converters:
         if (mimetype == obj.mimetype) or (extension in obj.extensions):
             select.append(obj)
@@ -269,13 +299,16 @@ def convert(output, path, converters=None, verify=True):
     Returns
     -------
     objs
-      Python object or path to file if no converter was found.
+      Python object or file's content as bytes.
     """
+    # Get all converters
     if converters is None:
         converters = all_subclasses(BaseConverter)
 
+    # Find converters matching mime type or extension.
     convs = find_converter(output, converters)
 
+    # Try converters in order of priority
     for cls in convs:
         try:
             converter = cls(output, path=path, verify=verify)
@@ -287,13 +320,6 @@ def convert(output, path, converters=None, verify=True):
         except (ImportError, NotImplementedError):
             pass
 
-    if isinstance(output, Output):
-        warnings.warn(UserWarning("No converter was found for {}".format(output.identifier)))
-        return output.reference
-    else:
-        warnings.warn(UserWarning("No converter was found for {}".format(output)))
-        return output
-
 
 def all_subclasses(cls):
     """Return all subclasses of a class."""

Retrieve the data if no converter is found
## Description

At the moment, if no converter is available, `get(asobj=True)` returns the link. I suggest that instead we return the output of `retrieveData()`.


diff --git a/tests/test_client.py b/tests/test_client.py
index 1f77f00..f9881d0 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -150,11 +150,10 @@ def test_asobj(wps):
         out = resp.get(asobj=True)
         assert 'URL' in out.output
 
-    # If the converter is missing, we should still get the reference.
-    with pytest.warns(UserWarning):
-        resp._converters = []
-        out = resp.get(asobj=True)
-        assert out.output.startswith('http://')
+    # If the converter is missing, we should still get the data as bytes.
+    resp._converters = []
+    out = resp.get(asobj=True)
+    assert isinstance(out.output, bytes)
 
 
 @pytest.mark.online
@@ -316,13 +315,14 @@ def test_zipconverter():
     assert len(ob.splitlines()) == 2
 
 
-@pytest.mark.skip("jpeg not supported yet")
 def test_jpeg_imageconverter():
+    "Since the format is not supported, bytes will be returned."
     fn = tempfile.mktemp(suffix='.jpeg')
     with open(fn, 'w') as f:
         f.write('jpeg.jpg JPEG 1x1 1x1+0+0 8-bit Grayscale Gray 256c 107B 0.000u 0:00.000')
 
-    converters.convert(fn, path='/tmp')
+    b = converters.convert(fn, path='/tmp')
+    assert isinstance(b, bytes)
 
 
 class TestIsEmbedded():

environment.yml
python setup.py install
parse_log_pytest
environment.yml
pytest
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster @ file:///home/conda/feedstock_root/build_artifacts/alabaster_1673645646525/work
astroid==2.11.7
attrs @ file:///home/conda/feedstock_root/build_artifacts/attrs_1671632566681/work
Babel @ file:///home/conda/feedstock_root/build_artifacts/babel_1667688356751/work
birdhouse-birdy==0.6.3
boltons @ file:///home/conda/feedstock_root/build_artifacts/boltons_1622121478442/work
brotlipy==0.7.0
certifi==2021.5.30
cffi @ file:///home/conda/feedstock_root/build_artifacts/cffi_1631636256886/work
cftime @ file:///home/conda/feedstock_root/build_artifacts/cftime_1632539733990/work
charset-normalizer @ file:///home/conda/feedstock_root/build_artifacts/charset-normalizer_1661170624537/work
click @ file:///home/conda/feedstock_root/build_artifacts/click_1621503698523/work
colorama @ file:///home/conda/feedstock_root/build_artifacts/colorama_1655412516417/work
cryptography @ file:///home/conda/feedstock_root/build_artifacts/cryptography_1634230300355/work
dataclasses==0.8
docutils @ file:///home/conda/feedstock_root/build_artifacts/docutils_1618676244774/work
flake8 @ file:///home/conda/feedstock_root/build_artifacts/flake8_1659645013175/work
funcsigs==1.0.2
idna @ file:///home/conda/feedstock_root/build_artifacts/idna_1726459485162/work
imagesize @ file:///home/conda/feedstock_root/build_artifacts/imagesize_1656939531508/work
importlib-metadata @ file:///home/conda/feedstock_root/build_artifacts/importlib-metadata_1630267465156/work
iniconfig @ file:///home/conda/feedstock_root/build_artifacts/iniconfig_1603384189793/work
Jinja2 @ file:///home/conda/feedstock_root/build_artifacts/jinja2_1636510082894/work
lazy-object-proxy==1.7.1
lxml @ file:///home/conda/feedstock_root/build_artifacts/lxml_1616532291993/work
MarkupSafe @ file:///home/conda/feedstock_root/build_artifacts/markupsafe_1621455668064/work
mccabe @ file:///home/conda/feedstock_root/build_artifacts/mccabe_1643049622439/work
more-itertools @ file:///home/conda/feedstock_root/build_artifacts/more-itertools_1690211628840/work
netCDF4 @ file:///home/conda/feedstock_root/build_artifacts/netcdf4_1633096406418/work
numpy @ file:///home/conda/feedstock_root/build_artifacts/numpy_1626681920064/work
OWSLib @ file:///home/conda/feedstock_root/build_artifacts/owslib_1630027017285/work
owslib-esgfwps==0.1.0
packaging @ file:///home/conda/feedstock_root/build_artifacts/packaging_1637239678211/work
pandas==1.1.5
pathlib==1.0.1
pluggy @ file:///home/conda/feedstock_root/build_artifacts/pluggy_1631522669284/work
py @ file:///home/conda/feedstock_root/build_artifacts/py_1636301881863/work
pycodestyle @ file:///home/conda/feedstock_root/build_artifacts/pycodestyle_1659638152915/work
pycparser @ file:///home/conda/feedstock_root/build_artifacts/pycparser_1636257122734/work
pyflakes @ file:///home/conda/feedstock_root/build_artifacts/pyflakes_1659210156976/work
Pygments @ file:///home/conda/feedstock_root/build_artifacts/pygments_1672682006896/work
pyOpenSSL @ file:///home/conda/feedstock_root/build_artifacts/pyopenssl_1663846997386/work
pyparsing @ file:///home/conda/feedstock_root/build_artifacts/pyparsing_1724616129934/work
pyproj @ file:///home/conda/feedstock_root/build_artifacts/pyproj_1614934904503/work
PySocks @ file:///home/conda/feedstock_root/build_artifacts/pysocks_1610291458349/work
pytest==6.2.5
python-dateutil @ file:///home/conda/feedstock_root/build_artifacts/python-dateutil_1626286286081/work
pytz @ file:///home/conda/feedstock_root/build_artifacts/pytz_1693930252784/work
PyYAML==5.4.1
requests @ file:///home/conda/feedstock_root/build_artifacts/requests_1656534056640/work
six @ file:///home/conda/feedstock_root/build_artifacts/six_1620240208055/work
snowballstemmer @ file:///home/conda/feedstock_root/build_artifacts/snowballstemmer_1637143057757/work
Sphinx @ file:///home/conda/feedstock_root/build_artifacts/sphinx_1658872348413/work
sphinx-autoapi==1.8.4
sphinxcontrib-applehelp @ file:///home/conda/feedstock_root/build_artifacts/sphinxcontrib-applehelp_1674487779667/work
sphinxcontrib-devhelp==1.0.2
sphinxcontrib-htmlhelp @ file:///home/conda/feedstock_root/build_artifacts/sphinxcontrib-htmlhelp_1675256494457/work
sphinxcontrib-jsmath @ file:///home/conda/feedstock_root/build_artifacts/sphinxcontrib-jsmath_1691604704163/work
sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml @ file:///home/conda/feedstock_root/build_artifacts/sphinxcontrib-serializinghtml_1649380998999/work
toml @ file:///home/conda/feedstock_root/build_artifacts/toml_1604308577558/work
typed-ast==1.5.5
typing_extensions @ file:///home/conda/feedstock_root/build_artifacts/typing_extensions_1644850595256/work
Unidecode==1.3.8
urllib3 @ file:///home/conda/feedstock_root/build_artifacts/urllib3_1678635778344/work
wrapt @ file:///home/conda/feedstock_root/build_artifacts/wrapt_1633440474617/work
xarray @ file:///home/conda/feedstock_root/build_artifacts/xarray_1621474818012/work
zipp @ file:///home/conda/feedstock_root/build_artifacts/zipp_1633302054558/work

name: birdy
channels:
  - birdhouse
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=conda_forge
  - _openmp_mutex=4.5=2_gnu
  - alabaster=0.7.13=pyhd8ed1ab_0
  - attrs=22.2.0=pyh71513ae_0
  - babel=2.11.0=pyhd8ed1ab_0
  - boltons=21.0.0=pyhd8ed1ab_0
  - brotlipy=0.7.0=py36h8f6f2f9_1001
  - bzip2=1.0.8=h4bc722e_7
  - c-ares=1.34.4=hb9d3cd8_0
  - ca-certificates=2025.1.31=hbcca054_0
  - certifi=2021.5.30=py36h5fab9bb_0
  - cffi=1.14.6=py36hd8eec40_1
  - cftime=1.5.1=py36he33b4a0_0
  - charset-normalizer=2.1.1=pyhd8ed1ab_0
  - click=8.0.1=py36h5fab9bb_0
  - colorama=0.4.5=pyhd8ed1ab_0
  - cryptography=35.0.0=py36hb60f036_0
  - curl=7.87.0=h6312ad2_0
  - docutils=0.17.1=py36h5fab9bb_0
  - flake8=5.0.4=pyhd8ed1ab_0
  - funcsigs=1.0.2=py_3
  - hdf4=4.2.15=h9772cbc_5
  - hdf5=1.12.1=nompi_h2386368_104
  - icu=73.2=h59595ed_0
  - idna=3.10=pyhd8ed1ab_0
  - imagesize=1.4.1=pyhd8ed1ab_0
  - importlib-metadata=4.8.1=py36h5fab9bb_0
  - importlib_metadata=4.8.1=hd8ed1ab_1
  - iniconfig=1.1.1=pyh9f0ad1d_0
  - jinja2=3.0.3=pyhd8ed1ab_0
  - jpeg=9e=h0b41bf4_3
  - keyutils=1.6.1=h166bdaf_0
  - krb5=1.20.1=hf9c8cef_0
  - ld_impl_linux-64=2.43=h712a8e2_4
  - lerc=4.0.0=h27087fc_0
  - libblas=3.9.0=31_h59b9bed_openblas
  - libcblas=3.9.0=31_he106b2a_openblas
  - libcurl=7.87.0=h6312ad2_0
  - libdeflate=1.14=h166bdaf_0
  - libedit=3.1.20250104=pl5321h7949ede_0
  - libev=4.33=hd590300_2
  - libffi=3.4.6=h2dba641_0
  - libgcc=14.2.0=h767d61c_2
  - libgcc-ng=14.2.0=h69a702a_2
  - libgfortran=14.2.0=h69a702a_2
  - libgfortran-ng=14.2.0=h69a702a_2
  - libgfortran5=14.2.0=hf1ad2bd_2
  - libgomp=14.2.0=h767d61c_2
  - libiconv=1.18=h4ce23a2_1
  - liblapack=3.9.0=31_h7ac8fdf_openblas
  - liblzma=5.6.4=hb9d3cd8_0
  - liblzma-devel=5.6.4=hb9d3cd8_0
  - libnetcdf=4.8.1=nompi_h329d8a1_102
  - libnghttp2=1.51.0=hdcd2b5c_0
  - libnsl=2.0.1=hd590300_0
  - libopenblas=0.3.29=pthreads_h94d23a6_0
  - libsqlite=3.46.0=hde9e2c9_0
  - libssh2=1.10.0=haa6b8db_3
  - libstdcxx=14.2.0=h8f9b012_2
  - libstdcxx-ng=14.2.0=h4852527_2
  - libtiff=4.4.0=h82bc61c_5
  - libwebp-base=1.5.0=h851e524_0
  - libxml2=2.12.7=hc051c1a_1
  - libxslt=1.1.39=h76b75d6_0
  - libzip=1.9.2=hc869a4a_1
  - libzlib=1.2.13=h4ab18f5_6
  - lxml=4.6.3=py36h04a5ba7_0
  - markupsafe=2.0.1=py36h8f6f2f9_0
  - mccabe=0.7.0=pyhd8ed1ab_0
  - more-itertools=10.0.0=pyhd8ed1ab_0
  - ncurses=6.5=h2d0b736_3
  - netcdf4=1.5.7=nompi_py36h775750b_103
  - numpy=1.19.5=py36hfc0c790_2
  - openssl=1.1.1w=hd590300_0
  - owslib=0.25.0=pyhd8ed1ab_0
  - owslib-esgfwps=0.1.0=py_0
  - packaging=21.3=pyhd8ed1ab_0
  - pandas=1.1.5=py36h284efc9_0
  - pip=21.3.1=pyhd8ed1ab_0
  - pluggy=1.0.0=py36h5fab9bb_1
  - proj=8.0.0=h277dcde_0
  - py=1.11.0=pyh6c4a22f_0
  - pycodestyle=2.9.1=pyhd8ed1ab_0
  - pycparser=2.21=pyhd8ed1ab_0
  - pyflakes=2.5.0=pyhd8ed1ab_0
  - pygments=2.14.0=pyhd8ed1ab_0
  - pyopenssl=22.0.0=pyhd8ed1ab_1
  - pyparsing=3.1.4=pyhd8ed1ab_0
  - pyproj=3.0.1=py36h6e9aebd_1
  - pysocks=1.7.1=py36h5fab9bb_3
  - pytest=6.2.5=py36h5fab9bb_0
  - python=3.6.15=hb7a2778_0_cpython
  - python-dateutil=2.8.2=pyhd8ed1ab_0
  - python_abi=3.6=2_cp36m
  - pytz=2023.3.post1=pyhd8ed1ab_0
  - pyyaml=5.4.1=py36h8f6f2f9_1
  - readline=8.2=h8c095d6_2
  - requests=2.28.1=pyhd8ed1ab_0
  - setuptools=58.0.4=py36h5fab9bb_2
  - six=1.16.0=pyh6c4a22f_0
  - snowballstemmer=2.2.0=pyhd8ed1ab_0
  - sphinx=5.1.1=pyh6c4a22f_0
  - sphinxcontrib-applehelp=1.0.4=pyhd8ed1ab_0
  - sphinxcontrib-devhelp=1.0.2=py_0
  - sphinxcontrib-htmlhelp=2.0.1=pyhd8ed1ab_0
  - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
  - sphinxcontrib-qthelp=1.0.3=py_0
  - sphinxcontrib-serializinghtml=1.1.5=pyhd8ed1ab_2
  - sqlite=3.46.0=h6d4b2fc_0
  - tk=8.6.13=noxft_h4845f30_101
  - toml=0.10.2=pyhd8ed1ab_0
  - typing_extensions=4.1.1=pyha770c72_0
  - urllib3=1.26.15=pyhd8ed1ab_0
  - wheel=0.37.1=pyhd8ed1ab_0
  - wrapt=1.13.1=py36h8f6f2f9_0
  - xarray=0.18.2=pyhd8ed1ab_0
  - xz=5.6.4=hbcc6ac9_0
  - xz-gpl-tools=5.6.4=hbcc6ac9_0
  - xz-tools=5.6.4=hb9d3cd8_0
  - yaml=0.2.5=h7f98852_2
  - zipp=3.6.0=pyhd8ed1ab_0
  - zlib=1.2.13=h4ab18f5_6
  - zstd=1.5.6=ha6fb4c9_0
  - pip:
      - astroid==2.11.7
      - birdhouse-birdy==0.6.3
      - dataclasses==0.8
      - lazy-object-proxy==1.7.1
      - pathlib==1.0.1
      - sphinx-autoapi==1.8.4
      - typed-ast==1.5.5
      - unidecode==1.3.8
prefix: /opt/conda/envs/birdy

tests/test_client.py::test_jpeg_imageconverter
tests/test_client.py::test_wps_client_backward_compability tests/test_client.py::test_interactive tests/test_client.py::test_process_subset_only_one tests/test_client.py::test_process_subset_names tests/test_client.py::test_netcdf
tests/test_client.py::test_all_subclasses tests/test_client.py::test_jsonconverter tests/test_client.py::test_zipconverter tests/test_client.py::TestIsEmbedded::test_string tests/test_client.py::TestIsEmbedded::test_file_like tests/test_client.py::TestIsEmbedded::test_local_fn tests/test_client.py::TestIsEmbedded::test_local_path tests/test_client.py::TestIsEmbedded::test_local_uri tests/test_client.py::TestIsEmbedded::test_url
birdy/client/converters.py
birdy/client/converters.py